- Componentes requeridos
- Generación PWM
- Explicación del código para ESP32 PWM
- Prueba de las señales PWM de ESP32
La modulación por ancho de pulso (PWM) es una técnica que varía el ancho de un pulso mientras mantiene constante la frecuencia de onda. La técnica PWM se utiliza principalmente para controlar el brillo del LED, la velocidad del motor de CC, controlar un servomotor, o en otros casos, donde hay que generar una señal analógica utilizando una fuente digital. Explicamos el PWM en detalle en el artículo anterior.
En este tutorial, vamos a hablar sobre los pines PWM (modulación de ancho de pulso) de la placa de desarrollo ESP32. Todos los pines GPIO de la placa de desarrollo ESP32 (excepto Power, GND, Tx, Rx y EN) se pueden usar para obtener la señal PWM. Como ejemplo de ESP32 PWM, construiremos un circuito simple que cambia el brillo del LED de acuerdo con las señales PWM.
Componentes requeridos
- ESP32
- LED
- Resistencia de 330 Ω
- Olla de 10k
- Tablero de circuitos
Generación PWM
Antes de explicar la generación PWM en ESP32, analicemos algunos términos asociados con PWM.
TON (On Time): la duración del tiempo en que la señal es alta.
TOFF (Off Time): la duración del tiempo en que la señal es baja.
Periodo: Es la suma del tiempo de activación y desactivación de la señal PWM.
TotalPeriod = T ON + T OFF
Ciclo de trabajo: el porcentaje de tiempo en que la señal fue alta durante el período de la señal PWM.
Ciclo de trabajo = T ON / T Total * 100
Por ejemplo, si un pulso con un período total de 10 ms permanece encendido (alto) durante 5 ms. Entonces, el ciclo de trabajo será:
Ciclo de trabajo = 5/10 * 100 = 50% del ciclo de trabajo
El circuito contiene un solo LED, una resistencia y un potenciómetro de 10K. El pin negativo del LED está conectado al GND del ESP32 a través de una resistencia de 330 Ω. Puede utilizar cualquier valor de resistencia entre 230 Ω y 500 Ω. Conecte el pin positivo del LED a GPIO 16 y el pin de señal de Pot al pin ADC1 (VP) de ESP32.
Explicación del código para ESP32 PWM
El código completo se proporciona al final de la página.
Este código no requiere ninguna biblioteca, así que comience su código definiendo el pin al que se adjunta el LED. En mi caso, utilicé GPIO 16 para conectar el LED.
const int ledPin = 16; // 16 corresponde a GPIO16
Después de eso, configure las propiedades de la señal PWM en las siguientes líneas. Configuré la frecuencia PWM en 9000 y la resolución en 10, puede cambiarla para generar diferentes señales PWM. Las placas ESP32 admiten una resolución PWM de 1 bit a 16 bits. También debe elegir un canal PWM. ESP32 tiene un total de 16 (0 a 15) canales PWM.
const int freq = 9000; const int ledChannel = 0; const int resolución = 10;
Ahora, dentro de la función void setup () , configure el LED PWM con las propiedades que estableció anteriormente utilizando la función ledcSetup () . En la siguiente línea, defina el pin GPIO donde está conectado el LED. La función ledcAttachPin () se utiliza para definir el pin GPIO y el canal que genera la señal. En mi caso utilicé el ledPin que es GPIO 16 y el ledChannel que corresponde al canal 0.
configuración vacía () {Serial.begin (9600); ledcSetup (ledChannel, freq, resolution); ledcAttachPin (ledPin, ledChannel); }
En el bucle vacío, lea el pin analógico donde está conectado el Pot y almacene la lectura en una variable llamada 'dutyCycle' . El brillo del LED aumentará o disminuirá según la rotación del potenciómetro. El ledcWrite () es muy similar a analogWrite ().
bucle vacío () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); retraso (15); }
Prueba de las señales PWM de ESP32
Para probar las señales PWM del ESP32, conecte el LED y el potenciómetro según el diagrama del circuito y cargue el código en su ESP32. Asegúrese de haber seleccionado la placa y el puerto COM correctos. Ahora gire el potenciómetro para aumentar o disminuir el brillo del LED.
El trabajo completo se muestra en el video que se muestra a continuación. Además, consulte otros proyectos basados en ESP32 siguiendo el enlace.