Pins PWM en ESP32
La Junta ESP32 tiene 16 canales independientes que pueden generar señales PWM que tienen diferentes períodos de tiempo y ancho. 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.
Sin embargo, en la variante de 36 pines de la placa ESP32, los seis pines integrados SPI tampoco se recomienda usar como generadores de señal PWM.
Cómo usar pines PWM ESP32
PWM es una técnica para controlar la salida utilizando una señal de pulso digital variable. PWM ayuda a controlar la velocidad del motor o el brillo del LED. 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 definido Ciclo de trabajo Valor Se activa una señal en el pin PWM que cambia los estados de pin a bajo. A continuación, la señal del temporizador continúa contando hasta que logra el Período valor de registro. 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, se deben definir las siguientes cuatro características:
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 a continuación muestra la configuración de PIN para LED con ESP32.
PIN GPIO ESP32 | CONDUJO |
---|---|
GPIO 18 | +he |
Gnd | -he |
Código para control de brillo de LED único
Para programar una placa ESP32 con Micopython Open Thonny ide y cargar el siguiente código dado. Recuerde flashear la placa ESP32 con firmware de Micopython si lo usa por primera vez.
Desde el pin de importación de la máquina, PWM
Desde el tiempo de sueño
frecuencia = 5000
LED1 = PWM (PIN (18), frecuencia)
Mientras que es cierto:
para deber_cycle en el rango (0, 1024):
LED1.deber (deber_cycle)
dormir (0.005)
Código iniciado importando las clases requeridas.
Desde el pin de importación de la máquina, PWM
El CONDUJO El objeto se inicializa para la señal PWM.
LED = PWM (PIN (18), frecuencia)
Un objeto PWM necesita dos argumentos: uno es la frecuencia y otro es el ciclo de trabajo.
Frecuencia: El valor de frecuencia varía de 0 a 78125. Aquí utilizamos una frecuencia de 5 kHz para controlar el brillo del LED.
Ciclo de trabajo: Su valor varía de 0 y 1023. Aquí 1023 es igual al valor máximo que define 100% ciclo de trabajo y brillo total del LED y de manera similar en el lado opuesto, 0 corresponde a 0% El ciclo de trabajo significa que LED será completamente tenue.
Usando la función del ciclo de trabajo deber() Pasamos el ciclo de trabajo como argumento a esta función.
condujo.deber (deber_cycle)
Dentro de mientras bucle un para Se inicializa el bucle que incrementa el ciclo de trabajo cada vez que se ejecuta en 1 con un intervalo igual a 5 ms.
para deber_cycle en el rango (0, 1024):
condujo.deber (deber_cycle)
dormir (0.005)
El rango() la función se puede escribir como:
rango (comenzar, detener, paso)
Aquí comenzar Especifica el valor de inicio del ciclo de trabajo que es igual a 0. detener Explicando el valor que queremos detener el ciclo de trabajo. Aquí hemos usado el valor 1024 porque el valor máximo donde puede venir es 1023 y estamos incrementando 1 en este valor después de cada bucle.
El último paso describe el factor de incremento y, por defecto, es 1.
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 1024.
Ahora podemos ver que el LED es completamente tenue, lo que significa que el valor del ciclo de trabajo está en 0.
Controlar múltiples pines con la misma señal PWM
Podemos controlar múltiples pines con la misma señal PWM que se genera a partir de un solo canal PWM. Ahora modificaremos el ejemplo de LED único para controlar múltiples LED brillo.
Conecte tres LED en GPIO Pins 23, 18 y 15.
La mesa debajo nos da un diseño de pin para tres LED.
PIN GPIO ESP32 | CONDUJO |
---|---|
GPIO 23 | +He liderado 1 |
GPIO 18 | +He liderado 2 |
GPIO 15 | +He liderado 3 |
Gnd | LED Common GND |
Código para múltiples LED de control de brillo
Abierto Thonny ide y escriba el código en la ventana del editor. Después de eso, conecte la placa ESP32 y cárguela.
Desde el pin de importación de la máquina, PWM
Desde el tiempo de sueño
frecuencia = 5000
LED1 = PWM (PIN (18), frecuencia)
LED2 = PWM (PIN (23), frecuencia)
LED3 = PWM (PIN (15), frecuencia)
Mientras que es cierto:
para deber_cycle en el rango (0, 1024):
LED1.deber (deber_cycle)
LED2.deber (deber_cycle)
LED3.deber (deber_cycle)
dormir (0.005)
El código es similar al ejemplo anterior. Acabamos de agregar dos nuevos LED en GPIO PIN 23 y 15.
Se utiliza el mismo ciclo de trabajo y valor de frecuencia.
Producción
En la sección de salida podemos ver que los tres LED están a pleno brillo, lo que significa que todos están recibiendo el ciclo de trabajo con el valor 1024.
Ahora los tres LED son tenues, lo que significa que todos tienen el mismo ciclo de trabajo proveniente del mismo canal PWM que tiene valor del ciclo de trabajo 0.
Hemos controlado con éxito el brillo LED utilizando la señal PWM.
Conclusión
En esta guía, hemos discutido los pines PWM ESP32 y cómo se pueden usar para controlar dispositivos. También discutimos el código para controlar los LED individuales y múltiples utilizando el canal PWM. Usando esta guía, cualquier tipo de hardware se puede controlar con la ayuda de la señal PWM.