четверг, 30 декабря 2021 г.

PWM (ШИМ) на STM32F103, Си и CMSIS

 Широтно импульсная модуляция (ШИМ, PWM) напряжения - это чрезвычайно полезная функция микроконтроллера т.к. такой тип модуляции чаще других применяется на практике. Можно сказать что это очень популярный тип модуляции и поэтому в популярных микроконтроллерах ШИМ модулятор часто присутствует на аппаратном уровне в виде периферийного устройства или их совокупности. В микроконтроллере stm32f103 есть некоторое количество каналов с которых можно получить ШИМ. Пины с которых можно его получить д.б. связаны с таймерами которые могут работать в режиме широтно импульсной модуляции. Таймер общего назначения TIM2 может работать в таком режиме. Из таблицы в даташите можно выбрать пин связанный с этим таймером:


Этот таймер надо настроить (об этом есть отдельная статья ->https://electe.blogspot.com/2021/12/stm32f103c8t6-cmsis_24.html). Также надо включить тактирование выбранного таймера и порта на котором выбранный пин который также надо настроить на выход. К выбранному пину можно подключить светодиод например как на схеме:


После этих настроек:

Будут ещё минимум 4 регистра которые надо настроить чтобы получить минимальный проект использующий ШИМ. С настройками, как на картинке выше, таймер считает от 0 до 10000 после чего счетчик сбрасывается и счет начинается заново. В регистр CCR1 можно записать число от 0 до 10000 которое будет определять коэффициент заполнения ШИМ. Т.е. при достижении счетчиком данного числа будет происходить переключение напряжения на выбранном пине. Чтобы включить эту опцию надо записать  1 в первый бит регистра CCER:
Есть регистр CCMR1 чтобы настроить режим захвата/сравнения таймера TIM2. В биты с 4 по 6 записывается код определяющий режим работы. Если записать в них 110 то будет режим "ШИМ1" который описан в мануале:


В конце можно записать 1 в нулевой бит регистра CR1 и тем самым запустить таймер и ШИМ на выбранном пине. Полный код может выглядеть например так:
По теме ШИМа на STM32F103C8 можно посмотреть видео:

Комментариев нет:

Отправить комментарий