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


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


  • Самый простой индикатор уровня звукового сигналаСамый простой индикатор уровня звукового сигнала
    Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете  самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на WS2812B по подключению …
  • ch-светомузыка и AK4113ch-светомузыка и AK4113
    Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это такое, так …
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA20412-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
    Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении ряда аппаратных …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить в работе …
  • Счетчики посетителейСчетчики посетителей
    Вас сосчитали!? или счетчики посетителей.   Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое количество вечером. …
  • Проект с использованием MCC часть 03Проект с использованием MCC часть 03
    Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки мы должны …
  • УКВ – радиоприем, часть 2УКВ – радиоприем, часть 2
    Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального приемника RDA5807FP читайте …
  • LED модуль P10 (1R) V706ALED модуль P10 (1R) V706A
    Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа  R-красные, но не верьте паяют светики и зеленые и синие, в общем любые какие …
  • Analog-to-Digital Converter with Computation Technical BriefAnalog-to-Digital Converter with Computation Technical Brief
    Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, усреднение и …
  • PIC18 – модуль DMAPIC18 – модуль DMA
    Введение   Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной  обработки прерываний процессором, …



 

Tagged with →  
Share →
Translate »

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

e-mail: catcatcat.electronics@gmail.com