Широтно-импульсная модуляция (ШИМ) на платах Ардуино Уно и Нано работает на цифровых портах 3, 5, 6, 9, 10 и 11 с частотой 488,28 Герц. При использовании функции analogWrite частота ШИМ (PWM) изменяется от 0 до 255 и соответствует коэффициенту заполнения импульса от 0 до 100%. Иногда частота ШИМ Arduino оказывается слишком низкой и ее необходимо увеличить, рассмотрим что такое ШИМ и как ее увеличить.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- светодиод и резистор
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Широтно-импульсная модуляция (на английском PWM – Pulse-Width Modulation) — это управление подачи питания на цифровом выходе микроконтроллера путем изменения ширины импульса при постоянной частоте и амплитуде исходящего сигнала. Следующий график иллюстрирует изменение ширины импульса при модуляции аналогового сигнала. Уровень PWM (ШИМ) сигнала определяется коэффициентом заполнения импульса.
Что такое широтно-импульсная модуляция Ардуино

ШИМ представляет собой изменение скважности импульсов, т.е. процент времени, когда прямоугольный импульс имеет уровень HIGH (смотри изменение скважности на графике выше). Например, скважность pwm сигнала в диапазоне 50% означает, что половину периода сигнал имеет высокий уровень, а половину периода низкий уровень. Скважность шим — это отношение периода повторения импульсов к его длительности.
Можно выделить два применения широтно-импульсной модуляции:
1. PWM используется в источниках питания, регуляторах мощности и т.д. Использование PWM (Pulse-Width Modulation) на Arduino Nano, Uno значительно упрощает управление яркостью разных источников света (светодиодов или светодиодных лент) и скоростью вращения коллекторных двигателей, подключенных к плате Ардуино.
2. PWM (Pulse-Width Modulation) используется для получения аналогового сигнала разной частоты. Аналогово — цифровой преобразователь (АЦП) на микроконтроллере Arduino довольно прост в реализации, поскольку требует для сборки электрической схемы минимум элементов — достаточно RC-цепочки, состоящей из резистора и конденсатора.
Реализация PWM Arduino (Pulse-Width Modulation)

На следующем примере продемонстрируем использование ШИМ модуляции для управления яркостью светодиода с помощью функции analogWrite. Как показано на первом графике, мы будем задавать скважность сигнала на цифровом выходе 10 с разной интенсивностью — 0%, 25%, 50%, 75% и 100%. Визуально это будет отображаться в яркости светодиода, подключенного к порту 10 микроконтроллера с поддержкой PWM.
Скетч для реализация сигнала PWM Arduino
void setup() {
pinMode(10, OUTPUT);
}
void loop() {
analogWrite(10, 0); // скважность 0%
delay(500);
analogWrite(10, 64); // скважность 25%
delay(500);
analogWrite(10, 127); // скважность 50%
delay(500);
analogWrite(10, 191); // скважность 75%
delay(500);
analogWrite(10, 255); // скважность 100%
delay(500);
}
Управление ШИМ сигналом на Arduino Uno, Nano

В следующем примере программы используем плавное изменение частоты ШИМ сигнала, как на графике. Для примера потребуется светодиод, подключенный к 10 пину. Можно использовать любой пин на микроконтроллере семейства Ардуино, поддерживающий pwm модуляцию (они обозначены знаком тильда). Частота импульсов будет меняться с помощью цикла for, при этом светодиод будет плавно включаться и плавно погасать.
Скетч для управления ШИМ сигналом на Arduino
void setup() {
pinMode(10, OUTPUT);
}
void loop() {
for(int i=0; i<=255; i++) {
analogWrite(10, i);
delay(10);
}
for(int i=255; i>=0; i--) {
analogWrite(10, i);
delay(10);
}
}
Заключение. Платы Arduino Uno и Nano имеют 6 аппаратных ШИМ-модуляторов на аналоговых портах с номерами 3, 5, 6, 9, 10, 11. ШИМ-сигнал управляется функцией analogWrite, которая генерирует аналоговый сигнал на выходе и устанавливает коэффициент заполнения импульсов с частотой 488,28 Гц и разрешением 8 байт (от 0 до 255). На плате Arduino Mega порты с PWM модуляцией размещены на других выходах.

Доброго времени суток! Управлять с помощью шим активной нагрузкой можно. У меня вопрос: а как будет себя вести данный регулятор с емкостной нагрузкой? Идея заключается в создании ЗУ для автомобильного акб с плавной регулировкой зарядного тока. Конечно в данном случае ардуино будет уже управлять силовым ключом. И если это возможно в дальнейщем автоматизировать процесс зарядки акб. В начале заряда акб ЗУ будет работать как стабилизатор тока заряда и по мере набора емкости акб оно переходит в стабилизатор напряжения. У меня есть простой зарядник с амперметром и вольтметром и крутилкой. Вот на нем я и заметил что вначале регулируешь ток, а потом по мере набора емкости начинает расти напряжение и уже приходится корректировать напряжение выдаваемое ЗУ. А то при напряжении на акб 14,8в и выше начинается уже кипение электролита и нагрев самого акб. Я так понимаю помимо выдачи сигнала шим ардуинке надо будет как то отслеживать ток и напряжение и это надо прописать в программе, в написании которой я полный ноль. А так думаю идея то хорошая. Подключил к такому ЗУ акб и все ок без постоянного контроля. Схема конечно будет иметь еще много чего и поэтому несколько усложнится, но это не беда. Спаять можно. С паяльником люблю посидеть. Думаю такой зарядник многим бы понравился.