Ir al contenido

← Conexión de hardware | Contenido | Siguiente: Guía Arduino y ejemplos →

Biblioteca universal para ESP32



Descripción general de la biblioteca

La biblioteca de dimmer AC es una solución eficiente para controlar el brillo de dispositivos de corriente alterna (AC) mediante un microcontrolador de la familia ESP32. La biblioteca aprovecha las capacidades de hardware del ESP32, como el procesamiento de interrupciones GPIO y los temporizadores de alta precisión, para controlar con exactitud el instante de activación del TRIAC en cada semiciclo de la corriente alterna.

Info



Características y ventajas

  • Compatible con los frameworks Arduino, ESP-IDF y ESPHome
  • Compatible con sistemas multifásicos
  • Soporte para múltiples canales de atenuación independientes
  • Uso mínimo de recursos del procesador gracias a las interrupciones de hardware y los temporizadores ESP
  • Control de brillo de alta precisión para dispositivos AC
  • Diversas curvas de regulación de brillo (lineal, RMS, logarítmica)
  • Detección automática de la frecuencia de red (50/60 Hz y otras)
  • Transiciones suaves entre niveles de brillo
  • Soporte para funciones callback para sincronización con otros eventos



Requisitos


Microcontrolador de la familia ESP32

Compatible con Arduino ESP32 Core (versión 2.0.0 o superior):

  • ESP32
  • ESP32-C3
  • ESP32-C6
  • ESP32-H2
  • ESP32-P4
  • ESP32-S2
  • ESP32-S3

Compatible con ESP-IDF (5.0 o superior):

  • ESP32
  • ESP32-S2
  • ESP32-C3
  • ESP32-S3
  • ESP32-C2
  • ESP32-C6
  • ESP32-H2
  • ESP32-P4

Compatible con ESPHome:

  • ESP32
  • ESP32-S2
  • ESP32-S3
  • ESP32-C3
  • ESP32-H2



Frameworks: guías y ejemplos


Documentación disponible

  • Guía Arduino y ejemplos
  • Guía ESP-IDF y ejemplos
  • Guía ESPHome y ejemplos



Especificaciones funcionales


Selección de la curva de brillo

La biblioteca admite tres tipos de curvas para el ajuste del brillo:

Lineal (AC_DIMMER_CURVE_LINEAR)

  • Cambio uniforme del ángulo de retardo
  • Adecuada para aplicaciones sencillas
  • El brillo percibido no es lineal

RMS (AC_DIMMER_CURVE_RMS)

  • Compensa la característica RMS de una señal sinusoidal
  • Proporciona un cambio de potencia lineal
  • Ideal para bombillas incandescentes y cargas resistivas

Logarítmica (AC_DIMMER_CURVE_LOGARITHMIC)

  • Compensa la percepción logarítmica del brillo por el ojo humano
  • Proporciona un cambio de brillo visualmente lineal
  • Recomendada para iluminación LED


Transiciones suaves

Para crear transiciones suaves entre niveles de brillo, use la función ac_dimmer_set_brightness_transition():

Tip
La función crea una transición suave dividiéndola en múltiples pasos pequeños. Utiliza una tarea FreeRTOS; durante la transición, el código principal continúa ejecutándose.


Sistemas multicanal

La biblioteca admite múltiples canales de atenuación independientes. El número de canales está limitado en la configuración de la biblioteca en el archivo ac_dimmer.h. Cada canal de atenuación debe tener un pin de salida independiente.


Uso de funciones callback de interrupción

Las funciones callback permiten sincronizar el código con los eventos de cruce por cero. Útil para tareas que requieren sincronización precisa con la red AC.

Warning
Use código mínimo en la función callback. Recomendamos usar llamadas a tareas FreeRTOS.



Optimización y depuración


Uso óptimo de recursos

Limitaciones de los ESP-Timers:

  • La biblioteca usa esp_timer, que permite crear múltiples temporizadores por software
  • Para cada canal se usan 2 temporizadores: uno para el retardo y otro para el ancho de pulso

Optimización de interrupciones:

  • Los manejadores de interrupción se mantienen lo más cortos posible para reducir la carga
  • El atributo IRAM_ATTR se usa para ubicar el código del manejador en IRAM
  • Los cálculos complejos se realizan fuera de los manejadores de interrupción
Warning
Importante: no use código pesado en la función callback de interrupción de cruce por cero. Recomendamos usar llamadas a tareas FreeRTOS.

Rendimiento:

  • Las tablas precalculadas para las curvas de brillo reducen el tiempo de cálculo
  • El almacenamiento en caché de parámetros reduce los cálculos repetidos

Registro:

La biblioteca cuenta con un sistema de registro mejorado. Para depurar el proyecto, active el registro de las operaciones de las funciones de la biblioteca en el puerto serie.



Solución de problemas comunes


La lámpara parpadea o el brillo es inestable

Esto puede ocurrir en niveles de atenuación del 0 al 8.

Causas y soluciones:

  • Conexión incorrecta del neutro y la fase AC: verifique la conexión de la fuente AC. Neutro a N, fase a AC-L IN
  • Problemas con el detector de cruce por cero: verifique la forma de onda de la señal y el umbral de disparo
  • Arquitectura del microcontrolador ESP32 y Arduino core: compatibilidad y prioridades subóptimas del módulo ISR y del módulo de temporizador a nivel de Arduino Core
  • Alta carga de CPU: reduzca el número de cálculos en el bucle principal
  • Conflictos de interrupciones: asegúrese de que otras bibliotecas no entren en conflicto con las interrupciones


Brillo incorrecto para ciertos tipos de carga

Causas: al 50% de brillo, la lámpara parece demasiado brillante o demasiado tenue

Solución: cambie el tipo de curva de brillo para su carga


El detector de cruce por cero no funciona

El dimmer no responde al ajuste:

  • Verifique la conexión del pin de cruce por cero
  • Asegúrese de que la señal llegue al ESP32
  • Revise la función ac_dimmer_get_frequency() — si devuelve 0, la frecuencia de red no está determinada



Información técnica


Principios de funcionamiento del dimmer AC

El control de potencia en circuitos AC se basa en el principio de regulación de fase mediante un TRIAC (tiristor).

Info
Para más detalles, consulte el Artículo sobre el funcionamiento del TRIAC.


Características del ESP-Timer en ESP32

La biblioteca usa esp_timer para el control preciso de los retardos:

Ventajas del ESP-Timer:

  • Resolución en microsegundos
  • La implementación por software permite crear numerosos temporizadores
  • Baja sobrecarga

Arquitectura del ESP-Timer:

  • Un temporizador de hardware para todos los temporizadores por software
  • Cola de temporizadores ordenada por tiempo de activación
  • Las funciones callback se llaman en el contexto de la tarea del temporizador

Limitaciones:

  • Ligero jitter (±10-50 µs) bajo alta carga del sistema
  • La función callback no debe bloquear la ejecución por mucho tiempo


Gestión de interrupciones

Interrupciones de cruce por cero:

  • Se generan en el momento del cruce por cero
  • Se usa el tipo de interrupción GPIO_INTR_POSEDGE (solo flanco ascendente)
  • El manejador inicia los temporizadores para todos los canales activos de la fase correspondiente

Temporizadores:

  • El primer temporizador se inicia para el tiempo de retardo y activa la salida
  • El segundo temporizador se inicia para determinar la duración del pulso

Métodos de mejora de la estabilidad:

  • Los manejadores de interrupción se mantienen lo más cortos posible y se ubican en IRAM
  • Las secciones críticas protegen los datos compartidos
  • Cálculos mínimos en los manejadores de interrupción

← Conexión de hardware | Contenido | Siguiente: Guía Arduino y ejemplos →