Pulsbreddsmodulering (PWM) är en teknik som varierar en pulsbredd samtidigt som vågfrekvensen hålls konstant. PWM-tekniken används främst för att styra ljusstyrkan på lysdioden, DC-motorns hastighet, styrning av en servomotor eller i andra fall där man måste generera en analog signal med hjälp av en digital källa. Vi förklarade PWM i detalj i föregående artikel.
I den här handledningen ska vi prata om PWM-stift (pulsbreddsmodulation) på ESP32-utvecklingskortet. Alla GPIO-stift på ESP32-utvecklingskortet (utom Power, GND, Tx, Rx och EN) kan användas för att få PWM-signalen. Som ett ESP32 PWM-exempel bygger vi en enkel krets som ändrar LED-ljusstyrkan enligt PWM-signaler.
Komponenter krävs
- ESP32
- LED
- 330 Ω motstånd
- 10k Pot
- Bakbord
PWM-generation
Innan vi förklarar PWM-generationen på ESP32, låt oss diskutera några termer associerade med PWM.
TON (On Time): Tiden när signalen är hög.
TOFF (avstängningstid): Varaktigheten av tiden när signalen är låg.
Period: Det är summan av PWM-signalens till- och fråntid.
TotalPeriod = T PÅ + T AV
Driftscykel: Andelen tid när signalen var hög under PWM-signalens period.
Driftscykel = T ON / T Totalt * 100
Till exempel om en puls med en total period på 10 ms förblir PÅ (hög) i 5 ms. Då kommer arbetscykeln att vara:
Duty Cycle = 5/10 * 100 = 50% Duty Cycle
Kretsen innehåller en enda lysdiod, ett motstånd och en 10K potentiometer. Den negativa stiftet på LED är ansluten till GND på ESP32 via ett 330 Ω motstånd. Du kan använda vilket motståndsvärde som helst mellan 230 Ω och 500 Ω. Anslut den LED-positiva stiftet till GPIO 16 och signalstiftet på potten till ADC1 (VP) -stiften på ESP32.
Kodförklaring för ESP32 PWM
Den fullständiga koden ges i slutet av sidan.
Den här koden kräver inget bibliotek, så starta din kod genom att definiera stiftet som lysdioden är ansluten till. I mitt fall använde jag GPIO 16 för att ansluta lysdioden.
const int ledPin = 16; // 16 motsvarar GPIO16
Därefter ställer du in PWM-signalegenskaperna i nästa rad. Jag ställer in PWM-frekvensen till 9000 och upplösningen till 10, du kan ändra den för att generera olika PWM-signaler. ESP32-kort stöder PWM-upplösning från 1 bit till 16 bitar. Du måste också välja en PWM-kanal. ESP32 har totalt 16 (0 till 15) PWM-kanaler.
const int freq = 9000; const int ledChannel = 0; const int upplösning = 10;
Nu inne i tomrummet setup () funktion, konfigurera LED PWM med de egenskaper som du som tidigare med hjälp av ledcSetup () funktion. I nästa rad definierar du GPIO-stiftet där lysdioden är ansluten. Den ledcAttachPin () funktion används för att definiera GPIO stiftet och den kanal som genererar signalen. I mitt fall använde jag ledPin som är GPIO 16 och ledChannel som motsvarar kanal 0.
ogiltig installation () {Serial.begin (9600); ledcSetup (ledChannel, freq, upplösning); ledcAttachPin (ledPin, ledChannel); }
I tomrumsslingan läser du den analoga stiftet där potten är ansluten och lagrar avläsningen i en variabel som kallas 'dutyCycle' . LED-ljusstyrkan ökar eller minskar beroende på potentiometerns rotation. Den ledcWrite () är mycket lik analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); fördröjning (15); }
Testa ESP32 PWM-signaler
För att testa ESP32 PWM-signaler, anslut LED och potentiometer enligt kretsschemat och ladda upp koden till din ESP32. Se till att du har valt rätt kort och COM-port. Vrid nu potentiometern för att öka eller minska LED-ljusstyrkan.
Komplett arbete visas i videon nedan. Kontrollera också andra ESP32-baserade projekt genom att följa länken.