MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ

Views: 1276


Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного 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:

void OC1_PrimaryValueSet( uint16_t priVal )
{
   
    OC1R = priVal;
}

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

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

void PWM1 (uint8_t percent)        //
{
uint32_t pwmu = percent;
    pwmu = (pwmu*OC1RS)/100;
    OC1R = (uint16_t)pwmu;
}

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

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


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


  • TDA7294 part 1TDA7294 part 1
    Views: 493 TDA7294 має унікальні дані для створення підсилювачів звукової частоти HI-FI класу. Варіант застосування є конфігурація BRIDGE (мостова схема включення), де використовуються два TDA7294, як показано на схематичній діаграмі …
  • Мониторинг температурыМониторинг температуры
    Views: 1479 Настоящий проект создан как обучающий с применением библиотек ds18b20 и LCDHD44780 и компилятора Microchip MPLAB XC8 C Compiler V1.12. Если необходимо иметь информацию по состоянию температуры в помещении или в здании, с количеством до 6 точек (16), то …
  • Acquaintance with audio-bluetooth modules F-6888 (BK3254).Acquaintance with audio-bluetooth modules F-6888 (BK3254).
    Views: 2399 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
  • Универсальный терморегулятор ch-c3000Универсальный терморегулятор ch-c3000
    Views: 3223 Терморегулятор ch-c3000 предназначен для управления системами регулирования температуры в пределах от – (минус) 55 до + 125 С. Регулятор может использоваться как в системах отопления, так и в …
  • MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналовMCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналов
    Views: 812 При проектировании простых устройств автоматики, часто необходимо иметь механизм звукового оповещения. Самый верхний уровень, это формирование голосовых сообщений, но об этом, как то по позже… В самом примитивном …
  • JDY-62A Audio bluetooth moduleJDY-62A Audio bluetooth module
    Views: 1890 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
  • Мультизоновый индикатор-терморегулятор ch-c3010Мультизоновый индикатор-терморегулятор ch-c3010
    Views: 1351 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре,  температуру на улице, а в погребе (или на балконе) …
  • MPLAB® Harmony – или как это просто! Часть 1.MPLAB® Harmony – или как это просто! Часть 1.
    Views: 3853 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …
  • Проект с использованием MCC часть 03Проект с использованием MCC часть 03
    Views: 1710 Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки …
  • Стабилизатор тока на SN3350, часть 2Стабилизатор тока на SN3350, часть 2
    Views: 1318 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …



 

Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

Продолжайте читать

НазадДалее