Views: 1267
Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного 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х модуль в режиме ШИМ и управлять им!
Это может быть интересно
Бегущие огни (ch-bo-36)Views: 2604 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …
Самый простой диммер для светодиодного освещенияViews: 3196 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …
Дифференциальный терморегуляторViews: 4143 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …
ch-4000 – универсальная печатная платаViews: 1129 На смену устаревшей плате ch-3000, пришла новая ch-4000. Плату уже можно приобрести в магазине Ворон. Схема. Плата позволяет создавать таймеры, часы реального времени, регуляторы температуры, регуляторы влажности, вольтметры, …
Мультизоновый индикатор-терморегулятор ch-c3010Views: 1338 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …
My libraries for Altium DesignerViews: 4414 Attention, this version of the database is outdated today. See updates in articles https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure and https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure-v23-2/ My libraries for Altium designer (Updated V – 29/05/2022) (c) 2021 …
ch-4050 – дифференциальный терморегуляторViews: 2074 ch-4050 – это не новая модель, это расширенная версия универсального терморегулятора ch-4000. Различия коснулись в появлении новой функции дифференциального регулирования. Это вид регулирования по разности температур измеренного двумя …
Униполярный шаговый двигатель – часть 2Views: 990 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …
Temperature measurement with NTC thermistor.Views: 661 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
Стабилизатор тока на SN3350, часть 2Views: 1301 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …















