ШИМ (PWM) в Arduino: полное руководство по программированию и функциям
ШИМ (PWM) в Arduino: программирование и ключевые функции
Что такое ШИМ (PWM)?
PWM (Pulse Width Modulation) — широтно-импульсная модуляция. Метод преобразования постоянного напряжения в последовательность импульсов переменной ширины. Отношение длительности импульса («вкл.») к общему периоду T называется коэффициентом заполнения (Duty Cycle). Также известен как PDM (Pulse Duration Modulation). Для мощного ШИМ требуются ключевые транзисторы/MOSFETы, для высоких нагрузок — сложные драйверы.
Зачем нужен ШИМ?
Главное применение — управление мощностью изменением коэффициента заполнения. Можно ли ограничить ток резистором? Да, но мощность рассеивается в виде тепла — крайне низкий КПД. При больших мощностях резисторы станут громоздкими и дорогими. ШИМ же обеспечивает высокий КПД (ключевой режим транзистора). Вторичное применение — передача информации, зашитой в коэффициент заполнения (например, управление сервоприводами).
Применение ШИМ:
- Управление сервоприводами (угол поворота зависит от скважности)
- RGB-светодиоды — смешение цветов изменением яркости каналов
- DC-DC преобразователи — эффективное ограничение мощности
- Регулировка скорости двигателей постоянного тока
- Генерация синусоидальных сигналов (управление амплитудой)
Влияние частоты ШИМ
ШИМ — это импульсы. Если частота слишком низка, двигатель будет дергаться: между импульсами он замедляется, плавности нет. Частота должна подбираться с учетом механической постоянной времени управляемого устройства (инерции ротора, индуктивности обмотки). Для двигателей обычно 20–50 кГц, для светодиодов — выше 1 кГц (чтобы не было мерцания).
ШИМ в Arduino: аппаратная поддержка
На Arduino UNO аппаратный ШИМ доступен на 6 пинах: 3, 5, 6, 9, 10, 11 (помечены тильдой ~). Никаких сложных функций писать не нужно — используйте analogWrite(pin, value).
Важно: digitalWrite выдает только HIGH/LOW (0 или 5В). analogWrite генерирует ШИМ, эмулируя аналоговый сигнал. Значение value — 0–255 (8 бит), где 0 = 0% (всегда 0В), 255 = 100% (всегда 5В), 127 ≈ 50%.
Пример: плавное изменение яркости светодиода
int ledPin = 3; // ШИМ-пин
int brightness = 0; // начальная яркость
int fadeAmount = 5; // шаг изменения
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
analogWrite(ledPin, brightness);
brightness += fadeAmount;
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount; // меняем направление
}
delay(30); // скорость изменения
}
Ключевые моменты:
- Используйте только пины с поддержкой ШИМ (~)
- Функция
analogWrite(), а неdigitalWrite() - Значение 0–255 соответствует коэффициенту заполнения 0–100%
- Для управления мощными нагрузками (двигатели, ленты) нужен драйвер (MOSFET, Darlington, драйвер мотора)
Связанные материалы:
- Программирование PIC18 — пошаговое руководство
- MAX232: конструкция, работа, типы, применение
- 10+ онлайн-инструментов для проектирования схем
- 15 обязательных Android-приложений для инженеров
- Схема хлопушного выключателя на таймере 555
- Определение номинала сгоревшего резистора (3 метода)
Промышленные технологии
- Arduino-датчики: типы, применения и реальные проекты
- Четыре проверенных паттерна пользовательских функций в C
- Manufacturing Day: эволюция, влияние и витрина индустрии
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- Управление Arduino Uno из Python 3: команды через последовательный порт и демонстрация с LED
- Сборка компактного FM-радио на Arduino Nano и RDA5807M
- Сборка ноутбука на Raspberry Pi 3 и Arduino: пошаговое руководство
- EAM против CMMS: ключевые различия и основные функции
- Умное производство: Определение, преимущества и внедрение
- IoT в производстве: ключевые концепции, применение и реальные примеры