PWM -pinner i ESP32
ESP32 -styret har 16 uavhengige kanaler som kan generere PWM -signaler med forskjellige tidsperioder og bredde. Nesten alle GPIO -pinnene som kan fungere som utgang, kan brukes til å generere et PWM -signal. GPIO -pinner 34,35,36,39 kan ikke brukes som PWM -pinner som de bare er inngående pinner.
Imidlertid anbefales heller ikke i 36 PIN -varianten av ESP32 -brettet.
Hvordan bruke ESP32 PWM -pinner
PWM er en teknikk for å kontrollere utgangen ved hjelp av et variabelt digitalt pulssignal. PWM hjelper med å kontrollere motorhastigheten eller LED -lysstyrken. Hovedkomponent i å generere PWM -signaler er den interne tidtaksmodulen. Timer styres av den interne mikrokontrollerklokke kilden.
Når tiden starter, sammenlignes verdien med to komparatorer, og når den når den definert Duty Cycle Verdi et signal ved PWM PIN utløses som endrer pin -tilstander til lave. Deretter fortsetter timersignalet å telle til det oppnår Periode Registrerverdi. Nå vil komparatoren igjen generere en ny trigger og PWM -pins tilstandsskifte fra lav til høy.
For å generere et PWM -signal ved GPIO -pinner, må følgende fire egenskaper defineres:
Her er noen punkter som man må huske på mens du konfigurerer ESP32 PWM -signal:
Kontrollerende LED -lysstyrke ved bruk av PWM -signal i ESP32
Nå vil vi kontrollere LED -lysstyrke ved hjelp av et PWM -signal. Connect LED med ESP32 GPIO PIN 18.
Under tabellen viser PIN -konfigurasjon for LED med ESP32.
ESP32 GPIO PIN | Led |
---|---|
GPIO 18 | +Jeg er |
GND | -Jeg er |
Kode for enkelt LED lysstyrke kontroll
Å programmere et ESP32 -brett med Micropython åpen Thonny Ide og last opp nedenfor gitt kode. Husk å blinke ESP32 -brett med micropython firmware hvis du bruker for første gang.
Fra maskinimportnål, PWM
Fra tid importer søvn
frekvens = 5000
LED1 = PWM (PIN (18), frekvens)
Mens sant:
For Duty_cycle in Range (0, 1024):
LED1.Duty (Duty_cycle)
søvn (0.005)
Kode startet med å importere de nødvendige klassene.
Fra maskinimportnål, PWM
De Led objektet initialiseres for PWM -signalet.
LED = PWM (PIN (18), frekvens)
Et PWM -objekt trenger to argumenter: Den ene er frekvens og den andre er pliktsyklus.
Frekvens: Frekvensverdien varierer fra 0 til 78125. Her brukte vi en frekvens på 5 kHz for å kontrollere LED -lysstyrken.
Pliktsyklus: Verdien varierer fra 0 og 1023. Her 1023 er lik maksimal verdi som definerer 100% Duty Cycle og full lysstyrke av LED og på samme måte på motsatt side, 0 tilsvarer 0% Duty Cycle Means LED vil være helt svak.
Bruke pliktsyklusfunksjonen plikt() Vi passerer pliktsyklusen som et argument til denne funksjonen.
Led.Duty (Duty_cycle)
Inne i samtidig som sløyfe a til Loop initialiseres som trinn på pliktsyklusen hver gang den går med 1 med et intervall lik 5 ms.
For Duty_cycle in Range (0, 1024):
Led.Duty (Duty_cycle)
søvn (0.005)
De område() Funksjon kan skrives som:
rekkevidde (start, stopp, trinn)
Her start Angir startverdien til pliktsyklus som er lik 0. Stoppe Forklar verdien vi ønsker å stoppe pliktsyklusen. Her har vi brukt verdien 1024 fordi den maksimale verdien der den kan komme er 1023 og vi øker 1 i denne verdien etter hver loop.
Den siste steg beskriver den økende faktoren og som standard er den 1.
Produksjon
På maskinvare kan vi se lysstyrken til LED på sin fulle, dette betyr at pliktsyklus -signalet er på 1024.
Nå kan vi se at LED er helt svak, noe som betyr at pliktsyklusverdien er 0.
Kontrollere flere pinner med samme PWM -signal
Vi kan kontrollere flere pinner med samme PWM -signal som genereres fra en enkelt PWM -kanal. Nå vil vi endre det enkle LED -eksemplet for å kontrollere flere lysstyrker.
Koble tre lysdioder ved GPIO -pinner 23, 18 og 15.
Under tabellen gir oss pin -layout for tre lysdioder.
ESP32 GPIO PIN | Led |
---|---|
GPIO 23 | +Jeg har ledet 1 |
GPIO 18 | +Jeg har ledet 2 |
GPIO 15 | +Jeg har ledet 3 |
GND | LED Common GND |
Kode for flere lysdioder Lysstyrkekontroll
Åpen Thonny Ide og skriv koden i redigeringsvinduet. Etter det, koble til ESP32 -brettet og last det opp.
Fra maskinimportnål, PWM
Fra tid importer søvn
frekvens = 5000
LED1 = PWM (PIN (18), frekvens)
LED2 = PWM (PIN (23), frekvens)
LED3 = PWM (PIN (15), frekvens)
Mens sant:
For Duty_cycle in Range (0, 1024):
LED1.Duty (Duty_cycle)
LED2.Duty (Duty_cycle)
LED3.Duty (Duty_cycle)
søvn (0.005)
Kode ligner på forrige eksempel. Vi har nettopp lagt til to nye lysdioder på GPIO Pin 23 og 15.
Samme pliktsyklus og frekvensverdi brukes.
Produksjon
I utgangsseksjonen kan vi se at alle tre lysdioder er i full lysstyrke, noe som betyr at alle mottar pliktsyklus med verdi 1024.
Nå er alle tre lysdioder, noe som betyr at alle av dem har den samme pliktsyklusen som kommer fra den samme PWM -kanalen som har pliktsyklusverdi 0.
Vi har kontrollert LED -lysstyrke ved hjelp av PWM -signalet.
Konklusjon
I denne guiden har vi diskutert ESP32 PWM -pinner og hvordan de kan brukes til å kontrollere enheter. Vi diskuterte også koden for å kontrollere enkelt og flere lysdioder ved hjelp av PWM -kanalen. Bruke denne guiden Enhver type maskinvare kan kontrolleres ved hjelp av PWM -signal.