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

Журнал изменений

Все значительные изменения библиотеки 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, двухпроходный ISR
  • rbdimmer_timer — обертки создания/запуска/остановки esp_timer
  • rbdimmer_curves — преобразование уровня → задержка (LINEAR, RMS, LOG)
  • rbdimmer_transition — плавное затухание на основе задачи FreeRTOS
  • rbdimmer_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→TRIAC
  • CONFIG_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_timer ISR из 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