Изменение частоты ШИМ (PWM) Ардуино
Содержание
- Широтно-импульсная модуляция Arduino
- Изменение частоты ШИМ Ардуино (разрядности)
- Как увеличить частоту и разрядность ШИМ Ардуино
Широтно-импульсная модуляция (ШИМ) Arduino UNO и NANO работает на аналоговых выходах 3, 5, 6, 9, 10, 11 с частотой 488,28 Гц. С помощью функции analogWrite частота ШИМ изменяется в диапазоне 0 до 255 и соответствует коэффициенту заполнения импульса от 0 до 100 %. Для многих устройств частота PWM Arduino NANO слишком мала, поэтому ее требуется увеличить. Рассмотрим, как это правильно сделать.
Широтно-импульсная модуляция Arduino
ШИМ, по-английски Pulse-Width Modulation (PWM) — это управление мощностью на нагрузке с помощью изменения скважности (ширины) импульсов при постоянной частоте и амплитуде сигнала. На следующем графике видно, что при разных значениях в функции analogWrite , амплитуда импульсов остается постоянной, но меняется ширина импульсов. Мощность сигнала определяет коэффициент заполнения импульса.
График. Параметры сигнала, коэффициент заполнения ШИМ
Можно выделить две области применения широтно-импульсной модуляции:
1. PWM используется в источниках питания, регуляторах мощности и т.д. Применение ШИМ на Arduino Nano позволяет значительно упростить управление яркостью источников света (светодиодов, LED-ленты) и скоростью вращения двигателей.
2. PWM используется для получения аналогового сигнала. Цифро-аналоговый преобразователь (ЦАП) на Ардуино прост в реализации, так как требует минимума радиоэлементов — достаточно одной RC цепочки из резистора и конденсатора.
Изменение частоты ШИМ Ардуино (разрядности)
Платы Arduino Uno и Arduino Nano на базе ATmega168/328 имеют 6 аппаратных ШИМ модуляторов на аналоговых портах 3, 5, 6, 9, 10, 11. Управление ШИМ сигналом осуществляется с помощью функции analogWrite , которая генерирует на выходе аналоговый сигнал и задает коэффициент заполнения импульса. Arduino устанавливает на выводах частоту 488,28 Гц и разрешение 8 разрядов (от 0 до 255).
Схема. Широтно-импульсная модуляция для чайников
В Arduino на базе ATmega168/328 для ШИМ используются три таймера:
Таймер 0 — выводы 5 и 6
Таймер 1 — выводы 9 и 10
Таймер 2 — выводы 3 и 11
ШИМ Ардуино определяется интегральными компонентами, называемыми таймерами. Каждый таймер в платах Arduino Uno и Nano на базе микроконтроллера ATmega168/328 имеет по два канала, подключенных к выходам. Для изменения частоты PWM сигнала требуется изменение таймера, к которому он подключается. При этом PWM изменится и на аналоговых выходах, подключенных параллельно к этому же таймеру.
Как увеличить частоту и разрядность ШИМ Ардуино
Не существует способа изменить частоту ШИМ Arduino без прямого управления памятью на низком уровне. Рассмотрим далее, как изменить режим работы таймера, чтобы увеличить частоту (frequency) ШИМ Ардуино. Таймер 0 используется для расчета времени, т.е. функции delay и millis. Увеличение частоты на Таймер 0 приведет к нарушению функций сохранения времени, которые могут использоваться в скетче.
Чтобы увеличить разрядность Ардуино на 9 и 10 аналоговом выходе, изменим частоту Таймера 1 без библиотеки. Максимальная частота PWM может достигать на платах Ардуино Уно и Нано — 62 500 Гц. Для этого в процедуре void setup() необходимо добавить соответствующую команду из таблицы, которая приведена далее.
Разрешение | Частота ШИМ | Команды установки режима |
8 бит | 62 500 Гц | TCCR1A = TCCR1A 0xe0 | 1; TCCR1B = TCCR1B 0xe0 | 0x09; |
7 812,5 Гц | TCCR1A = TCCR1A 0xe0 | 1; TCCR1B = TCCR1B 0xe0 | 0x0a; |
|
976,56 Гц | TCCR1A = TCCR1A 0xe0 | 1; TCCR1B = TCCR1B 0xe0 | 0x0b; |
|
244,14 Гц | TCCR1A = TCCR1A 0xe0 | 1; TCCR1B = TCCR1B 0xe0 | 0x0c; |
|
61,04 Гц | TCCR1A = TCCR1A 0xe0 | 1; TCCR1B = TCCR1B 0xe0 | 0x0d; |
Максимальная частота ШИМ Ардуино (Arduino PWM Frequency) — 62 500 Гц.
Источник: