Views: 1119
Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного 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х модуль в режиме ШИМ и управлять им!
Это может быть интересно
- Acquaintance with audio-bluetooth modules F-6888 (BK3254).Views: 2182 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
- Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04Views: 228 Смотри как установить и подключить библиотеку тут. V. – 23_04 – Component Database Update. – configuration file name – DXPPreferences1.DXPPrf. – Added two projects for audio amplifier …
- Audio-bluetooth modules BK8000L (noname)Views: 658 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
- NeoPixel LED and PIC24Views: 637 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
- Проект с использованием MCC часть 06Views: 1288 Изменим схему следующим образом добавим две тактовые кнопки BT1 и BT2. Теперь переключимся на конфигурацию выводов, для этого сделаем двойной клик в окне Ресурсы проекта на Pin Module. …
- Сенсорный выключатель светаViews: 12728 Хотя в настоящий момент актуальны системы управления освещением с передачей данных по электросети, но я думаю, что проекты такого рода тоже имеют право на жизнь. Анонс Три вида …
- Четырех канальный терморегулятор ch-4000Views: 3176 Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать …
- CLUBBEST-50-LightViews: 278 CLUBBEST-50-LIGHT Зміст Короткий опис проекту. 1 Опис схемотехніки візуалізатора музики. 2 Аудіо вхід. 3 MCU. 4 Цифровий вихід. 5 Схема живлення MCU. 6 Складання пристрою. 7 Список …
- Проект с использованием MCC часть 12-1Views: 955 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …
- Светодиоды со встроенным драйвером WS2812BViews: 934 Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery …