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

Задний фронт vs передний фронт: какой метод диммирования выбрать

Диммирование с фазовой отсечкой: почему TRIAC (передний фронт) вызывает мерцание LED на низкой яркости, и когда MOSFET (задний фронт) — правильный выбор.
26 февраля 2026 г. от
Задний фронт vs передний фронт: какой метод диммирования выбрать
Administrator
| Комментариев пока нет

Коротко: Передний фронт — это стандартный TRIAC-диммер, который подключает нагрузку во второй половине каждого полупериода AC (лучше всего для ламп накаливания и нагревателей). Задний фронт — это MOSFET-диммер, который подключает нагрузку с начала полупериода (лучше для LED-ламп, меньше мерцания). Большинство бюджетных модулей используют передний фронт.



Проблема

Ваш TRIAC-диммер отлично работает с лампой накаливания или нагревателем — но стоит подключить LED-лампу, и начинаются проблемы: мерцание, нестабильность, непредсказуемое поведение на низкой яркости.

Это классическое несовпадение метода управления и типа нагрузки. TRIAC-диммеры реализуют передний фронт — метод, оптимизированный для резистивных нагрузок, который создаёт проблемы с электронными LED-драйверами. Задний фронт (MOSFET) решает эти проблемы.

Типичные симптомы несовпадения с форумов:

  • «TRIAC-диммеры с передним фронтом плохо работают с диммируемыми LED-лампами» (Arduino Forum, 2024)
  • «Я использую TRIAC-платы для ламп накаливания — диммируют отлично. Но с LED-лампами работают некорректно» (Arduino Forum, 2024)
  • Мерцание LED ниже 30–50% яркости, которое не исправить кодом
  • Лампа нормально работает на 100%, но нестабильна при диммировании



Причина проблемы

Оба метода используют фазовое управление (управление углом включения): TRIAC или транзистор открывается в определённой точке полупериода AC и пропускает часть синусоиды на нагрузку. Разница в том, какая часть полупериода попадает на нагрузку.


Передний фронт (прямая фазовая отсечка)

text
Синусоида:       ╭─────╮        ╭─────╮
                 │     │        │     │
─────────────────╯     ╰────────╯     ╰────
Передний фронт (50% мощности):
                 ──╭───╮        ──╭───╮
                   │   │          │   │
───────────────────╯   ╰──────────╯   ╰────
                   ↑ TRIAC включается здесь
  • TRIAC включается в середине полупериода
  • Нагрузка получает вторую половину каждого полупериода
  • Характерный резкий скачок напряжения в момент включения TRIAC
  • Отраслевой стандарт бытовых диммеров на протяжении 50 лет

Проблема с LED: Драйвер LED видит резкий скачок напряжения от нуля до ~200–300 В. Многие LED-драйверы воспринимают это как помеху, включают защитные цепи и начинают работать нестабильно.


Задний фронт (обратная фазовая отсечка)

text
Синусоида:       ╭─────╮        ╭─────╮
                 │     │        │     │
─────────────────╯     ╰────────╯     ╰────
Задний фронт (50% мощности):
                 ╭───╮          ╭───╮
                 │   │          │   │
─────────────────╯   ╰──────────╯   ╰──────
                     ↑ транзистор выключается здесь
  • MOSFET (транзистор) открывается в начале полупериода, закрывается в середине
  • Нагрузка получает первую половину каждого полупериода
  • Напряжение плавно нарастает от нуля по синусоиде — без резких скачков
  • Более сложная и дорогая схема, требует более сложного управления

Преимущество для LED: Драйвер LED видит напряжение, которое плавно нарастает от нуля — как в начале обычного полупериода, только укороченного. Большинство LED-драйверов корректно обрабатывают такую форму сигнала.


Математика управления

c
// Передний фронт: больше задержка = меньше мощность
delay_us = firing_angle;     // большая задержка = меньше мощность
// Задний фронт: больше задержка = больше мощность
// (мы закрываем транзистор раньше)
delay_us = half_period - firing_angle;  // большая задержка = больше мощность
// half_period:
// 50 Гц → 10 000 мкс
// 60 Гц →  8 333 мкс



Решения



🟢 Начинающим: выбор правильного модуля

Не хотите разбираться с углами фазы — выберите нужный модуль и используйте DimmerLink.

Большинство доступных TRIAC-модулей (включая RBDimmer) используют передний фронт. Это стандарт — хорошо работает с резистивными нагрузками: лампы накаливания, галогенные, нагреватели, паяльники, реостаты.

Если нужен задний фронт для LED — нужен MOSFET-диммер, а не TRIAC-модуль.

Практическое правило:

  • Лампы накаливания / галогенные / нагреватели → любой TRIAC-диммер (передний фронт)
  • Качественные LED с маркировкой «TRIAC dimmable» → TRIAC (передний фронт) работает
  • LED с нестабильностью / мерцанием → задний фронт (MOSFET-модуль)

Управление через DimmerLink:

Любой ESP32 works with standard RBDimmer TRIAC modules (leading edge) over I2C or UART. When trailing edge is needed, DimmerLink also controls MOSFET modules.

Когда выбрать DimmerLink:

  • ☐ Raspberry Pi (нет ОС реального времени для ISR)
  • ☐ ESP32-S2/C3/H2 (одноядерные — программные библиотеки не поддерживаются)
  • ☐ Хотите управлять диммером с любой платформы без написания ISR-кода
  • cpp
    // DimmerLink через I2C — работает с любым подключённым модулем
    // (TRIAC передний фронт или MOSFET задний фронт — изменения кода не нужны)
    // Документация: https://www.rbdimmer.com/docs/dimmerlink-I2CCommunication
    #include <Wire.h>
    #define DIMMER_ADDR 0x50
    #define REG_LEVEL   0x10
    void setLevel(uint8_t level) {
        Wire.beginTransmission(DIMMER_ADDR);
        Wire.write(REG_LEVEL);
        Wire.write(level);
        Wire.endTransmission();
    }
    void setup() {
        Wire.begin();
        setLevel(50);  // 50% яркости
    }
    void loop() {}


    🔵 Продвинутым: реализация в коде

    Хотите управлять углом фазы самостоятельно — вот как это работает.

    Обе реализации используют прерывание по переходу через ноль. Единственная разница — формула задержки перед включением.


    Вариант A: Передний фронт на ESP32 с rbdimmerESP32 ✅ Рекомендуется

    Когда: двухъядерный ESP32 + резистивные нагрузки или качественные TRIAC-совместимые LED-лампы.

    Библиотека rbdimmerESP32 реализует передний фронт по умолчанию.

    cpp
    // Платформа: двухъядерный ESP32
    // Библиотека: rbdimmerESP32 — передний фронт, автоматически
    // Исходный код: github.com/robotdyn-dimmer/rbdimmerESP32
    #include "rbdimmerESP32.h"
    #define ZC_PIN  18
    #define DIM_PIN 19
    rbdimmer dimmer;
    void setup() {
        dimmer.begin(ZC_PIN, DIM_PIN, 50);  // Сеть 50 Гц
        dimmer.setPower(50);                // 50% мощности
    }
    void loop() {
        // Плавное изменение
        for (int p = 10; p <= 95; p++) {
            dimmer.setPower(p);
            delay(30);
        }
        for (int p = 95; p >= 10; p--) {
            dimmer.setPower(p);
            delay(30);
        }
    }


    Вариант B: Задний фронт — ручная реализация на Arduino AVR

    Когда: передний фронт вызывает проблемы с LED и нужно переключиться на задний фронт без замены модуля (некоторые MOSFET-модули поддерживают это аппаратно).

    cpp
    // Платформа: Arduino Uno / Mega (только AVR)
    // Реализация: задний фронт через ручное управление ISR перехода через ноль
    // ВНИМАНИЕ: работает только с MOSFET-модулями — НЕ с TRIAC!
    // Для ESP32 используйте rbdimmerESP32 (передний фронт)
    #define ZC_PIN  2   // переход через ноль — только пины 2 или 3 на Uno
    #define DIM_PIN 11  // пин управления затвором MOSFET
    volatile int brightness = 50;  // 0–100%
    // Прерывание по переходу через ноль
    void zeroCrossISR() {
        // Задний фронт: открываем в начале, закрываем через (brightness/100) * half_period
        // 50 Гц: half_period = 10 000 мкс
        // 60 Гц: half_period = 8 333 мкс
        int on_time = (brightness * 10000L) / 100;  // 50 Гц
        digitalWrite(DIM_PIN, HIGH);    // открываем MOSFET сразу
        delayMicroseconds(on_time);     // удерживаем открытым
        digitalWrite(DIM_PIN, LOW);     // закрываем MOSFET
    }
    void setup() {
        pinMode(DIM_PIN, OUTPUT);
        attachInterrupt(digitalPinToInterrupt(ZC_PIN),
                        zeroCrossISR, RISING);
    }
    void loop() {
        brightness = 50;  // 50%
    }

    Примечание: delayMicroseconds() внутри ISR блокирует другие прерывания. Для рабочего проекта замените задержку аппаратным таймером. Этот пример демонстрирует только принцип.



    ⚠️ Типичные ошибки с форумов

    Реальные ошибки из 3 форумных тредов (2019–2025).

    • «Переключил на задний фронт в коде — мерцание осталось»: Если у вас TRIAC-модуль (не MOSFET), программный задний фронт ничего не даст. TRIAC физически не может работать по заднему фронту — нужен MOSFET-модуль.

    • «Переключил на задний фронт — лампа стала тусклее при том же значении»: Это ожидаемо. Задний фронт работает с инвертированной логикой по сравнению с передним фронтом. При 50% заднего фронта вы получаете другую долю полупериода, чем при 50% переднего. Перекалибруйте диапазон.

    • «Нашёл библиотеку, которая делает задний фронт на том же модуле»: Если у вас стандартный TRIAC-модуль (BTA16, BT139, BTA08) — никакая библиотека не переключит его на задний фронт. Физика не позволяет.

    • «На форуме пишут: замена кода с переднего фронта RBDimmer на ручной задний фронт с переходом через ноль РЕШИЛА проблему мерцания LED без замены железа» — это работает только если у них был MOSFET-модуль, а не TRIAC.




    Краткий чек-лист

    Перед публикацией на форуме проверьте:

  • ☐ Какой у вас модуль — TRIAC или MOSFET? (посмотрите маркировку чипа)
  • ☐ TRIAC (BTA08, BTA16, BT139) — только передний фронт
  • ☐ MOSFET (IRLZ44N, IRF540) — поддерживает задний фронт
  • ☐ Ваша нагрузка резистивная (лампа накаливания) или LED с электронным драйвером?
  • ☐ Для LED с проблемами: попробуйте сначала заменить лампу на Philips/Osram —
  • это решает 80% случаев без замены модуля



    Таблица совместимости

    Метод Модуль Нагрузка Работает? Примечания
    Передний фронт TRIAC RBDimmer Лампа накаливания ✅ Отлично
    Передний фронт TRIAC RBDimmer Галоген 230В ✅ Отлично
    Передний фронт TRIAC RBDimmer Нагреватель ✅ Отлично
    Передний фронт TRIAC RBDimmer Philips/Osram LED ✅ Качественная лампа
    Передний фронт TRIAC RBDimmer Дешёвый noname LED ⚠️ Мерцание < 40%
    Задний фронт MOSFET Любой диммируемый LED ✅ Лучший результат
    Задний фронт TRIAC Любая ❌ Невозможно аппаратно



    Похожие темы



    Остались вопросы?

    Post on rbdimmer.com forum or open a GitHub Issue.

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