La modulación de ancho de pulso o PWM es una técnica utilizada para cortar la señal digital para obtener una salida variable. La mayoría de los microcontroladores tienen un reloj interno que se utiliza para generar una señal PWM. En este tutorial cubriremos PWM Pins y cómo se pueden configurar en ESP32 utilizando el Arduino IDE.
Pins PWM en ESP32
La Junta ESP32 tiene 16 canales independientes que pueden generar señales PWM. Casi todos los pines GPIO que pueden actuar como salida se pueden usar para generar una señal PWM. Los pasadores GPIO 34,35,36,39 no se pueden usar como pines PWM, ya que son solo pines de entrada.
En la variante de 36 pines de la placa ESP32, los seis pines integrados SPI que también no pueden usarse como generadores de señal PWM.
Cómo usar pines PWM ESP32
PWM es una técnica para controlar el dispositivo utilizando una señal de pulso digital variable. PWM ayuda a controlar la velocidad del motor. El componente principal en la generación de señales PWM es el módulo de temporizador interno. El temporizador está controlado por la fuente interna del reloj del microcontrolador.
A medida que comienza el tiempo, su valor se compara con dos comparadores y una vez que alcanza el valor del ciclo de trabajo definido, se activa una señal en el pin PWM que cambia los estados de pin a bajos. A continuación, la señal del temporizador continúa contando hasta que logra el valor de registro del período. Ahora, el comparador, el comparador generará un nuevo cambio de estado de disparo y PWM de bajo a alto.
Para generar una señal PWM en los pines GPIO después de cuatro propiedades, es necesario definir:
Configurar canales PWM de ESP32
Configurar el canal PWM en ESP32 es similar al Analogwrite () función en la programación Arduino. Pero aquí usaremos un conjunto dedicado de LEDCSETUP () Funciones para configurar PWM en ESP32. Casi todo lo necesario para una señal PWM como canal, resolución y frecuencia puede ser fácilmente configurable por el usuario.
El siguiente es el LEDCSETUP () función utilizada para configurar la señal PWM ESP32:
LedCsetup (canal, frecuencia, resolución_bits);
Esta función contiene tres argumentos.
Canal: Como ESP32 tiene 16 canales PWM, así canal argumento dentro del LEDCSETUP () la función puede tomar cualquier valor entre 0 y 15.
Frecuencia: Siguiente en el LEDCSETUP () Función Tenemos argumentos de frecuencia que se pueden establecer de acuerdo con requisitos como 1 kHz, 5 kHz, 8 kHz y 10 kHz. Por ejemplo, la frecuencia PWM máxima con una resolución de 10 bits en el módulo PWM se puede establecer es 78.125 kHz.
Resolución: La resolución de la señal PWM se puede configurar entre 1 bit y una resolución de 16 bits.
En ESP32, tanto la frecuencia y la resolución PWM son independientes de la fuente del reloj e inversamente proporcional.
El paso final es definir un PIN para PWM. No asigne pines ya usados para la comunicación, como pines GPIO como UART, SPI, etc.
El LEDC (controlador PWM LED) está diseñado principalmente para señales de control LED PWM ESP32. Sin embargo, las señales PWM generadas aquí también se pueden usar para otras aplicaciones.
Aquí hay algunos puntos que uno debe tener en cuenta al configurar la señal ESP32 PWM:
Controlar el brillo del LED usando la señal PWM en ESP32
Ahora controlaremos el brillo del LED usando una señal PWM. Conecte LED con ESP32 GPIO PIN 18.
La tabla muestra la conexión PIN para LED con ESP32.
PIN GPIO ESP32 | CONDUJO |
GPIO 18 | +he |
Gnd | -he |
Código para el control de brillo LED
El código que se indica a continuación hará que el LED se desvanezca dentro y fuera:
const int led = 18; /*Es igual al PIN GPIO 18*/
const int freq = 5000; /*Frecuencia de señal PWM*/
const int led_channel = 0;
const int resolución = 8; /*Resolución PWM*/
setup () void
LEDCSETUP (LED_CHANNEL, FREQ, Resolución); /*Señal PWM definida*/
ledcattachpin (led, led_channel);
bucle void ()
para (int dutycycle = 0; dutycycle = 0; Dutycycle-) /*LED brillo disminuye* /
LEDCWrite (LED_Channel, DutyCycle);
retraso (15);
Código iniciado definiendo el número PIN para LED que es GPIO 18. A continuación, establecemos las propiedades de la señal PWM que son frecuencia, resolución de señal PWM y canal LED.
A continuación usando el LEDCSETUP () función configuramos la señal PWM. Esta función acepta los tres argumentos frecuencia, resolución y Canal LED Hemos definido antes.
En la parte del bucle variamos el ciclo de trabajo entre 0 y 255 para aumentar el brillo del LED. Después de eso nuevamente, usar el bucle for disminuye el brillo del LED de 255 a 0.
La modulación de ancho de pulso convierte una señal digital en una señal analógica cambiando el momento de cuánto tiempo permanece encendido y apagado. El término Ciclo de trabajo se usa para describir el porcentaje o la relación de cuánto tiempo permanece en comparación con cuando se apaga.
Aquí hemos tomado un canal de 8 bits, así que según los cálculos:
2^8 = 256 que contienen valores de 0 a 255. En el ejemplo dado anteriormente, el ciclo de trabajo es igual al 100%. Para el ciclo de trabajo del 20% o cualquier otro valor, podemos calcularlo utilizando los siguientes cálculos:
Resolución de canal = 8 bits
Para el 100% del ciclo de trabajo = 0 a 255 (2^8 = 256 valores)
Para el 20% del ciclo de trabajo = 20% de 256 es 51
Por lo tanto, un ciclo de trabajo del 20% de la resolución de 8 bits es igual a los valores del rango 0 a 51.
Donde 0 = 0% y 51 = 100% del ciclo de trabajo de resolución de 8 bits.
Producción
En el hardware podemos ver el brillo del LED en su totalidad, esto significa que la señal del ciclo de trabajo está en 255.
Ahora podemos ver que el LED es completamente tenue, lo que significa que el valor del ciclo de trabajo está en 0.
Hemos controlado con éxito el brillo LED utilizando la señal PWM.
Conclusión
Aquí en este artículo, hemos discutido los pines PWM ESP32 y cómo se pueden usar para controlar múltiples periféricos como LED o motor. También discutimos el código para controlar los LED individuales y múltiples utilizando el mismo canal PWM. Usando esta guía, cualquier tipo de hardware se puede controlar con la ayuda de la señal PWM.