Ir al contenido

Registro de cambios

Todos los cambios notables en la biblioteca rbdimmerESP32 serán documentados en este archivo.

El formato se basa en Keep a Changelog, y este proyecto se adhiere a Semantic Versioning.

[2.0.0] - 2026-03-23

Descripción general

Reescritura arquitectónica completa. La implementación monolítica de un solo archivo ha sido reemplazada con una arquitectura interna completamente modular. Todas las rutas críticas en tiempo de ejecución ahora utilizan colocación IRAM_ATTR y envío ESP_TIMER_ISR. La validación de hardware en una placa de 4 canales reveló y resolvió tres problemas de parpadeo independientes que no eran reproducibles en simulación.

Cambios que rompen compatibilidad

  • El diseño de código fuente interno cambió de un único rbdimmerESP32.cpp a módulos en src/internal/. Ya no se admite la inclusión directa de encabezados internos.
  • Ejemplos reestructurados de archivos .ino/.c planos a directorios por esquema (requerido para el administrador de bibliotecas del Arduino IDE 2.x).
  • Kconfig.txt eliminado — la configuración del componente ESP-IDF ahora utiliza el nombre de archivo estándar Kconfig. Los proyectos que hacían referencia a Kconfig.txt deben actualizarse.
  • El API del encabezado público (rbdimmerESP32.h) no ha cambiado — el código del usuario no necesita ser modificado.

Agregado

  • Arquitectura modular — implementación dividida en siete módulos internos:
  • rbdimmer_zerocross — ZC GPIO ISR, medición de frecuencia, compuerta de ruido
  • rbdimmer_channel — Estado del canal, envío de fase ZC, ISR de dos pasadas
  • rbdimmer_timer — Contenedores esp_timer crear/iniciar/detener
  • rbdimmer_curves — Conversión de nivel → retardo (LINEAR, RMS, LOG)
  • rbdimmer_transition — Transición suave basada en tarea FreeRTOS
  • rbdimmer_types — Estructuras y enumeraciones compartidas
  • rbdimmer_hal — Derivaciones HAL GPIO/temporizador para portabilidad Arduino/ESP-IDF
  • Parámetros Kconfig para ajuste ESP-IDF:
  • CONFIG_RBDIMMER_ZC_DEBOUNCE_US (predeterminado 3000 µs) — ventana de compuerta de ruido
  • CONFIG_RBDIMMER_MIN_DELAY_US (predeterminado 100 µs) — retardo mínimo ZC→TRIAC
  • CONFIG_RBDIMMER_LEVEL_MIN (predeterminado 3%) — niveles por debajo → OFF
  • CONFIG_RBDIMMER_LEVEL_MAX (predeterminado 99%) — niveles por encima → limitado
  • Matriz de compilación CI (.github/workflows/build.yml):
  • Arduino: arduino/compile-sketches@v1, Core 3.x, 4 ejemplos × 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 trabajos
  • test_app/ — proyecto minimal ESP-IDF para verificación de superficie de API en tiempo de compilación

Corregido

  • Parpadeo general en todos los niveles de brillo — el pico de conmutación TRIAC reactivó ISR ZC a mitad del ciclo. Se agregó compuerta de ruido: cualquier borde ZC dentro de ZC_DEBOUNCE_US (3000 µs) del borde válido anterior se descarta.
  • Parpadeo al 100% de brillo — a un retardo de 50 µs el voltaje AC (~5V) estaba por debajo del umbral de enganche TRIAC; además, el envío ISR esp_timer desde ISR GPIO de nivel 3 hizo que los retardos por debajo de 100 µs fueran impredecibles. MIN_DELAY_US aumentado de 50 → 100 µs; niveles ≥ 100% asignados a LEVEL_MAX (99%).
  • Sincronización multicanal — los desplazamientos de fase por canal causados por reajuste GPIO secuencial + brazo de temporizador en un solo bucle. ISR de dos pasadas: Pasada 1 establece todos los GPIO en BAJO, Pasada 2 arma todos los temporizadores de retardo.
  • Parpadeo en niveles por debajo del 3% — voltaje AC demasiado bajo para enganche TRIAC confiable cerca del final del medio ciclo. Niveles por debajo de LEVEL_MIN (3%) retornan retardo = 0 (canal OFF).

Cambiado

  • Todos los manejadores ISR ahora utilizan colocación IRAM_ATTR
  • Envío de temporizador cambiado a ESP_TIMER_ISR para jitter mínimo
  • Versión mínima compatible de ESP-IDF: 5.3 (fue 4.4)
  • Núcleo Arduino ESP32 mínimo: 3.x (fue 2.0.0)

[1.0.0] - 2024-01-01

Agregado

  • Lanzamiento inicial
  • Implementación de un solo archivo
  • Soporte para ESP32, ESP32-S2, ESP32-S3, ESP32-C3
  • Tres curvas de brillo: LINEAR, RMS, LOGARITHMIC
  • Soporte multicanal y multifase
  • Transiciones suaves a través de tareas FreeRTOS
  • Soporte Arduino IDE y ESP-IDF