Введение
Широтно-импульсная модуляция (ШИМ), или на английском языке Pulse-Width Modulation (PWM), представляет собой процесс управления мощностью, подводимой к нагрузке, путём изменения скважности импульсов, при постоянной частоте.
Широтно-импульсная модуляция давно и активно внедряется в микроконтроллеры мировых производителей. Благодаря своей простоте и универсальности данный вид управления надёжно закрепился в микроконтроллерной технике и часто используется для регулирования различных процессов.
Микроконтроллеры серии STM32 компании STMicroelectronics [1] также имеют в своём составе блоки ШИМ.
Пример использования
Рассмотрим функционирование ШИМ в микроконтроллерах серии STM32 на примере управления трёхцветным светодиодом RGB. Такой светодиод позволяет изменять свою яркость и цвет во всём видимом цветовом диапазоне путём смешивания трёх цветов (красного, зелёного и синего) с различной интенсивностью свечения. С помощью ШИМ можно плавно управлять интенсивностью каждого цвета и добиться при этом плавной смены оттенка свечения всего светодиода. Вместо одного трёхцветного светодиода можно также использовать три одноцветных светодиода.
Реализация
Подключать выводы светодиода необходимо к тем выводам микроконтроллера, которые связаны с таймером, формирующим ШИМ-регулирование. Например, при использовании второго таймера подойдут выводы TIM2_CH1…TIM2_CH4 микроконтроллера.
Схема подключения светодиодов к микроконтроллеру приведена на рисунке.
Для активации указанных выводов необходимо сконфигурировать их как выходы с альтернативной функцией, и разрешить в настройках таймера управлять этими выводами для генерации сигналов ШИМ.
Для такой настройки используется внутренний регистр микроконтроллера с сокращённым названием CCER, приведённый в таблице 1.
Здесь и далее символы RW обозначают разрешение чтения и записи.
При установке в единичное состояние битов CC1E…CC3E таймеру будет разрешено использовать соответствующий вывод для управления ШИМ.
Кроме того, необходимо выбрать режим работы ШИМ: в прямом или обратном управлении. При прямом управлении коэффициент заполнения ШИМ увеличивается от 0 до 100% при увеличении числа в регистре сравнения, а при обратном – уменьшается от 100 до 0%.
Для выбора режима используются два регистра – CCMR1 и CCMR2, приведённые в таблицах 2 и 3, соответственно.
За выбор режима ШИМ в этих регистрах отвечают биты OC1M[2:0]…OC3M[2:0].
Биты IC1PSC[1:0]…IC3PSC[1:0] и IC1F[3:0]…IC3F[3:0] позволяют произвести аналогичную настройку, но уже в режиме захвата сигнала.
В таблице 4 приведено состояние битов для прямого и обратного режима ШИМ для любого из каналов n.
Поскольку большинство остальных комбинаций описанных регистров не имеют отношения к ШИМ, эти комбинации здесь не рассматриваются.
Инверсный режим ШИМ удобно использовать для трёхцветных светодиодов с общим анодом, поскольку при включении коэффициент заполнения ШИМ будет равен 100% и светодиод будет погашен за счёт приложения к катодам высокого уровня напряжения.
После настройки каналов ШИМ необходимо запустить таймер, установив бит CEN в регистре TIM2_CR1. Интенсивность свечения светодиода зависит от заполнения импульсов ШИМ, т.е. от скважности. Регулировать эту скважность можно путём записи числа от 0x0000 до 0xFFFF в регистры CCRn таймера, где n – номер канала.
Для создания эффекта плавного изменения цвета необходимо с определённой периодичностью производить запись в указанный регистр нарастающих и убывающих чисел.
В листинге приведён код программы, демонстрирующей данный алгоритм управления трёхцветным светодиодом.
После трансляции и загрузки программы в микроконтроллер можно будет наблюдать, как плавно изменяется цвет и яркость светодиода. Данный процесс повторяется циклично и смотрится эффектно и красиво.
По аналогии можно написать программу, которая, например, позволит управлять мощностью нагревателя с целью поддержания заданной температуры, или скоростью какого-либо объекта.
Подобные задачи встречаются довольно часто во многих областях науки и техники.
Литература
Если вам понравился материал, кликните значок - вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал - не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!