Pulse-width modulation (PWM), или pulse-duration modulation (PDM) или Широтно-импульсная модуляция(ШИМ)

Широтноимпульсная модуляция может быть реализованы на Arduino несколькими способами. Эта статья объясняет простые методы работы с ШИМ, а также как использовать ШИМ регистры напрямую непосредственно для большего контроля скважность и частоты. Эта статья сфокусирована на моделях Arduino Diecimila и Duemilanove, которые используют ATmega168 или ATmega328.

Если вы не знакомы с широтно-импульсной модуляцией, читайте эту статью. Короче говоря PWM сигнал является цифровой волной прямоугольной формы , где частота постоянна, но в части времени когда сигнал включен (рабочий цикл) его уровень может изменяться от 0 до100%.

 

100% рабочий цикл будет таким же, как установка напряжения 5 вольт (высокий). 0% рабочий цикл будет таким же, как заземление сигнала.

ШИМ можно использовать к примеру для следующего:

Можно управлять яркостью светодиода Предоставление аналогового выходного сигнала; только если фильтруется цифровой выход, это обеспечит аналоговое напряжение между 0% и 100%. Создание звуковых сигналов. Управление скоростью моторов. Генерации модулированного сигнала, например управление инфракрасным светодиодом для пульта дистанционного управления.

Простая широтно-импульсная модуляция с analogWrite

Язык программирования Arduino делает PWM простой в использовании; просто выполните analogWrite (контакт, рабочий цикл), где рабочий цикл может иметь значение от 0 до 255, а контакт является одним из выводов ШИМ (3, 5, 6, 9, 10 или 11).Функция analogWrite предоставляет простой интерфейс для аппаратного ШИМ, но не обеспечивает никакого контроля над частотой. (Отметьте, что, несмотря на имя функции analogWrite, производится вывод цифрового сигнала представляющего волны квадратной формы.)

Наверное, 99% читателей могут останавливаться на достигнутом, и просто использовать analogWrite, но есть и другие варианты, которые обеспечивают большую гибкость.

Использование ATmega PWM регистр напрямую

Чип ATmega168P / 328P имеет три ШИМ таймера, управляющие 6 выходами ШИМ. Манипулируя таймером чипа напрямую, вы можете получить больше контроля, чем обеспечивает функция analogWrite. Техническое описание AVR ATmega328P дает подробное описание ШИМ таймера, но техническое описание может быть трудно понятым, из-за различных контрольных и выходных режимов таймеров. Несколько слово о взаимосвязи между языком Arduino и спецификациях могут быть здесь уместными.