PWM med esptop 10 ved bruk av Arduino IDE

PWM med esptop 10 ved bruk av Arduino IDE

Pulsbreddemodulasjon eller PWM er en teknikk som brukes til å hugge det digitale signalet for å få variabel utgang. De fleste av mikrokontrollerne har en intern klokke som brukes til å generere et PWM -signal. I denne opplæringen vil vi dekke PWM -pinner og hvordan de kan konfigureres i ESP32 ved hjelp av Arduino IDE.

PWM -pinner i ESP32

ESP32 -styret har 16 uavhengige kanaler som kan generere PWM -signaler. 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 inngangspinner.

I 36 PINS -varianten av ESP32 -brettet.

Hvordan bruke ESP32 PWM -pinner

PWM er en teknikk for å kontrollere enheten ved hjelp av et variabelt digitalt pulssignal. PWM hjelper med å kontrollere motorhastigheten. Hovedkomponent i å generere PWM -signaler er den interne tidtaksmodulen. Timer styres av den interne mikrokontrollerklokke kilden.

Når tiden starter, blir verdien sammenlignet med to komparatorer, og når den når den definerte pliktsyklusverdien, utløses et signal ved PWM -pin. Deretter fortsetter timersignalet å telle til det oppnår periodegisterverdien. 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 som følger fire egenskaper, må du defineres:

  • PWM -frekvens: Hyppighet for PWM er motsatt av tiden enhver verdi kan settes avhengig av applikasjon.
  • PWM -oppløsning: Oppløsning definerer antall diskrete nivåer av pliktsyklus som kan kontrolleres.
  • Pliktsyklus: Tiden der et PWM -signal er i aktiv tilstand.
  • GPIO PIN: PIN -antall ESP32 der PWM -signalet skal leses. (GPIO 34,35,36,39 kan ikke brukes)

Konfigurer PWM -kanaler av ESP32

Konfigurere PWM -kanalen i ESP32 ligner på AnalogWrite () Funksjon i Arduino -programmering. Men her vil vi bruke et dedikert sett med Ledcsetup () Funksjoner for konfigurering av PWM i ESP32. Stort sett alt som trengs for et PWM -signal som kanal, Vedtak og Frekvens kan enkelt være konfigurerbar av brukeren.

Følgende er Ledcsetup () Funksjon som brukes til å konfigurere ESP32 PWM -signal:

LEDCSetup (kanal, frekvens, oppløsning_bits);

Denne funksjonen inneholder tre argumenter.

Kanal: Som ESP32 har 16 PWM -kanaler slik at kanal argument inne i Ledcsetup () Funksjon kan ta hvilken som helst verdi mellom 0 og 15.

Frekvens: Neste i Ledcsetup () Funksjon Vi har frekvensargumenter som kan stilles i henhold til krav som 1 kHz, 5 kHz, 8 kHz og 10 kHz. For eksempel kan maksimal PWM -frekvens med 10 bits oppløsning i PWM -modulen settes 78.125kHz.

Vedtak: PWM-signaloppløsning kan konfigureres mellom 1 bit til 16-bits oppløsning.

I ESP32 er både PWM -frekvens og oppløsning uavhengig av klokkekilde og omvendt proporsjonal.

Det siste trinnet er å definere en pin for PWM. Ikke tilordne allerede brukte pinner for kommunikasjon som GPIO -pinner som UART, SPI, etc.

LEDC (LED PWM -kontroller) er først og fremst designet for ESP32 PWM LED -kontrollsignaler. Imidlertid kan PWM -signaler generert her også brukes til andre applikasjoner.

Her er noen punkter som man må huske på mens du konfigurerer ESP32 PWM -signal:

  • Totalt 16 uavhengige PWM -kanaler er i ESP32 som er delt inn i to grupper som hver gruppe har 8 kanaler.
  • 8 PWM -kanaler har høy hastighet mens de andre 8 kanalene er lave.
  • PWM-oppløsning kan settes mellom 1-bit og 16-bits.
  • PWM -frekvens er avhengig av oppløsningen av PWM.
  • Driftssyklus kan automatisk økes eller reduseres uten prosessorinngrep.

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.

Tabellen viser PIN -tilkoblingen for lysdioder med ESP32.

ESP32 GPIO PIN Led
GPIO 18 +Jeg er
GND -Jeg er

Kode for LED -lysstyrkekontroll

Koden gitt nedenfor vil gjøre at LED falmer inn og ut:

const int LED = 18; /*Tilsvarer GPIO PIN 18*/
const int freq = 5000; /*PWM signalfrekvens*/
const int led_channel = 0;
const int oppløsning = 8; /*PWM -oppløsning*/
void setup ()
LEDCSETUP (LED_CHANNEL, FREQ, RESOLUTION); /*PWM -signal definert*/
Ledcattachpin (LED, LED_CHANNEL);

void loop ()
for (int dutycycle = 0; dutycycle = 0; dutycycle-) /*LED lysstyrke reduseres* /
LEDCWRITE (LED_CHANNEL, DUTYCYCLE);
forsinkelse (15);

Kode startet med å definere pin -nummeret for LED som er GPIO 18. Neste angir vi PWM -signalegenskapene som er frekvens, PWM -signaloppløsning og LED -kanal.

Neste ved hjelp av Ledcsetup () funksjon Vi konfigurerer PWM -signalet. Denne funksjonen godtar de tre argumentene Frekvens, Vedtak og LED -kanal Vi har definert tidligere.

I sløyfedelen varierer vi pliktsyklusen mellom 0 og 255 for å øke lysstyrken til LED. Etter det igjen ved bruk av for -loopen reduserer LED -lysstyrken fra 255 til 0.

Pulsbreddemodulasjon gjør et digitalt signal til et analogt signal ved å endre tidspunktet for hvor lenge det holder seg av og på. Begrepet Duty Cycle brukes til å beskrive prosentandelen eller forholdet mellom hvor lenge den holder seg sammenlignet med når den slår seg av.

Her har vi tatt en 8-biters kanal så i henhold til beregninger:

2^8 = 256 som inneholder verdier fra 0 til 255. I eksemplet gitt ovenfor er pliktsyklusen lik 100%. For 20% pliktsyklus eller annen verdi kan vi beregne den ved hjelp av beregningene nedenfor:

Kanaloppløsning = 8 bit

For 100% pliktsyklus = 0 til 255 (2^8 = 256 verdier)

For 20% pliktsyklus = 20% av 256 er 51

Så en 20% pliktsyklus med 8-bits oppløsning vil like verdier av område 0 til 51.

Hvor 0 = 0% og 51 = 100% av 8-bits oppløsningssyklus.

Produksjon

På maskinvare kan vi se lysstyrken til LED på sin fulle, dette betyr at pliktsyklus -signalet er på 255.

Nå kan vi se at LED er helt svak, noe som betyr at pliktsyklusverdien er 0.

Vi har kontrollert LED -lysstyrke ved hjelp av PWM -signalet.

Konklusjon

Her i denne artikkelen har vi diskutert ESP32 PWM -pinner og hvordan de kan brukes til å kontrollere flere periferiutstyr som LED eller Motor. Vi diskuterte også koden for å kontrollere enkelt og flere lysdioder ved hjelp av samme PWM -kanal. Bruke denne guiden Enhver type maskinvare kan kontrolleres ved hjelp av PWM -signal.