Журнал изменений
Note: Library GitHub: https://github.com/robotdyn-dimmer/rbdimmerESP32
Все значительные изменения библиотеки rbdimmerESP32 будут задокументированы в этом файле.
Формат основан на Keep a Changelog, и этот проект придерживается Semantic Versioning.
[2.0.0] - 2026-03-23
Обзор
Полное переписывание архитектуры. Монолитная однофайловая реализация была заменена полностью модульной внутренней архитектурой. Все критичные по времени пути теперь используют размещение IRAM_ATTR и диспетчеризацию ESP_TIMER_ISR. Аппаратная валидация на четырехканальной плате выявила и разрешила три независимые проблемы мерцания, которые не воспроизводились в симуляции.
Критические изменения
- Внутренняя структура исходных файлов изменена с одного
rbdimmerESP32.cppна модулиsrc/internal/. Прямое включение внутренних заголовков больше не поддерживается. - Примеры реструктурированы с плоских файлов
.ino/.cв директории для каждого скетча (требуется для менеджера библиотек Arduino IDE 2.x). Kconfig.txtудален — конфигурация компонента ESP-IDF теперь использует стандартное имя файлаKconfig. Проекты, которые ссылались наKconfig.txt, должны быть обновлены.- API публичного заголовка (
rbdimmerESP32.h) не изменен — код пользователя не требует модификации.
Добавлено
- Модульная архитектура — реализация разделена на семь внутренних модулей:
rbdimmer_zerocross— ZC GPIO ISR, измерение частоты, шумовой фильтрrbdimmer_channel— состояние канала, диспетчеризация фазы ZC, двухпроходный ISRrbdimmer_timer— обертки создания/запуска/остановки esp_timerrbdimmer_curves— преобразование уровня → задержка (LINEAR, RMS, LOG)rbdimmer_transition— плавное затухание на основе задачи FreeRTOSrbdimmer_types— общие структуры и перечисленияrbdimmer_hal— прослойки GPIO/timer HAL для переносимости Arduino/ESP-IDF- Параметры Kconfig для настройки ESP-IDF:
CONFIG_RBDIMMER_ZC_DEBOUNCE_US(по умолчанию 3000 µs) — окно шумового фильтраCONFIG_RBDIMMER_MIN_DELAY_US(по умолчанию 100 µs) — минимальная задержка ZC→TRIACCONFIG_RBDIMMER_LEVEL_MIN(по умолчанию 3%) — уровни ниже → ВЫКЛCONFIG_RBDIMMER_LEVEL_MAX(по умолчанию 99%) — уровни выше → ограничены- Матрица CI построения (
.github/workflows/build.yml): - Arduino:
arduino/compile-sketches@v1, Core 3.x, 4 примера × 5 чипов (ESP32, S2, S3, C3, C6) - ESP-IDF:
espressif/esp-idf-ci-action@v1, IDF v5.3 / v5.4 / v5.5 × 5 чипов = 15 заданий test_app/— минимальный проект ESP-IDF для проверки поверхности API во время компиляции
Исправлено
- Общее мерцание на всех уровнях яркости — импульс переключения TRIAC повторно запустил ZC ISR посередине полупериода. Добавлен шумовой фильтр: любой фронт ZC в пределах
ZC_DEBOUNCE_US(3000 µs) от предыдущего допустимого фронта отклоняется. - Мерцание при 100% яркости — при задержке 50 µs напряжение переменного тока (~5 В) было ниже порога защелки TRIAC; кроме того, диспетчеризация
esp_timerISR из ISR GPIO уровня 3 сделала задержки ниже 100 µs непредсказуемыми.MIN_DELAY_USповышена с 50 → 100 µs; уровни ≥ 100% отображаются наLEVEL_MAX(99%). - Синхронизация мультиканального — смещения фазы по каналам, вызванные последовательным сбросом GPIO + вооружением таймера в одном цикле. Двухпроходный ISR: Проход 1 устанавливает все GPIO в LOW, Проход 2 вооружает все таймеры задержки.
- Мерцание на уровнях ниже 3% — напряжение переменного тока слишком низкое для надежной защелки TRIAC близко к концу полупериода. Уровни ниже
LEVEL_MIN(3%) возвращают задержку = 0 (канал ВЫКЛ).
Изменено
- Все обработчики ISR теперь используют размещение
IRAM_ATTR - Диспетчеризация таймера изменена на
ESP_TIMER_ISRдля минимального дрожания - Минимальная поддерживаемая версия ESP-IDF: 5.3 (была 4.4)
- Минимум Arduino ESP32 Core: 3.x (была 2.0.0)
[1.0.0] - 2024-01-01
Добавлено
- Первоначальный выпуск
- Однофайловая реализация
- Поддержка ESP32, ESP32-S2, ESP32-S3, ESP32-C3
- Три кривые яркости: LINEAR, RMS, LOGARITHMIC
- Поддержка мультиканального и многофазного
- Плавные переходы через задачи FreeRTOS
- Поддержка Arduino IDE и ESP-IDF