← Hardware-Anschluss | Inhaltsverzeichnis | Weiter: Arduino-Leitfaden und Beispiele →
Universelle Bibliothek für ESP32
Übersicht der Bibliothek
Die AC-Dimmer-Bibliothek ist eine effiziente Lösung zur Helligkeitssteuerung von Wechselstromgeräten (AC) mithilfe eines Mikrocontrollers der ESP32-Familie. Die Bibliothek nutzt die Hardware-Fähigkeiten des ESP32 – GPIO-Interrupt-Verarbeitung und hochpräzise Timer – um den TRIAC-Zündzeitpunkt in jeder Halbwelle des Wechselstroms präzise zu steuern.
Funktionen und Vorteile
- Kompatibel mit den Frameworks Arduino, ESP-IDF und ESPHome
- Kompatibel mit Mehrphasensystemen
- Unterstützung mehrerer unabhängiger Dimmkanäle
- Minimale Prozessorressourcennutzung dank Hardware-Interrupts und ESP-Timern
- Hochpräzise Helligkeitssteuerung für AC-Geräte
- Verschiedene Helligkeitsregelkurven (linear, RMS, logarithmisch)
- Automatische Erkennung der Netzfrequenz (50/60 Hz und andere)
- Sanfte Übergänge zwischen Helligkeitsstufen
- Unterstützung von Callback-Funktionen zur Synchronisation mit anderen Ereignissen
Anforderungen
Mikrocontroller der ESP32-Familie
Kompatibel mit Arduino ESP32 Core (Version 2.0.0 oder höher):
- ESP32
- ESP32-C3
- ESP32-C6
- ESP32-H2
- ESP32-P4
- ESP32-S2
- ESP32-S3
Kompatibel mit ESP-IDF (5.0 oder höher):
- ESP32
- ESP32-S2
- ESP32-C3
- ESP32-S3
- ESP32-C2
- ESP32-C6
- ESP32-H2
- ESP32-P4
Kompatibel mit ESPHome:
- ESP32
- ESP32-S2
- ESP32-S3
- ESP32-C3
- ESP32-H2
Frameworks: Leitfäden und Beispiele
Verfügbare Dokumentation
- Arduino-Leitfaden & Beispiele
- ESP-IDF-Leitfaden & Beispiele
- ESPHome-Leitfaden & Beispiele
Funktionale Spezifikationen
Auswahl der Helligkeitskurve (Dimmkurve)
Die Bibliothek unterstützt drei Kurventypen für die Helligkeitsregelung:
Linear (AC_DIMMER_CURVE_LINEAR)
- Gleichmäßige Änderung des Verzögerungswinkels
- Geeignet für einfache Anwendungen
- Die wahrgenommene Helligkeit ist nicht linear
RMS (AC_DIMMER_CURVE_RMS)
- Kompensiert die RMS-Charakteristik eines sinusförmigen Signals
- Bietet lineare Leistungsänderung
- Ideal für Glühlampen und resistive Lasten
Logarithmisch (AC_DIMMER_CURVE_LOGARITHMIC)
- Kompensiert die logarithmische Helligkeitswahrnehmung des menschlichen Auges
- Bietet visuell lineare Helligkeitsänderung
- Empfohlen für LED-Beleuchtung
Sanfte Übergänge
Für sanfte Übergänge zwischen Helligkeitsstufen die Funktion ac_dimmer_set_brightness_transition() verwenden:
Mehrkanalsysteme
Die Bibliothek unterstützt mehrere unabhängige Dimmkanäle. Die Anzahl der Kanäle ist in den Bibliothekseinstellungen in der Datei ac_dimmer.h begrenzt. Jeder Dimmkanal muss einen separaten Ausgangspin haben.
Verwendung von Interrupt-Callback-Funktionen
Callback-Funktionen ermöglichen die Synchronisation des Codes mit Nulldurchgangsereignissen. Dies ist nützlich für Aufgaben, die eine präzise Synchronisation mit dem AC-Netz erfordern.
Optimierung und Debugging
Optimale Ressourcennutzung
esp-timer-Einschränkungen:
- Die Bibliothek verwendet
esp_timer, der das Erstellen mehrerer Software-Timer ermöglicht - Für jeden Kanal werden 2 Timer verwendet: einer für die Verzögerung und einer für die Impulsbreite
Interrupt-Optimierung:
- Interrupt-Handler werden so kurz wie möglich gehalten, um die Last zu reduzieren
- Das Attribut
IRAM_ATTRwird verwendet, um den Handler-Code im IRAM zu platzieren - Komplexe Berechnungen werden außerhalb von Interrupt-Handlern durchgeführt
Leistung:
- Vorberechnete Tabellen für Helligkeitskurven reduzieren die Rechenzeit
- Parameter-Caching reduziert wiederholte Berechnungen
Protokollierung:
Die Bibliothek verfügt über ein erweitertes Protokollierungssystem. Für das Projekt-Debugging die Protokollierung von Bibliotheksfunktionsoperationen an den seriellen Port aktivieren.
Lösung häufiger Probleme
Die Lampe flimmert oder die Helligkeit ist instabil
Dies kann bei Dimmstufen von 0–8 auftreten.
Ursachen und Lösungen:
- Falsche AC-Neutral- und Phasenverbindung: Die AC-Stromquellenverbindung prüfen. Neutral zu N, Phase zu AC-L IN
- Probleme mit dem Nulldurchgang-Detektor: Signalwellenform und Auslöseschwelle prüfen
- ESP32-Mikrocontroller-Architektur und Arduino Core: Suboptimale Kompatibilität und Prioritäten des ISR-Moduls und Timer-Moduls auf Arduino-Core-Ebene
- Hohe CPU-Last: Anzahl der Berechnungen in der Hauptschleife reduzieren
- Interrupt-Konflikte: Sicherstellen, dass andere Bibliotheken keine Konflikte mit Interrupts verursachen
Falsche Helligkeit für bestimmte Lasttypen
Ursachen: Bei 50 % Helligkeit erscheint die Lampe zu hell oder zu dunkel
Lösung: Den Helligkeitskurventyp für Ihre Last ändern
Nulldurchgang-Detektor funktioniert nicht
Der Dimmer reagiert nicht auf Einstellungen:
- Nulldurchgang-Pin-Verbindung prüfen
- Sicherstellen, dass das Signal den ESP32 erreicht
- Die Funktion
ac_dimmer_get_frequency()prüfen – wenn sie 0 zurückgibt, ist die Netzfrequenz nicht erkannt
Technische Informationen
Betriebsprinzipien des AC-Dimmers
Die Leistungssteuerung in AC-Kreisen basiert auf dem Prinzip der Phasenregelung mithilfe eines TRIAC (Thyristors).
ESP-Timer-Eigenschaften im ESP32
Die Bibliothek verwendet esp_timer für präzise Verzögerungssteuerung:
Vorteile von esp-timer:
- Mikrosekundenauflösung
- Software-Implementierung ermöglicht das Erstellen zahlreicher Timer
- Geringer Overhead
esp-timer-Architektur:
- Ein Hardware-Timer für alle Software-Timer
- Timer-Warteschlange, geordnet nach Auslösezeit
- Callback-Funktionen werden im Kontext des Timer-Tasks aufgerufen
Einschränkungen:
- Kleines Jitter (±10–50 µs) bei hoher Systemlast
- Callback-Funktion sollte die Ausführung nicht lange blockieren
Interrupt-Behandlung
Nulldurchgang-Interrupts:
- Werden im Moment des Nulldurchgangs erzeugt
- Interrupt-Typ
GPIO_INTR_POSEDGEwird verwendet (nur steigende Flanke) - Der Handler startet Timer für alle aktiven Kanäle der jeweiligen Phase
Timer:
- Der erste Timer wird für die Verzögerungszeit gestartet und aktiviert den Ausgang
- Der zweite Timer wird zur Bestimmung der Impulsbreite gestartet
Methoden zur Stabilitätsverbesserung:
- Interrupt-Handler werden so kurz wie möglich gehalten und im IRAM platziert
- Kritische Abschnitte schützen gemeinsam genutzte Daten
- Minimale Berechnungen in Interrupt-Handlern
← Hardware-Anschluss | Inhaltsverzeichnis | Weiter: Arduino-Leitfaden und Beispiele →