← Подключение оборудования | Содержание | Далее: Руководство и примеры для Arduino →
Универсальная библиотека для ESP32
Обзор библиотеки
Библиотека AC Dimmer — эффективное решение для управления яркостью устройств на переменном токе (AC) с помощью микроконтроллеров семейства ESP32. Библиотека использует аппаратные возможности ESP32: обработку прерываний GPIO и высокоточные таймеры — для точного управления моментом открытия TRIAC в каждом полупериоде переменного тока.
Возможности и преимущества
- Совместимость с фреймворками Arduino, ESP-IDF и ESPHome
- Поддержка многофазных систем
- Несколько независимых каналов диммирования
- Минимальное потребление ресурсов процессора благодаря аппаратным прерываниям и таймерам ESP
- Высокоточное управление яркостью AC-устройств
- Различные кривые регулировки яркости (линейная, RMS, логарифмическая)
- Автоматическое определение частоты сети (50/60 Гц и другие)
- Плавные переходы между уровнями яркости
- Поддержка колбэк-функций для синхронизации с другими событиями
Требования
Микроконтроллеры семейства ESP32
Совместимость с Arduino ESP32 Core (версия 2.0.0 и выше):
- ESP32
- ESP32-C3
- ESP32-C6
- ESP32-H2
- ESP32-P4
- ESP32-S2
- ESP32-S3
Совместимость с ESP-IDF (версия 5.0 и выше):
- ESP32
- ESP32-S2
- ESP32-C3
- ESP32-S3
- ESP32-C2
- ESP32-C6
- ESP32-H2
- ESP32-P4
Совместимость с ESPHome:
- ESP32
- ESP32-S2
- ESP32-S3
- ESP32-C3
- ESP32-H2
Фреймворки: руководства и примеры
Доступная документация
- Руководство и примеры для Arduino
- Руководство и примеры для ESP-IDF
- Руководство и примеры для ESPHome
Функциональные характеристики
Выбор кривой яркости
Библиотека поддерживает три типа кривых для регулировки яркости:
Линейная (AC_DIMMER_CURVE_LINEAR)
- Равномерное изменение угла задержки
- Подходит для простых приложений
- Воспринимаемая яркость не линейна
RMS (AC_DIMMER_CURVE_RMS)
- Компенсирует RMS-характеристику синусоидального сигнала
- Обеспечивает линейное изменение мощности
- Идеально для ламп накаливания и резистивных нагрузок
Логарифмическая (AC_DIMMER_CURVE_LOGARITHMIC)
- Компенсирует логарифмическое восприятие яркости человеческим глазом
- Обеспечивает визуально линейное изменение яркости
- Рекомендуется для светодиодного освещения
Плавные переходы
Для создания плавных переходов между уровнями яркости используйте функцию ac_dimmer_set_brightness_transition():
Многоканальные системы
Библиотека поддерживает несколько независимых каналов диммирования. Максимальное количество каналов задаётся в настройках библиотеки в файле ac_dimmer.h. Каждый канал диммирования должен иметь отдельный выходной пин.
Использование колбэк-функций прерываний
Колбэк-функции позволяют синхронизировать код с событиями перехода через ноль. Это полезно для задач, требующих точной синхронизации с сетью AC.
Оптимизация и отладка
Оптимальное использование ресурсов
Ограничения esp-timer:
- Библиотека использует
esp_timer, позволяющий создавать несколько программных таймеров - Для каждого канала используются 2 таймера: один для задержки и один для ширины импульса
Оптимизация прерываний:
- Обработчики прерываний максимально упрощены для снижения нагрузки
- Атрибут
IRAM_ATTRиспользуется для размещения кода обработчика в IRAM - Сложные вычисления выполняются за пределами обработчиков прерываний
Производительность:
- Предварительно рассчитанные таблицы кривых яркости сокращают время вычислений
- Кэширование параметров уменьшает число повторных вычислений
Логирование:
В библиотеке реализована расширенная система логирования. Для отладки проекта включите вывод операций библиотечных функций в последовательный порт.
Решение типовых проблем
Лампа мигает или яркость нестабильна
Может проявляться при уровнях диммирования 0–8.
Причины и решения:
- Неправильное подключение нулевого провода AC и фазы: проверьте подключение источника питания AC. Нулевой — к N, фаза — к AC-L IN
- Проблемы с детектором перехода через ноль: проверьте форму сигнала и порог срабатывания
- Архитектура микроконтроллера ESP32 и Arduino core: неоптимальная совместимость и приоритеты модулей ISR и таймера на уровне Arduino Core
- Высокая загрузка процессора: сократите количество вычислений в основном цикле
- Конфликты прерываний: убедитесь, что другие библиотеки не конфликтуют с прерываниями
Некорректная яркость для определённых типов нагрузок
Причина: при 50% яркости лампа выглядит слишком ярко или слишком темно
Решение: измените тип кривой яркости для вашей нагрузки
Детектор перехода через ноль не работает
Диммер не реагирует на регулировку:
- Проверьте подключение пина перехода через ноль
- Убедитесь, что сигнал поступает на ESP32
- Проверьте функцию
ac_dimmer_get_frequency()— если она возвращает 0, частота сети не определена
Техническая информация
Принципы работы AC-диммера
Управление мощностью в цепях AC основано на принципе фазового регулирования с помощью TRIAC (тиристора).
Особенности esp-timer в ESP32
Библиотека использует esp_timer для точного управления задержками:
Преимущества esp-timer:
- разрешение в микросекундах
- программная реализация позволяет создавать большое количество таймеров
- низкие накладные расходы
Архитектура esp-timer:
- один аппаратный таймер для всех программных таймеров
- очередь таймеров, упорядоченная по времени срабатывания
- колбэк-функции вызываются в контексте задачи таймера
Ограничения:
- небольшой джиттер (±10–50 мкс) при высокой загрузке системы
- колбэк-функция не должна блокировать выполнение надолго
Обработка прерываний
Прерывания перехода через ноль:
- генерируются в момент перехода через ноль
- используется тип прерывания
GPIO_INTR_POSEDGE(только передний фронт) - обработчик запускает таймеры для всех активных каналов данной фазы
Таймеры:
- первый таймер запускается с временем задержки и активирует выход
- второй таймер запускается для определения длительности импульса
Методы повышения стабильности:
- обработчики прерываний максимально упрощены и размещены в IRAM
- критические секции защищают общие данные
- минимум вычислений в обработчиках прерываний
← Подключение оборудования | Содержание | Далее: Руководство и примеры для Arduino →