PWM ШИМ

Шпаргалка как на STM32 настраиваем ШИМ

Задача возникла управлять обмотками шагового двигателя "по взрослому": то есть с возможностью изменять количество импульсов и с возможностью задавать определенный период импульсов.

Сначала включаем в Cube MX таймер

У него может быть несколько каналов на выход , т.е. можем управлять несколькими ножками на выходе колнтроллера.

фотка 1

Настраиваем частоты для STM32F407VET6

фотка 2

Параметр Prescaler первым делом понижает частоту в n раз. У нас 8400 выбрано для удобства , 84MHz - частота APB2 peripheral clock , ну и еще в 100 раз уменьшим.

Как задается скважность?

Параметром таймера Counter Period (AutoReload register) задаем какое-то число (допустим 500).

А параметром Pulse конкретного канала таймера устанавливаем число от 0 до Counter Period.

фотка 3

Pulse /Counter Period- это скважность. В нашем случае 100/500 = 20%.

фотка 4

Обратите внимание на частоту сигнала 19,956Hz . 19,956 * 500 * 8400 = 83815200 - это частота генератора нашего таймера (APB2 peripheral clock).

CH Polarity

Для канала важно CH Polarity , что выставлено LOW | HIGH ?

Вот простой пример : если у канала стоит TIM_OCPOLARITY_LOW, и случается одиночный импульс, то выглядеть он может совсем не как импульс, в зависимости от того какой уровень на линии был до этого (0).

фотка 5

То есть при таком импульсе сначала идет установка в 0 , а потом в 1. Но дело в том ,что изначально у линии уже ноль был, поэтому мы видим не импульс , а ступеньку.

CH Polarity : HIGH это обычный вариант, когда импульс выглядит как 0-1-0, а LOW наоборот 1-0-1.


Таймеры бывают разные

Таймеры General Purpose (общего назначения)

Большинство таймеров General Purpose (общего назначения).

Файлы для скачивания

* изучаем таймеры PWD Atollic [zip]
генерируем несколько импульсов разной скважности