Обычно, на выходах микроконтроллера формируется цифровой сигнал: высокий уровень (близкий к напряжению питания контроллера) или низкий уровень (близкий к нулю). Но на практике очень часто не достаточно двух состояний, например, часто возникает задача регулировать яркость светодиода или скорость вращения мотора. Снизить яркость свечения светодиода и скорость вращения мотора можно уменьшив прикладываемое к ним напряжение. Но как это сделать, если у нас на выводе возможно только два состояния?

Для этих целей часто используется Широтно-импульсная модуляция (ШИМ) или на английском Pulse Width Modulation (PWM).

Рассмотрим как это работает. Для этого возьмем лампу накаливания и будем подключать её к батарейке.



      В случае если мы просто будем подавать напряжение на лампу накаливания - она будет светиться, если мы будем подавать на лампу напряжение близкое к нулю или отключим батарейку - лампа погаснет. А если мы будем периодически включать и выключать лампу - она будет мигать. Если мы будем делать это очень быстро, например 50 раз в секунду, то мы уже не увидим мигания, мы увидим светящуюся в полсилы лампу. Все дело в том, что человеческий глаз уже не воспринимает частоты более 50 Гц. А в полсилы она будет светиться потому, что она будет получать ровно в два раза меньше энергии. Точно также будет вести себя лампа, если подать на нее напряжение в два раза меньше чем напряжение батарейки.

Скважность

Скважность - это отношение полного периода к времени включения (англ. duty cycle). В случае, если мы включаем и отключаем лампу на одно и тоже время, то скважность составит 50%. Но можно ли регулировать яркость лампы, чтобы она светилась не в полсилы, а скажем на 10% или на 90% ? Оказывается можно, нужно просто уменьшить или увеличить время включения по отношению к периоду, или уменьшить или увеличить скважность.



Функция analogWrite()

На Arduino можно по разному формировать ШИМ сигнал, можно по принципу программы Blink, но есть способ проще. Функция analogWrite() выдает аналоговую величину (ШИМ волну) на указанный вывод:
analogWrite(pin, value)
pin - вывод, на который подаем ШИМ сигнал. value: период рабочего цикла значение между 0 (полностью выключено) и 255 (сигнал подан постоянно). Значение 128 соответствует 50% скважности.

Не все выводы Arduino поддерживает широтно-импульсную модуляцию. Обычно на плате, ШИМ поддерживают пины, помеченные символом тильда ~. Для Arduino Uno это пины 3, 5, 6, 9, 10, 11.

Преобразование типов данных

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

Далее...


Copyright © R9AL 2020 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования