Pulsbreddemodulation (PWM) er en teknik, der varierer bredden på en puls, samtidig med at bølgefrekvensen holdes konstant. PWM-teknikken bruges hovedsageligt til at kontrollere lysstyrken på LED'en, hastigheden på DC-motoren, styre en servomotor eller i andre tilfælde, hvor der skal genereres et analogt signal ved hjælp af en digital kilde. Vi forklarede PWM i detaljer i den foregående artikel.
I denne vejledning skal vi tale om PWM-stifter (pulsbreddemodulation) på ESP32-udviklingskortet. Alle GPIO-ben på ESP32-udviklingskortet (undtagen Power, GND, Tx, Rx og EN) kan bruges til at få PWM-signalet. Som et ESP32 PWM-eksempel bygger vi et simpelt kredsløb, der ændrer LED-lysstyrken i henhold til PWM-signaler.
Komponenter, der kræves
- ESP32
- LED
- 330 Ω modstand
- 10k pot
- Brødbræt
PWM-generation
Før vi forklarer PWM-generationen på ESP32, lad os diskutere nogle udtryk, der er forbundet med PWM.
TON (On Time): Varigheden af tiden, når signalet er højt.
TOFF (Fra tid): Varigheden af tiden, når signalet er lavt.
Periode: Det er summen af PWM-signalets til- og frakoblingstid.
TotalPeriod = T ON + T OFF
Arbejdscyklus: Procentdelen af tid, hvor signalet var højt i PWM-signalets periode.
Arbejdscyklus = T ON / T I alt * 100
For eksempel, hvis en puls med en samlet periode på 10 ms forbliver ON (høj) i 5 ms. Derefter vil arbejdscyklussen være:
Duty Cycle = 5/10 * 100 = 50% Duty Cycle
Kredsløbet indeholder en enkelt LED, en modstand og et 10K potentiometer. Den negative pin af LED er forbundet til GND af ESP32 gennem en 330 Ω modstand. Du kan bruge en hvilken som helst modstandsværdi mellem 230 Ω og 500 Ω. Tilslut LED-positiv pin til GPIO 16 og signal pin af Pot til ADC1 (VP) pin på ESP32.
Kode Forklaring til ESP32 PWM
Den komplette kode er angivet i slutningen af siden.
Denne kode kræver ikke noget bibliotek, så start din kode ved at definere stiften, som LED'en er knyttet til. I mit tilfælde brugte jeg GPIO 16 til at forbinde lysdioden.
const int ledPin = 16; // 16 svarer til GPIO16
Derefter skal du indstille PWM-signalegenskaberne i de næste linjer. Jeg indstiller PWM-frekvensen til 9000, og opløsningen til 10, du kan ændre den for at generere forskellige PWM-signaler. ESP32-kort understøtter PWM-opløsning fra 1 bit til 16 bit. Du skal også vælge en PWM-kanal. ESP32 har i alt 16 (0 til 15) PWM-kanaler.
const int freq = 9000; const int ledChannel = 0; const int opløsning = 10;
Konfigurer nu LED PWM inden for funktionen ugyldig opsætning () med de egenskaber, du har indstillet tidligere ved hjælp af funktionen ledcSetup () . I den næste linje skal du definere GPIO-stiften, hvor LED'en er tilsluttet. Den ledcAttachPin () funktion anvendes til at definere GPIO pin og kanalen, der genererer signalet. I mit tilfælde brugte jeg ledPin, der er GPIO 16 og ledChannel, der svarer til kanal 0.
ugyldig opsætning () {Serial.begin (9600); ledcSetup (ledChannel, freq, opløsning); ledcAttachPin (ledPin, ledChannel); }
I tomrumsløbet skal du læse den analoge pin, hvor potten er tilsluttet, og gemme aflæsningen i en variabel kaldet 'dutyCycle' . LED-lysstyrken øges eller mindskes i henhold til potentiometerets rotation. Den ledcWrite () er meget lig analogWrite ().
ugyldig sløjfe () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); forsinkelse (15); }
Test af ESP32 PWM-signaler
For at teste ESP32 PWM-signaler skal du tilslutte LED og potentiometer ifølge kredsløbsdiagrammet og uploade koden til din ESP32. Sørg for, at du har valgt det rigtige kort og COM-port. Drej nu potentiometeret for at øge eller mindske LED-lysstyrken.
Komplet arbejde vises i videoen nedenfor. Tjek også andre ESP32-baserede projekter ved at følge linket.