Wenn Sie einen AC-Dimmer mit einem TRIAC bauen, haben Sie wahrscheinlich Flackern, instabile Helligkeit oder zufällige Sprünge der Lichtintensität bemerkt.
Die meisten DIY-Entwickler vermuten als Ursache:
- minderwertige Dimmer-Hardware
- defekter TRIAC oder Optokoppler
- Probleme mit dem PCB-Layout
Aber in den meisten realen Projekten ist die Dimmer-Hardware nicht das Problem.
Die eigentliche Ursache ist die Timing-Genauigkeit in der Firmware, insbesondere auf ESP8266 und ESP32.
Diese Anleitung erklärt:
- warum TRIAC-Dimmer flackern
- warum ESP32 das Problem verschärft
- wie Sie Flackern per Software beheben
- warum dedizierte Hardware-Steuerung die zuverlässigste Lösung ist
Wie ein AC TRIAC-Dimmer funktioniert
Ein TRIAC-Dimmer reduziert die Spannung nicht gleichmäßig.
Er steuert, wann der TRIAC während jeder AC-Halbwelle einschaltet.
Ablauf:
- Die AC-Wellenform durchquert den Nullpunkt (Nulldurchgangs-Ereignis)


2. Der MCU wartet eine präzise Verzögerung ab (Phasenwinkel)
3. Der MCU sendet einen kurzen Gate-Impuls an den TRIAC


4. Der TRIAC leitet bis zum nächsten Nulldurchgang
Die Helligkeit hängt vollständig von der Timing-Genauigkeit im Mikrosekundenbereich ab.
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
Warum Timing entscheidend ist (in Zahlen)
AC-Dimmen ist Echtzeitsteuerung. Hier die konkreten Zahlen:
- AC-Frequenz: 50 Hz (60 Hz) → Nulldurchgang alle 10 ms
- Erforderliche TRIAC-Zündgenauigkeit: ±50 µs für stabile Helligkeit
- Wi-Fi-Interrupt-Blockierung auf ESP32: 200–500 µs
- Ergebnis: sichtbares Flackern selbst bei moderater CPU-Last
💡 Das bedeutet: Wi-Fi kann das TRIAC-Timing um das 10-Fache der zulässigen Fehlertoleranz stören.
Warum Flackern in ESP8266- / ESP32-Projekten auftritt
ESP-Chips sind leistungsfähig, aber standardmäßig nicht echtzeitfähig.
Sie führen aus:
- Wi-Fi- / BLE-Stacks
- Flash-Speicherzugriffe (oft blockierend)
- RTOS-Scheduling (ESP32)
- Hintergrund-Systemaufgaben
Wenn der Dimmer-Timing-Code mit diesen Aufgaben konkurriert:
- werden Nulldurchgangs-Interrupts verzögert
- verschieben sich die TRIAC-Gate-Impulse
- wird die Helligkeit instabil
Das wird schlimmer, wenn:
- MQTT / OTA / Web-UI aktiv ist
- Logging aktiviert ist
- mehrere Dimmerkanäle verwendet werden
Häufige Anfängerfehler
Beliebte Arduino- / ESPHome- / Tasmota-Beispiele verwenden oft:
- delay() nach dem Nulldurchgang
- Timing-Logik in nicht-deterministischen Callbacks
- blockierende Funktionsaufrufe innerhalb von ISR
- Flash-Speicherzugriffe in zeitkritischem Code
Sie funktionieren in Demos, versagen aber in realen Produkten.
Solution 1 — Software-Based: rbdimmerESP32.h
Für ESP32-Dual-Core-Chips lässt sich Flackern per Software beheben, wenn es richtig gemacht wird.
What rbdimmerESP32.h Does
rbdimmerESP32.h wurde für deterministische TRIAC-Steuerung entwickelt:
- Hardware-Timer (keine Software-Verzögerungen)
- ISR-Code im IRAM gespeichert (keine Flash-Blockierungen)
- Kerntrennung: Echtzeit vs. Wi-Fi
- FreeRTOS-sichere Architektur
Repo: 👉 https://github.com/robotdyn-dimmer/rbdimmerESP32
Wichtige technische Details — IRAM (Instruction RAM)
ESP32 führt Code normalerweise aus dem Flash aus.
Flash-Zugriffe können die CPU für Hunderte von Mikrosekunden blockieren.
Lösung:
Platzieren Sie zeitkritischen Code im IRAM mit:
IRAM_ATTR void zeroCrossISR() {
// ultra-fast ISR code
}
Hardware-Timer
Verwenden Sie niemals delay() oder millis() für das TRIAC-Timing.
Nutzen Sie Hardware-Timer des ESP32 für Mikrosekunden-Präzision.
Dual-Core-Strategie
- Core 0: Dimmer-Timing (Echtzeit)
- Core 1: Wi-Fi, MQTT, UI, Logging
Diese Trennung verhindert Flackern.
Wann die Software-Lösung sinnvoll ist
✅ Nur ESP32
✅ Sie verstehen Interrupts und RTOS
✅ Sie benötigen volle Firmware-Kontrolle
⚠️ Erfordert sorgfältige Architektur
RICHTIG ✅
- Verwenden Sie ESP32-Hardware-Timer für die TRIAC-Steuerung
- Halten Sie den ISR-Code unter 10 µs
- Führen Sie Dimming auf Core 0, Wi-Fi auf Core 1 aus
- Speichern Sie zeitkritischen Code im IRAM
FALSCH ❌
- Rufen Sie niemals Serial.print() aus ISR auf
- Greifen Sie nicht auf Flash in zeitkritischem Code zu
- Vermeiden Sie delay() in der Nähe der Nulldurchgangs-Logik
- Vermischen Sie nicht Dimming- und Netzwerk-Aufgaben
Solution 2 — Hardware-Based: Jeder ESP32 (Recommended)
Der zuverlässigste Weg, Flackern zu beseitigen, ist das TRIAC-Timing aus dem Haupt-MCU auszulagern.
What Is Jeder ESP32?
DimmerLink ist ein dediziertes Dimmer-Controller-Modul:
- erkennt den Nulldurchgang
- erzeugt TRIAC-Impulse intern
- garantiert stabiles Timing
- kommuniziert über UART / I²C
Docs: 👉 https://github.com/robotdyn-dimmer/DimmerLink
Warum DimmerLink Flackern beseitigt
- Wi-Fi kann die TRIAC-Zündung nicht verzögern
- MCU-Timing-Fehler beeinflussen das Dimmen nicht
- Flash-Blockierungen sind irrelevant
- Skalierung auf mehrere Kanäle ist trivial
Ihr MCU sendet einfach serielle (UART) Befehle wie:
Example: 02 53 00 32 → Set dimmer 0 to 50% Response: 00 → OK
| STUFE | Helligkeit |
| 0x00 (0) | 0% — aus |
| 0x32 (50) | 50% |
| 0x64 (100) | 100% — volle Helligkeit |
Vergleich Software vs. Hardware
| Kriterium | rbdimmerESP32.h | DimmerLink |
| Kosten (BOM) | $0 | $1.5 |
| Stromverbrauch | Wie MCU | +10 mA |
| PCB-Platzbedarf | 0 (Software) | ~1×2 cm |
| Zertifizierung (CE/UL) | Nur DIY | Nur DIY |
| ESP8266-Unterstützung | ❌ | ✔️ |
| ESP32-Unterstützung | ✔️ | ✔️ |
Raspberry Pi/Orange Pi.. | ❌ | ✔️ |
| Mehrere Dimmer | ⚠️ komplex | ✔️ einfach |
| Anfängerfreundlich | ❌ | ✔️ |
| Produktionsreif | ⚠️ | ✔️ |
Entscheidungsbaum: Welche Lösung ist die richtige für mich?
Verwenden Sie ESP8266?
- Verwenden Sie DimmerLink
Verwenden Sie ESP32 und möchten volle Kontrolle?
- Verwenden Sie rbdimmerESP32
Brauchen Sie mehrere Dimmer und absolute Stabilität?
- Verwenden Sie DimmerLink
Entwickeln Sie ein kommerzielles Produkt?
- Verwenden Sie DimmerLink
Experimentieren Sie und lernen Sie Echtzeit-Programmierung?
- Verwenden Sie rbdimmerESP32
Fazit
TRIAC-Dimmen dreht sich nicht um Spannung — es geht um Mikrosekunden-Timing.
Wi-Fi ist nicht echtzeitfähig.
Verzögerungen sind gefährlich.
Flash ist unvorhersehbar.
If you want stable light and zero flicker, isolate timing or move it to dedicated hardware - Jeder ESP32.