Что такое широтно-импульсная модуляция (ШИМ), и как она используется в 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() и светодиодом. Это даст наглядное понимание, как цифровые сигналы могут превращаться в «аналоговое» управление.

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Уроки Arduino типы данных для начинающих

Уроки Arduino типы данных для начинающих

Привет друзья от geekmatic.in.ua! Пора заняться полезным делом и разобрать типы данных, представле..

HX711 модуль весового контроллера для Arduino

HX711 модуль весового контроллера для Arduino

HX711 — это специализированный модуль для подключения тензометрических датчиков (датчиков веса) к ми..

38.08грн.

Винт М2х20мм оцинкованный

Винт М2х20мм оцинкованный

Винт оцинкованный с резьбой М2 для крепления элементов любительских проектовДлина резьбы 20 мм..

3.68грн.

Стабилитроны 0,5Вт набор 3,3 ... 12В 100шт.

Стабилитроны 0,5Вт набор 3,3 ... 12В 100шт.

Набор стабилитронов 10 номиналов по 10шт.Номинальная мощность 0,5ВтРабочая температура -65°C ....

137.48грн.

Arduino SIM800 управление реле по исходящему звонку

Arduino SIM800 управление реле по исходящему звонку

Предлагаю вашему вниманию пример простого применения возможностей SIM800 при исходящем звонке. В рез..