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