Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción
El controlador LED_PWM está diseñado principalmente para controlar la
intensidad de los LED, aunque puede usarse también para generar señales
PWM para otros fines. Cuenta con 16 canales que pueden generar formas de
onda independientes que se pueden usar para controlar dispositivos LED
RGB. Para una mayor flexibilidad, tanto los canales de alta velocidad como
los canales de baja velocidad se pueden manejar desde uno de los cuatro
temporizadores de alta velocidad / baja velocidad. El controlador PWM
también tiene la capacidad de aumentar o disminuir automáticamente el
ciclo de trabajo gradualmente, permitiendo desvanecimientos sin ninguna
interferencia del procesador. Para aumentar la resolución, el controlador
LED_PWM también puede oscilar entre dos valores, cuando un se configura el
valor fraccional de PWM.
Arquitectura del controlador
El controlador LED_PWM tiene ocho generadores PWM de alta velocidad y ocho
de baja velocidad. En este documento,se denominará hschn y lschn,
respectivamente. Estos canales pueden manejarse desde cuatro
temporizadores que serán indicados por h_timerx y l_timerx.
La figura siguiente muestra la arquitectura del controlador LED_PWM. Como
se puede ver en la misma, el controlador LED_PWM contiene ocho canales de
alta velocidad y ocho de baja velocidad. Hay cuatro módulos de reloj de
alta velocidad para los canales de alta velocidad, de los cuales se puede
seleccionar un h_timerx. También hay cuatro relojes de baja velocidad
para los canales de baja velocidad, de los cuales se puede seleccionar un
l_timerx:
1
Temporizadores (Timers)
Un temporizador de alta velocidad tiene un multiplexor para seleccionar
una de las dos fuentes de reloj: REF_TICK o APB_CLK.
El reloj de entrada es dividido por un primer divisor, el cual reduce su
frecuencia. El factor de división se especifica mediante el registro
LEDC_CLK_DIV_NUM_HSTIMERx el cual esta constituido por un número de punto
fijo: los 10 bits más altos representan la parte entera denominada “A”,
mientras que los ocho bits de menor peso contienen la porción fraccionaria
denominada “B”. El factor de división final es el siguiente:
2
Los temporizadores de baja velocidad l_timerx del canal de baja velocidad
difieren de los temporizadores de alta velocidad h_timerx en dos aspectos:
1. Cuando la fuente del reloj del temporizador de alta velocidad puede
sincronizarse desde REF_TICK o APB_CLK, la velocidad baja los
temporizadores provienen de REF_TICK o SLOW_CLOCK. La fuente
SLOW_CLOCK puede ser APB_CLK (80 MHz) u 8 MHz, y se puede seleccionar
usando LEDC_APB_CLK_SEL.
CANALES
Un canal toma el valor de 20 bits del contador del temporizador de alta
velocidad seleccionado y lo compara con un conjunto de dos valores para
configurar la salida del canal.
El primer valor con el que se compara es el contenido del registro
LEDC_HPOINT_HSCHn, si estos dos coinciden, la salida se enclavará
poniéndose en 1.
El segundo valor es la suma de LEDC_HPOINT_HSCHn y LEDC_DUTY_HSCHn. Cuando
se alcanza este valor, la salida se pone en 0.
Al usar estos dos valores, se puede establecer la fase relativa y el ciclo
de trabajo de la salida PWM. En la siguiente figura se ilustra el
funcionamiento:
Notas
• Cuando LEDC está en modo de desvanecimiento, configure el segundo
desvanecimiento solo después de LEDC_DUTY_CHNG_END_HSCHn o
LEDC_DUTY_CHNG_END_LSCHn, lo que genera una interrupción.
Interrupciones
• LEDC_DUTY_CHNG_END_LSCHn_INT: se activa cuando finaliza el
desvanecimiento en un canal de baja velocidad.
• LEDC_DUTY_CHNG_END_HSCHn_INT: se activa cuando finaliza el
desvanecimiento en un canal de alta velocidad.
• LEDC_HS_TIMERx_OVF_INT: se activa cuando un temporizador de alta
velocidad alcanza su valor de cuenta máxima.
• LEDC_LS_TIMERx_OVF_INT: se activa cuando un temporizador de baja
velocidad alcanza su valor de cuenta máxima.
SOPORTE ARDUINO
Para controlar y configurar el PWM LED, el ESP32 cuenta con las siguientes
funciones:
4
• ledcRead(channel):Esta es una función que nos permite leer el valor
del dutyclicle cargado en un canal especificado.