Добавить в корзинуПозвонить
Найти в Дзене

Как работает ШИМ на Ардуино

Что такое Широтно-Импульсная Модуляция (ШИМ), как она работает на Ардуино и как с ее помощью управлять аналоговыми устройствами.

Что такое Широтно-Импульсная Модуляция (ШИМ), как она работает на Ардуино и как с ее помощью управлять аналоговыми устройствами.

ШИМ - это способ управления устройствами за счет изменения длительности импульса при постоянной частоте повторения. Немного сложно для начала но давайте разбираться.

Возьмет симметричный мультивибратор - генератор импульсов прямоугольной формы. Выход генератора находится во включенном (лог. 1) и в выключенном (лог 0) состоянии одинаковое время. То есть он генерирует "симметричные" импульсы.

Это достигается тем, что номиналы резисторов и конденсаторов в обоих плечах одинаковы. Но что будет если их сделать неодинаковыми? Мультивибратор станет "несимметричным" ! Во включенном состоянии он будет находиться больше (или меньше) чем в выключенном.

На этом принципе и основана Широтно-Импульсная Модуляция или ШИМ. ШИМ очень часто используется в импульсных стабилизаторах, преобразователях напряжения, компьютерных блоках питания и т.д. В свое время была даже пропорциональная система радиоуправления на ШИМ а не серводвигателях!
Как работает ШИМ
Как работает ШИМ

ШИМ удобна для управления электронными ключами. Все знают схему управления мощностью электропаяльника или нагревателя на симисторе, двух динисторах, переменном резисторе и конденсаторе. Это тоже ШИМ.

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

Самый простой выход - интегрирующая (сглаживающая) RC - цепочка. В этой цепочке конденсатор включен параллельно а резистор - последовательно с входом.

Интегрирующая RC цепь
Интегрирующая RC цепь

Если параметры этой цепочки выбрать такими, что за время одного импульса конденсатор не будет успевать полностью зарядиться и разрядиться, напряжение на нем будет колебаться не относительно ноля а некоторого постоянного уровня. И это постоянное напряжение будет напрямую зависеть от длительности импульса.

Давайте это проверим на примере ШИМ контроллера Ардуино. В Ардуино некоторые цифровые порты (в зависимости от модели) могут работать как ШИМ - выходы. Классический пример - управление яркостью светодиода.

Проект
Проект

Итак, давайте соберем проект на макетной плате. Ко входу А0 подключим движок переменного резистора. Им будем управлять скважностью импульсов. А на выходе GP3 будем наблюдать сигнал с помощью осциллографа и мультиметров включенных на измерение постоянного напряжения. Кстати, а что будет если на выходе измерять AC вольтметром? Напишите в комментариях.

Схема подключения
Схема подключения

Скетч проекта очень простой и думаю будет понятен без комментариев. Функцией analogRead(PIN) мы получаем положение движка потенциометра. А функцией analogWrite(PIN, Value) записываем его как значение ШИМ в порт. Кстати, а зачем значение делить на 4?

Скетч проекта
Скетч проекта

Итак, посмотрим что у нас будет без конденсатора. Все правильно! Ширина импульса плавно увеличивается при повороте движка и при напряжении около 2.5 В сигнал становится симметричным! Но почему при этом увеличиваются показания вольтметра на выходе? Подумайте!

Давайте теперь параллельно выходу подключим конденсатор емкостью 4.7 мкФ. Форма импульсов немного изменилась, они стали более плавными. Значит наш конденсатор работает!

Но его емкость явно мала для нашего случая. При вращении движка практически ничего не происходит. Напряжение колеблется окого нулевого положения. Но вольтметр показывает увеличение напряжения! Почему?

Давайте возьмем конденсатор емкостью 47 мкФ. Теперь сигнал стал пилообразным а не прямоугольным. А значит мы на верном пути! И теперь при вращении движка не только увеличивается размах импульсов, но и сигнал "отрывается" от нуля! Есть постоянная составляющая!

А что будет если взять конденсатор емкостью 470 мкФ? Подумайте! И, кстати, напишите что нужно еще изменить в схеме чтобы получить сигнал, действительно пригодный для управления аналоговыми устройствами.

Ну и посмотрите видео, как это работает на реальном проекте.

Поставьте ЛАЙК если моя статья была вам полезна!

Напишите ответы на мои вопросы в комментариях!

Подпишитесь на канал!

Это интересно:

Интегрирующая цепочка что такое и как работает.

Как управлять яркостью светодиода на Ардуино.