Записи с меткой ‘Широтно Импульсная Модуляция’

Реализация ШИМ на базе ARDUINO

В предыдущих статьях было рассмотрено устройство портов ввода/вывода Arduino и описаны основные функции для работы с цифровыми и аналоговыми входами/выходами. Сейчас поговорим о широтно импульсной модуляции (ШИМ) и ее реализации.

Широтно Импульсная Модуляция — это своего рода способ задания аналогового сигнала, только с помощью цифрового кода (чем-то похоже на ЦАП) при этом изменяется скважность импульсов, а частота остается постоянной.

Чтобы немного упростить понимание происходящего, приведу небольшой пример:

pwm_ru

 

Давайте представим, что у нас есть небольшой двигатель, который стоит в сверлильном станочке. Его можно либо включить (подать высокий потенциал 5 вольт) либо выключить (при этом потенциал будет равен 0 вольт), в и тоге есть два состояния. Включим его на пару минут (он будет работать в номинальном режиме), после отключения питания он конечно же остановится.

Но если же включать двигатель каждые 10-20 секунд, тогда он будет работать медленней чем при постоянно подключенном напряжении. Так вот регулируя частоту включения/выключения — будем регулировать обороты двигателя. Таким образом изменяя скважность (отношение длительности периода к длительности импульса) — можно менять напряжение на выходе. Если 50 % времени будет высокий уровень (подадим 5 вольт), а остальные 50% низкий уровень (напряжение 0 вольт), то на выходе получим — 2,5 вольт. В следствии чего двигатель будет вращаться медленнее.

 С теорией разобрались, переходим к практической реализации:

Для того чтобы работать с ШИМ нам понадобится ознакомиться с функцией analogWrite (). Именно она превратит наш цифровой код в соответствующий аналоговый сигнал который будет генерироваться с определенной частотой.

С параметрами функции analogWrite () ознакомились, но как задавать параметр value, не вручную же менять каждый раз значения. Для этого используем возможности функции analogRead(), она позволит нам читать аналоговый сигнал и превращать его в цифровой код.

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

Небольшой видео-тест работы: