- Components necessaris
- Generació PWM
- Explicació del codi per a ESP32 PWM
- Prova dels senyals ESP32 PWM
La modulació d’amplada de pols (PWM) és una tècnica que varia l’amplada d’un pols mantenint constant la freqüència d’ona. La tècnica PWM s'utilitza principalment per controlar la brillantor del LED, la velocitat del motor de CC, controlar un servomotor, o en altres casos, on s'ha de generar un senyal analògic mitjançant una font digital. Vam explicar detalladament el PWM a l’article anterior.
En aquest tutorial, parlarem dels pins PWM (modulació d'amplada d'impuls) de la placa de desenvolupament ESP32. Tots els pins GPIO de la placa de desenvolupament ESP32 (excepte Power, GND, Tx, Rx i EN) es poden utilitzar per obtenir el senyal PWM. Com a exemple ESP32 PWM, crearem un circuit senzill que canviarà la brillantor del LED segons els senyals PWM.
Components necessaris
- ESP32
- LED
- Resistència de 330 Ω
- Pot de 10k
- Taula de pa
Generació PWM
Abans d’explicar la generació PWM a ESP32, parlem d’alguns termes associats a PWM.
TON (On Time): la durada del temps en què el senyal és alt.
TOFF (Off Time): la durada del temps en què el senyal és baix.
Període: és la suma del temps d’activació i de desconnexió del senyal PWM.
Període total = T ON + T OFF
Cicle de treball: percentatge de temps en què el senyal va ser alt durant el període del senyal PWM.
Cicle de treball = T ON / T Total * 100
Per exemple, si un pols amb un període total de 10 ms roman activat (alt) durant 5 ms. A continuació, el cicle de treball serà:
Cicle de treball = 5/10 * 100 = 50% Cicle de treball

El circuit conté un sol LED, una resistència i un potenciòmetre de 10K. El pin negatiu del LED està connectat al GND de l’ESP32 mitjançant una resistència de 330 Ω. Podeu utilitzar qualsevol valor de resistència entre 230 Ω i 500 Ω. Connecteu el pin positiu LED a GPIO 16 i el pin de senyal de Pot al pin ADC1 (VP) de ESP32.
Explicació del codi per a ESP32 PWM
El codi complet es dóna al final de la pàgina.
Aquest codi no requereix cap biblioteca, així que inicieu el codi definint el pin, al qual hi ha connectat el LED. En el meu cas, he utilitzat GPIO 16 per connectar el LED.
const int ledPin = 16; // 16 correspon a GPIO16
Després, configureu les propietats del senyal PWM a les següents línies. He establert la freqüència PWM a 9000 i la resolució a 10, la podeu canviar per generar diferents senyals PWM. Les plaques ESP32 admeten resolució PWM d’1 bit a 16 bits. També heu de triar un canal PWM. ESP32 té un total de 16 (0 a 15) canals PWM.
const int freq = 9000; const int ledChannel = 0; resolució int int = 10;
Ara dins de la funció void setup () , configureu el LED PWM amb les propietats que hàgiu definit anteriorment mitjançant la funció ledcSetup () . A la línia següent, definiu el pin GPIO on està connectat el LED. La funció ledcAttachPin () s’utilitza per definir el pin GPIO i el canal que genera el senyal. En el meu cas, he utilitzat el ledPin que és GPIO 16 i ledChannel que correspon al canal 0.
configuració nul·la () {Serial.begin (9600); ledcSetup (ledChannel, freq, resolució); ledcAttachPin (ledPin, ledChannel); }
Al bucle buit, llegiu el pin analògic on està connectat el Pot i emmagatzemeu la lectura en una variable anomenada "dutyCycle" . La brillantor del LED augmentarà o disminuirà segons la rotació del potenciòmetre. El ledcWrite () és molt similar a analogWrite ().
bucle buit () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); retard (15); }
Prova dels senyals ESP32 PWM
Per provar els senyals ESP32 PWM, connecteu el LED i el potenciòmetre segons el diagrama del circuit i pengeu el codi al vostre ESP32. Assegureu-vos que teniu la placa i el port COM seleccionats. Ara gireu el potenciòmetre per augmentar o disminuir la brillantor del LED.

El vídeo complet es mostra a continuació. A més, consulteu altres projectes basats en ESP32 seguint l'enllaç.
