Änderungsprotokoll
Note: Library GitHub: https://github.com/robotdyn-dimmer/rbdimmerESP32
Alle wichtigen Änderungen an der rbdimmerESP32-Bibliothek werden in dieser Datei dokumentiert.
Das Format basiert auf Keep a Changelogund dieses Projekt folgt der semantischen Versionierung.
[2.0.0] - 2026-03-23
Übersicht
Vollständige Neuarchitektur. Die monolithische Implementierung mit einer einzelnen Datei wurde durch eine vollständig modulare interne Architektur ersetzt. Alle zeitkritischen Pfade verwenden jetzt IRAM_ATTR-Platzierung und ESP_TIMER_ISR-Verteilung. Die Hardwarevalidierung auf einer 4-Kanal-Platine enthüllte und behob drei unabhängige Flackerprobleme, die in der Simulation nicht reproduzierbar waren.
Inkompatible Änderungen
- Das interne Quelllayout hat sich von einer einzelnen
rbdimmerESP32.cppzusrc/internal/-Modulen geändert. Die direkte Einbeziehung von internen Headern wird nicht mehr unterstützt. - Beispiele wurden von flachen
.ino/.c-Dateien in Verzeichnisse pro Sketch umstrukturiert (erforderlich für Arduino IDE 2.x-Bibliotheksverwaltung). Kconfig.txtwurde entfernt – die ESP-IDF-Komponentenkonfiguration verwendet jetzt den Standard-DateinamenKconfig. Projekte, die aufKconfig.txtverwiesen, müssen aktualisiert werden.- Public-Header-API (
rbdimmerESP32.h) ist unverändert – Benutzercode muss nicht geändert werden.
Hinzugefügt
- Modulare Architektur – Implementierung in sieben interne Module aufgeteilt:
rbdimmer_zerocross– ZC-GPIO-ISR, Frequenzmessung, Rauschgatterrbdimmer_channel– Kanalzustand, ZC-Phaseneverteilung, zweistufige ISRrbdimmer_timer– esp_timer-create/start/stop-Wrapperrbdimmer_curves– Level-zu-Verzögerung-Umwandlung (LINEAR, RMS, LOG)rbdimmer_transition– FreeRTOS-Aufgaben-basierter sanfter Übergangrbdimmer_types– Gemeinsame Structs und Enumsrbdimmer_hal– GPIO/Timer-HAL-Abschnitte für Arduino/ESP-IDF-Portabilität- Kconfig-Parameter zur ESP-IDF-Optimierung:
CONFIG_RBDIMMER_ZC_DEBOUNCE_US(Standard 3000 µs) – Rauschgatter-FensterCONFIG_RBDIMMER_MIN_DELAY_US(Standard 100 µs) – minimale ZC→TRIAC-VerzögerungCONFIG_RBDIMMER_LEVEL_MIN(Standard 3%) – Level darunter → AUSCONFIG_RBDIMMER_LEVEL_MAX(Standard 99%) – Level darüber → begrenzt- CI-Build-Matrix (
.github/workflows/build.yml): - Arduino:
arduino/compile-sketches@v1, Core 3.x, 4 Beispiele × 5 Chips (ESP32, S2, S3, C3, C6) - ESP-IDF:
espressif/esp-idf-ci-action@v1, IDF v5.3 / v5.4 / v5.5 × 5 Chips = 15 Jobs test_app/– minimales ESP-IDF-Projekt zur Kompilierzeit-API-Oberflächenvalidierung
Behoben
- Allgemeines Flackern bei allen Helligkeitsstufen – TRIAC-Schaltspike hat ZC-ISR in der Mitte des Halbzyklus erneut ausgelöst. Rauschgatter hinzugefügt: Jede ZC-Flanke innerhalb von
ZC_DEBOUNCE_US(3000 µs) der vorherigen gültigen Flanke wird verworfen. - Flackern bei 100 % Helligkeit – Bei 50 µs Verzögerung lag die AC-Spannung (~5V) unter der TRIAC-Verriegelungsschwelle; außerdem machte die
esp_timer-ISR-Verteilung von GPIO-ISR auf Ebene 3 Verzögerungen unter 100 µs unvorhersehbar.MIN_DELAY_USwurde von 50 → 100 µs erhöht; Level ≥ 100 % wurden aufLEVEL_MAX(99 %) abgebildet. - Multi-Kanal-Synchronisierung – pro-Kanal-Phasenverschoberungen, verursacht durch sequenzielles GPIO-Reset + Timer-Arm in einer Schleife. Zweistufige ISR: Durchgang 1 setzt alle GPIOs auf LOW, Durchgang 2 aktiviert alle Verzögerungstimer.
- Flackern bei Pegeln unter 3 % – AC-Spannung zu niedrig für zuverlässiges TRIAC-Verriegeln nahe Ende des Halbzyklus. Level unter
LEVEL_MIN(3 %) geben Verzögerung = 0 zurück (Kanal AUS).
Geändert
- Alle ISR-Handler verwenden jetzt
IRAM_ATTR-Platzierung - Timer-Versand geändert zu
ESP_TIMER_ISRfür minimales Jitter - Minimal unterstützte ESP-IDF-Version: 5.3 (war 4.4)
- Arduino ESP32-Kern mindestens: 3.x (war 2.0.0)
[1.0.0] - 2024-01-01
Hinzugefügt
- Initiale Veröffentlichung
- Implementierung mit einer Datei
- Unterstützung für ESP32, ESP32-S2, ESP32-S3, ESP32-C3
- Drei Helligkeitskurven: LINEAR, RMS, LOGARITHMIC
- Multi-Kanal- und Multi-Phasen-Unterstützung
- Sanfte Übergänge über FreeRTOS-Aufgaben
- Arduino IDE- und ESP-IDF-Unterstützung