Перейти к содержимому

How to Fix ESP32 AC Dimmer Flickering. Guide

ESP32 TRIAC dimmer flickers? Learn why it happens and 2 proven solutions: software (rbdimmerESP32.h) vs hardware (DimmerLink module).
10 февраля 2026 г. от
How to Fix ESP32 AC Dimmer Flickering. Guide
Administrator
| Комментариев пока нет

Если вы собираете AC-диммер на TRIAC, вы наверняка сталкивались с мерцанием, нестабильной яркостью или случайными скачками интенсивности света.

Большинство DIY-разработчиков считают, что проблема вызвана:

  • некачественным оборудованием диммера
  • неисправным TRIAC или оптопарой
  • ошибками разводки PCB

Но в большинстве реальных проектов проблема не в оборудовании диммера.

Настоящая причина — точность тайминга в прошивке, особенно на ESP8266 и ESP32.

В этом руководстве рассмотрено:

  • почему TRIAC-диммеры мерцают
  • почему на ESP32 это проявляется сильнее
  • как устранить мерцание программным путём
  • почему аппаратное управление — самое надёжное решение


Как работает AC TRIAC-диммер

TRIAC-диммер не снижает напряжение плавно.

Он управляет тем, когда TRIAC включается в течение каждого полупериода AC.

Процесс:

  1. Форма волны AC проходит через ноль (событие перехода через ноль)

2. Микроконтроллер выжидает точную задержку (фазовый угол)

3. Микроконтроллер отправляет короткий импульс на затвор TRIAC

4. TRIAC проводит ток до следующего перехода через ноль

Яркость полностью зависит от точности тайминга на уровне микросекунд.

For a deep technical explanation, read:  https://www.rbdimmer.com/blog/diy-insights-1/ac-dimmer-based-on-zero-cross-detector-and-triac-operating-principles-and-applications-5


Почему тайминг критичен (в цифрах)

AC-диммирование — это управление в реальном времени. Вот конкретные цифры:

  • Частота AC: 50 Гц (60 Гц) → переход через ноль каждые 10 мс
  • Необходимая точность срабатывания TRIAC: ±50 мкс для стабильной яркости
  • Блокировка прерываний Wi-Fi на ESP32: 200–500 мкс
  • Результат: видимое мерцание даже при умеренной загрузке процессора

💡 Это означает, что Wi-Fi может нарушить тайминг TRIAC в 10 раз больше допустимой погрешности.


Почему мерцание возникает в проектах на ESP8266 / ESP32

Чипы ESP мощные, но по умолчанию не обеспечивают работу в реальном времени.

На них работают:

  • Стеки Wi-Fi / BLE
  • Доступ к Flash-памяти (часто блокирующий)
  • Планировщик RTOS (ESP32)
  • Фоновые системные задачи

Если код тайминга диммера конкурирует с этими задачами:

  • прерывания перехода через ноль задерживаются
  • импульсы затвора TRIAC смещаются
  • яркость становится нестабильной

Ситуация ухудшается, когда:

  • активны MQTT / OTA / веб-интерфейс
  • включено логирование
  • используется несколько каналов диммирования

Типичные ошибки начинающих

Популярные примеры для Arduino / ESPHome / Tasmota часто:

  • используют delay() после перехода через ноль
  • выполняют логику тайминга в недетерминированных колбэках
  • вызывают блокирующие функции внутри ISR
  • обращаются к Flash-памяти в критичном по времени коде

Они работают в демонстрациях, но не работают в реальных продуктах.


Solution 1 — Software-Based: rbdimmerESP32.h

Для двухъядерных чипов ESP32 мерцание можно устранить программно, если сделать это правильно.

What rbdimmerESP32.h Does

rbdimmerESP32.h разработана для детерминированного управления TRIAC:

  • аппаратные таймеры (не программные задержки)
  • код ISR размещён в IRAM (без задержек Flash)
  • разделение ядер: реальное время vs Wi-Fi
  • архитектура, безопасная для FreeRTOS

Repo: 👉 https://github.com/robotdyn-dimmer/rbdimmerESP32


Ключевые технические детали — IRAM (Instruction RAM)

ESP32 обычно выполняет код из Flash.

Обращение к Flash может блокировать процессор на сотни микросекунд.

Решение:

Разместите критичный по времени код в IRAM с помощью:

IRAM_ATTR void zeroCrossISR() {
  // ultra-fast ISR code
}

Аппаратные таймеры

Никогда не используйте delay() или millis() для тайминга TRIAC.

Используйте аппаратные таймеры ESP32 для микросекундной точности.


Стратегия двух ядер

  • Ядро 0: тайминг диммера (реальное время)
  • Ядро 1: Wi-Fi, MQTT, интерфейс, логирование

Такое разделение предотвращает мерцание.


Когда программное решение оправдано

✅ Только ESP32

✅ Вы разбираетесь в прерываниях и RTOS

✅ Вам нужен полный контроль над прошивкой

⚠️ Требует тщательной архитектуры


ДЕЛАЙТЕ ✅

  • Используйте аппаратные таймеры ESP32 для управления TRIAC
  • Код ISR должен выполняться менее 10 мкс
  • Запускайте диммирование на ядре 0, Wi-Fi — на ядре 1
  • Размещайте критичный по времени код в IRAM


НЕ ДЕЛАЙТЕ ❌

  • Никогда не вызывайте Serial.print() из ISR
  • Не обращайтесь к Flash в критичном по времени коде
  • Избегайте delay() вблизи логики перехода через ноль
  • Не смешивайте задачи диммирования и сетевого взаимодействия

Solution 2 — Hardware-Based: Любой ESP32 (Recommended)

Самый надёжный способ устранить мерцание — вынести тайминг TRIAC из основного микроконтроллера.

What Is Любой ESP32

DimmerLink — это специализированный модуль контроллера диммера:

  • детектирует переход через ноль
  • формирует импульсы TRIAC внутренне
  • гарантирует стабильный тайминг
  • обменивается данными по UART / I²C

Docs: 👉 https://github.com/robotdyn-dimmer/DimmerLink


Почему DimmerLink устраняет мерцание

  • Wi-Fi не может задержать срабатывание TRIAC
  • Ошибки тайминга микроконтроллера не влияют на диммирование
  • Задержки Flash не имеют значения
  • Масштабирование на несколько каналов — элементарно

Ваш микроконтроллер просто отправляет команды по Serial (UART):

Example: 02 53 00 32  → Set dimmer 0 to 50%
Response: 00          → OK
УРОВЕНЬЯркость
0x00 (0)0% — выключено
0x32 (50)50%
0x64 (100)100% — полная яркость

Сравнение программного и аппаратного решений

КритерийrbdimmerESP32.hDimmerLink
Стоимость (BOM)$0$1.5
ЭнергопотреблениеКак у микроконтроллера+10 мА
Место на PCB0 (программное)~1×2 см
Сертификация (CE/UL)Только для DIYТолько для DIY
Поддержка ESP8266✔️
Поддержка ESP32✔️✔️

Raspberry Pi/Orange Pi..

✔️

Несколько диммеров⚠️ сложно✔️ легко
Подходит для начинающих✔️
Готовность к производству⚠️✔️

Дерево решений: какое решение подходит вам?


Вы используете ESP8266?

  • Используйте DimmerLink

Вы используете ESP32 и хотите полный контроль?

  • Используйте rbdimmerESP32

Вам нужно несколько диммеров и безупречная стабильность?

  • Используйте DimmerLink

Вы создаёте коммерческий продукт?

  • Используйте DimmerLink

Вы экспериментируете и изучаете программирование в реальном времени?

  • Используйте rbdimmerESP32
 


Заключение

TRIAC-диммирование — это не про напряжение, а про микросекундный тайминг.

Wi-Fi не работает в реальном времени.

Задержки опасны.

Flash непредсказуема.

If you want stable light and zero flicker, isolate timing or move it to dedicated hardware - Любой ESP32.




Поделиться этой записью
Войти оставить комментарий