Что такое широтно-импульсная модуляция (ШИМ), и как она используется в Arduino?
Широтно-импульсная модуляция (ШИМ, англ. PWM — Pulse Width Modulation) — это один из базовых методов управления аналоговыми устройствами при помощи цифровых сигналов. Несмотря на то, что микроконтроллеры Arduino работают исключительно с цифровыми состояниями 0 В (LOW) и 5 В (HIGH), с помощью ШИМ можно эмулировать промежуточные значения напряжения, создавая эффект «псевдоаналогового» выхода. Этот механизм широко используется в управлении яркостью светодиодов, скоростью вращения двигателей постоянного тока, сервоприводами, аудиогенераторами и даже LCD-дисплеями.
Принцип работы ШИМ
Основная идея ШИМ проста: цифровой контакт переключается между состояниями «ВКЛ» и «ВЫКЛ» с очень высокой частотой. В течение каждого цикла часть времени сигнал находится в состоянии HIGH, а часть времени — в LOW. Соотношение этих времён и называется рабочим циклом (Duty Cycle).
Рабочий цикл (Duty Cycle)
Duty Cycle измеряется в процентах и показывает, какую часть периода сигнал находится в состоянии «ВКЛ». Например:
- 0% — сигнал всегда выключен, среднее напряжение = 0 В;
- 50% — половина времени HIGH, половина LOW, среднее напряжение ≈ 2,5 В;
- 100% — сигнал постоянно HIGH, напряжение = 5 В.
Частота ШИМ
Второй важный параметр — частота. Это количество циклов в секунду, с
которой происходит переключение HIGH/LOW. На плате Arduino Uno стандартные
контакты ШИМ работают с частотой около 490 Гц, а пины
5 и 6 используют повышенную частоту
980 Гц. Чем выше частота, тем более «плавным» будет
восприниматься управление устройством.
Какие пины Arduino поддерживают ШИМ?
На большинстве плат Arduino контакты с поддержкой ШИМ отмечены символом
«тильда» (~). Например, на Arduino Uno это пины:
3, 5, 6, 9, 10, 11.
Для генерации сигнала используется встроенная функция
analogWrite(pin, value), где:
pin— номер пина с поддержкой ШИМ,value— значение от0до255.
Значение 0 соответствует Duty Cycle = 0%, а 255 —
100%.
Примеры использования ШИМ в Arduino
1. Управление яркостью светодиода
Самый популярный пример: плавное изменение яркости светодиода. Код выглядит так:
int ledPin = 9;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int value = 0; value <= 255; value++) {
analogWrite(ledPin, value); // Увеличение яркости
delay(10);
}
for (int value = 255; value >= 0; value--) {
analogWrite(ledPin, value); // Уменьшение яркости
delay(10);
}
}
За счёт изменения Duty Cycle создаётся эффект плавного «дыхания» светодиода.
2. Управление скоростью двигателя постоянного тока
При подаче ШИМ-сигнала на драйвер двигателя регулируется среднее напряжение питания, что позволяет контролировать скорость вращения. Пример:
int motorPin = 6;
void setup() {
pinMode(motorPin, OUTPUT);
}
void loop() {
analogWrite(motorPin, 128); // Примерно 50% мощности
delay(2000);
analogWrite(motorPin, 255); // Полная мощность
delay(2000);
}
3. Управление сервоприводами
Сервомоторы используют модифицированный ШИМ-сигнал, где ширина импульса
определяет угол поворота. Для работы удобнее подключить библиотеку
Servo.h:
#include <Servo.h>
Servo myServo;
void setup() {
myServo.attach(9);
}
void loop() {
myServo.write(0); // Угол 0°
delay(1000);
myServo.write(90); // Угол 90°
delay(1000);
myServo.write(180); // Угол 180°
delay(1000);
}
4. Генерация звука
Arduino может использовать ШИМ для генерации звуковых сигналов. Для этого
применяется функция tone(), но можно и вручную управлять ШИМ
для создания простых мелодий.
5. Регулировка контрастности ЖК-дисплеев
Некоторые LCD-дисплеи позволяют изменять контраст с помощью ШИМ. Подключив выход ШИМ к управляющему входу дисплея, можно регулировать изображение без механического подстроечника.
Преимущества использования ШИМ
- Энергоэффективность — меньшее выделение тепла по сравнению с аналоговым регулированием;
- Простая реализация в Arduino при помощи
analogWrite(); - Высокая точность управления;
- Возможность управления множеством типов устройств.
Недостатки и ограничения
- Ограниченная частота ШИМ на стандартных платах Arduino;
- Не все пины поддерживают ШИМ;
- При слишком низкой частоте заметно мерцание светодиодов или шум двигателей;
- Для мощных нагрузок необходимы драйверы и транзисторы.
Изменение частоты ШИМ
По умолчанию Arduino Uno работает на частотах 490 и 980 Гц. Однако при необходимости можно изменить частоту, работая напрямую с регистрами таймеров. Это используется, например, для управления звуком или более чувствительными устройствами. Для новичков чаще всего достаточно стандартных значений.
Заключение
Широтно-импульсная модуляция — это один из ключевых инструментов в арсенале разработчика Arduino. С её помощью можно управлять светодиодами, моторами, сервоприводами, дисплеями и даже создавать звук. Понимание принципов работы ШИМ открывает широкие возможности в электронике и позволяет создавать проекты, которые раньше казались сложными.
Если вы только начинаете работать с Arduino — начните с экспериментов с
analogWrite() и светодиодом. Это даст наглядное понимание, как
цифровые сигналы могут превращаться в «аналоговое» управление.





