Использование аппаратных таймеров для генерации ШИМ-сигнала основано на работе счётчика, который меняет своё состояние с каждым активным перепадом уровня на тактовом входе. 1
Есть два основных способа создать сигнал ШИМ с помощью таймера: 1
- Односкатный ШИМ (Single Slope PWM). 1 Значение счётчика увеличивается на единицу с каждым активным тактовым перепадом, пока он не достигнет максимального значения. 1 После этого счётчик возвращает своё значение к нулю, и процесс счёта импульсов тактов повторяется. 1
- Двухскатный ШИМ (Dual Slope PWM). 1 Счётчик увеличивается с каждым тактом, а когда достигает максимального значения, начинает уменьшаться на каждом такте. 1 Уменьшение происходит до момента достижения счётчиком нуля, после чего опять начинается счёт на увеличение. 1
В микроконтроллерах AVR для реализации ШИМ посредством таймеров есть ШИМ-выходы на порты ввода/вывода. 2 Например, в микроконтроллере Attiny13 есть один таймер (Timer0) и два канала вывода ШИМ Pwm0a и Pwm0b, которые находятся на портах PB.0 и PB.1. 2
Чтобы начать работу с ШИМ, нужно: 2
- Сконфигурировать таймер на работу ШИМ. 2 Для этого нужно задать разрядность, состояние канала и частоту ШИМ. 2
- Сконфигурировать порты ШИМ на вывод. 2 Для этого используется команда Config порт = Output. 2
- Запустить таймер. 2 Для этого используется команда Start таймер. 2
- Записать скважность в ШИМ-канал. 2 Например, для канала A таймера 0 это делается так: Pwm0a = скважность. 2
В микроконтроллерах STM32 для генерации ШИМ-сигнала можно использовать general purpose таймеры. 3 Например, в случае с таймером TIM2 нужно: 3
- В STM32CubeMX перейти во вкладку Pinout, кликнуть на пин PA0 и в выпадающем списке выбрать TIM2_CH1. 3
- В дереве слева найти таймер TIM2, в Clock Source выбрать Internal Clock, в выпадающем списке Channel 1 выбрать PWM Generation CH1. 3
- Найти TIM2 во вкладке Configuration и установить Prescaler в значение 40, а Counter Period — в значение 256. 3
Важно учитывать, что требования используемых библиотек к таймерам могут повлиять на генерацию ШИМ. 1