Обычно, на выходах микроконтроллера формируется цифровой сигнал: высокий
уровень (близкий к напряжению питания контроллера) или низкий уровень (близкий
к нулю). Но на практике очень часто не достаточно двух состояний, например,
часто возникает задача регулировать яркость светодиода или скорость вращения
мотора. Снизить яркость свечения светодиода и скорость вращения мотора можно
уменьшив прикладываемое к ним напряжение. Но как это сделать, если у нас
на выводе возможно только два состояния?
Для этих целей часто используется Широтно-импульсная модуляция (ШИМ) или на
английском Pulse Width Modulation (PWM).
Рассмотрим как это работает. Для этого возьмем лампу накаливания и будем
подключать её к батарейке.
В случае если мы просто будем подавать напряжение на лампу накаливания - она будет светиться, если мы будем подавать на лампу напряжение близкое к нулю или отключим батарейку - лампа погаснет. А если мы будем периодически включать и выключать лампу - она будет мигать. Если мы будем делать это очень быстро, например 50 раз в секунду, то мы уже не увидим мигания, мы увидим светящуюся в полсилы лампу. Все дело в том, что человеческий глаз уже не воспринимает частоты более 50 Гц. А в полсилы она будет светиться потому, что она будет получать ровно в два раза меньше энергии. Точно также будет вести себя лампа, если подать на нее напряжение в два раза меньше чем напряжение батарейки.
analogWrite(pin, value)pin - вывод, на который подаем ШИМ сигнал. value: период рабочего цикла значение между 0 (полностью выключено) и 255 (сигнал подан постоянно). Значение 128 соответствует 50% скважности.