Pulsbreddemodulering (PWM) er en teknikk som varierer bredden på en puls mens den holder bølgefrekvensen konstant. PWM-teknikken ble hovedsakelig brukt til å kontrollere lysstyrken på LED-en, hastigheten på DC-motoren, kontrollere en servomotor, eller i andre tilfeller, der man må generere et analogt signal ved hjelp av en digital kilde. Vi forklarte PWM i detalj i forrige artikkel.
I denne opplæringen skal vi snakke om PWM-pinner (pulsbreddemodulering) pinner på ESP32-utviklingskortet. Alle GPIO-pinnene på ESP32-utviklingskortet (unntatt strøm, GND, Tx, Rx og EN) kan brukes til å få PWM-signalet. Som et ESP32 PWM-eksempel bygger vi en enkel krets som endrer LED-lysstyrken i henhold til PWM-signaler.
Komponenter kreves
- ESP32
- LED
- 330 Ω motstand
- 10k Pot
- Brettbrett
PWM-generasjon
Før vi forklarer PWM-generasjonen på ESP32, la oss diskutere noen begreper knyttet til PWM.
TON (On Time): Varigheten av tiden når signalet er høyt.
TOFF (Off Time): Varigheten av tiden når signalet er lavt.
Periode: Det er summen av tid og tid for PWM-signalet.
TotalPeriod = T PÅ + T AV
Driftssyklus: Andelen tid da signalet var høyt i løpet av PWM-signalet.
Driftssyklus = T ON / T Totalt * 100
For eksempel hvis en puls med en total periode på 10 ms forblir PÅ (høy) i 5 ms. Deretter vil driftssyklusen være:
Driftssyklus = 5/10 * 100 = 50% driftssyklus
Kretsen inneholder en enkelt LED, en motstand og et 10K potensiometer. Den negative pinnen til LED er koblet til GND på ESP32 gjennom en 330 Ω motstand. Du kan bruke hvilken som helst motstandsverdi mellom 230 Ω og 500 Ω. Koble den LED-positive pinnen til GPIO 16 og signalpinnen på potten til ADC1 (VP) pinnen på ESP32.
Kode Forklaring for ESP32 PWM
Den komplette koden er gitt på slutten av siden.
Denne koden krever ikke noe bibliotek, så start koden din ved å definere pin, som LED er festet til. I mitt tilfelle brukte jeg GPIO 16 for å koble til LED-lampen.
const int ledPin = 16; // 16 tilsvarer GPIO16
Deretter setter du PWM-signalegenskapene i de neste linjene. Jeg satte PWM-frekvensen til 9000, og oppløsningen til 10, du kan endre den for å generere forskjellige PWM-signaler. ESP32-kort støtter PWM-oppløsning fra 1 bit til 16 bits. Du må også velge en PWM-kanal. ESP32 har totalt 16 (0 til 15) PWM-kanaler.
const int freq = 9000; const int ledChannel = 0; const int oppløsning = 10;
Nå inne i tomrumsoppsettet () -funksjonen, konfigurer du LED PWM med egenskapene du har angitt tidligere ved å bruke funksjonen ledcSetup () . I neste linje definerer du GPIO-pinnen der LED-en er koblet til. Den ledcAttachPin () funksjonen brukes for å definere den GPIO tappen og den kanalen som genererer signalet. I mitt tilfelle brukte jeg ledPin som er GPIO 16 og ledChannel som tilsvarer kanal 0.
ugyldig oppsett () {Serial.begin (9600); ledcSetup (ledChannel, freq, oppløsning); ledcAttachPin (ledPin, ledChannel); }
I den ugyldige sløyfen, les den analoge pinnen der potten er koblet til, og lagre avlesningen i en variabel kalt 'dutyCycle' . LED-lysstyrken øker eller reduseres i henhold til potensiometerets rotasjon. Den ledcWrite () er svært lik analog ().
ugyldig sløyfe () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); forsinkelse (15); }
Testing av ESP32 PWM-signaler
For å teste ESP32 PWM-signalene, koble LED og potensiometer i henhold til kretsskjemaet, og last opp koden til ESP32. Forsikre deg om at du har valgt riktig kort og COM-port. Drei potensiometeret for å øke eller redusere LED-lysstyrken.
Fullstendig arbeid er vist i videoen nedenfor. Sjekk også andre ESP32-baserte prosjekter ved å følge lenken.