Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые ЦАП.

MCC -позволяет быстро и легко настроить модули OC в PIC24 для работы с ШИМ.

Структурная схема модуля в режиме ШИМ:

Процедура настройки модуля для работы в режиме ШИМ выглядит так:

1. Настройте выход модуля OCx на нужный порт.
2. Вычислите требуемые рабочие циклы период или частоту ШИМ.
3. Установить начальное значение длительности.
4. Настроить параметр источника синхронизации.
5. Включите прерывание, я если требуется, для модулей сравнения таймера и вывода. Для использования PWM Fault необходимо использовать прерывание на выходе.
6. Выберите желаемый режим PWM в битах OCM <2: 0> (OCxCON1 <2: 0>).
7. Соответствующие входы Fault могут быть активированы с использованием битов ENFLT <2: 0>, как описано в OCxCON1.
8. Если в качестве источника тактового сигнала выбран таймер, настройте период работы таймера.

Примечание более подробно читайте в описании.

В MCC начинаем с добавления модуля в проект

Откроем закладку менеджер выводов Pin Manager: Grid View. В этом окне настроим выход модуля на необходимый для нас вывод порта. В моем варианте это порт RB9/

В окне Ресурсы проекта Project Resources выберем Pin Module и убедимся в настройке порта

Выберем наш модуль (кликаем по надписи)

Перейдем к настройке модуля.

Выберем режим ШИМ.

Необходимо выбрать источник тактовых импульсов для модуля, тут большой выбор опишем пару вариантов. Выберем FOSC/2 это тактирование от тактового генератора.

Если у нас тактовая 32 МГц, то на вход модуля будут поступать 16 МГц.

Параметр DCB оставим в варианте Start of instruction cycle.

Далее идут два важных параметра, это как будут запускаться работа ШИМ или как она будут синхронизироваться, а также параметр с какой выходной частотой будет работать ШИМ и его начальное значение.

Для начала зададим рабочую частоту (длительность) и начальное значение ШИМ. Это необходимо сделать в этом окне

Параметр Secondary Compare Count задает рабочую частоту или период ШИМ. У нас тактовая 16 МГц например нам необходимо частота  ШИМ 1000 Гц.

16 000 000 / 1000 = 16000

Промеряем 16000 < 0xFFFF (65535 это максимальное значение которое может иметь этот параметр) да меньше, значит, такая частота ШИМ возможна при такой тактовой частоте! Ok – подходит! Далее, чтобы получить например меандр, сделаем длительность импульса ШИМ 50%, это значит нашу

16000/2 = 8000

 Заполним поля.

Далее настроим панель синхронизации

Выполним генерацию MCC? чтобы он переписал наши файлы и загрузим прошивку по микроконтроллер, проверим что реально получили в железе:

на выходе наша заданная 1 кГц, длительность положительного и отрицательного периода одинакова мы имеем меандр!!!

Еще один вариант настройки ШИМ, можно в качестве тактовых импульсивный выбрать таймер. Например, ТМR2. В этом варианте необходимо будет настроить и сам таймер, например, у меня об имеет период работы 250 кГц.

Для установки параметров, например, 2 кГц частота шим и начальный период 30% рассчитаем значения для регистров OC1R (длительность импульса) и OC1RS (период – частота ШИМ).

250 000 / 2000 = 125 (OC1RS )

125 * 0,3 =37,5 (OC1R = 38)

Выполним генерацию, загрузим прошивку в МК и проверим состояние ШИМ

Частота 2 кГц, длительность импульса 30% все ок!

Осталось теперь понять как управлять в программе шириной импульса, Для этого нам MCC в файлах библиотеки oc1 функцию OC1_PrimaryValueSet:

Которая позволяет записывать регистр OC1R  или можно непосредственно выполнять запись в этот регистр.

Но это несколько не удобный метод, частенько проще формировать запись в ШИМ значения в процентах, например нам надо 50 процентов, просто пишем, 50 или надо 20% пишем 20, как это сделать? Я предлагаю использовать такой метод:

думаю, что выполняет функция достаточно просто, мы на основе значения в регистре периода вычисляем значение которое надо записать в регистр импульса, на основании аргумента в процентах (учтите, что значения процентов не должно превышать число 100!)

Вот так просто настроить OCх модуль в режиме ШИМ и управлять им!


Это может быть интересно


  • Индикатор температурыИндикатор температуры
    Проект для начинающих, на демо плате BB-2T3D-01. Простой индикатор температуры. Проект никак не задумывался, просто на витрину магазин Ворон нужна была демонстрационная модель на макетной плате, чего нибудь работающего. Остановились на индикаторе температуре. Нужен был какой нибудь выводной …
  • Четырех канальный терморегулятор ch-4000Четырех канальный терморегулятор ch-4000
     Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать как в …
  • Стабилизатор тока для светодиодов SN3350Стабилизатор тока для светодиодов SN3350
    SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V  драйвер светодиодов с внутренним ключом  SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или группой параллельно-последовательно …
  • Проект с использованием MCC часть 02Проект с использованием MCC часть 02
    Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем тактовый генератор. …
  • Проект с использованием MCC часть 13Проект с использованием MCC часть 13
    Так как используя MCC мы можем его использовать со своими библиотеками, поэтому настало время и свое создать. Для начала откроем наш заголовочный файл в нем очень много букв: По этому. да …
  • LCD индикаторы на драйвере ML1001LCD индикаторы на драйвере ML1001
     ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы. Описание драйвера  …
  • Проект с использованием MCC часть 08Проект с использованием MCC часть 08
    И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, которыи позволяет …
  • VU Meter Tower ARTVU Meter Tower ART
    Стерео индикатор уровня аудио сигнала. Компактность и удобство проектирования устройств на светодиодах WS2812B, а также легкость реализации алгоритма родило идею созданию своей конструкции. В этом проекте я предоставлю все материалы …
  • Цифровой тахометр для автомобиля CH-С3300Цифровой тахометр для автомобиля CH-С3300
     Тахометр Ch-С3300 предназначен для индикации и контроля оборотов, времени работы и максимальных оборотов развиваемых двигателем во время поездки. Датчиком может использоваться как обычный контактный прерыватель или выход датчика холла автомобиля …
  • MPLAB® Code ConfiguratorMPLAB® Code Configurator
    MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект. Метки:MPLAB® Code …



 

 

Tagged with →  
Share →
Translate »

Copyright © Catcatcat 2013-2018. Все права защищены.
Копирование разрешается только с указанием активной ссылки на правообладателя.

e-mail: catcatcat.electronics@gmail.com