Pulzná šírková modulácia (PWM) je technika, ktorá mení šírku impulzu pri zachovaní konštantnej vlnovej frekvencie. Technika PWM sa používa hlavne na riadenie jasu LED, rýchlosti jednosmerného motora, riadenie servomotora alebo v iných prípadoch, keď je potrebné generovať analógový signál pomocou digitálneho zdroja. PWM sme si podrobne vysvetlili v predchádzajúcom článku.
V tomto výučbe si povieme o pinoch PWM (pulznej šírkovej modulácie) vývojovej dosky ESP32. Na získanie signálu PWM je možné použiť všetky piny GPIO vývojovej dosky ESP32 (okrem Power, GND, Tx, Rx a EN). Ako príklad ESP32 PWM zostavíme jednoduchý obvod, ktorý mení jas LED podľa signálov PWM.
Súčasti sú povinné
- ESP32
- LED
- Rezistor 330 Ω
- 10k hrniec
- Nepál
Generovanie PWM
Pred vysvetlením generácie PWM na ESP32 si povieme niečo o pojmoch spojených s PWM.
TON (On Time): Trvanie času, keď je signál vysoký.
TOFF (Off Time): Trvanie času, keď je signál slabý.
Obdobie: Je to súčet času zapnutia a vypnutia signálu PWM.
TotalPeriod = T ZAPNUTÉ + T VYPNUTÉ
Pracovný cyklus: Percento času, keď bol signál vysoký počas periódy signálu PWM.
Pracovný cyklus = T ON / T celkom * 100
Napríklad ak impulz s celkovou periódou 10 ms zostáva 5 ms ZAPNUTÝ (vysoký). Pracovný cyklus bude potom:
Pracovný cyklus = 5/10 * 100 = 50% pracovný cyklus
Obvod obsahuje jednu LED, odpor a 10K potenciometer. Záporný kolík LED je pripojený k GND ESP32 cez odpor 330 Ω. Môžete použiť ľubovoľnú hodnotu rezistora medzi 230 Ω a 500 Ω. Pripojte kladný kolík LED k GPIO 16 a signálny kolík Potu k kolíku ADC1 (VP) ESP32.
Vysvetlenie kódu pre ESP32 PWM
Celý kód je uvedený na konci stránky.
Tento kód nevyžaduje žiadnu knižnicu, takže kód začnite definovaním kolíka, ku ktorému je pripojená LED. V mojom prípade som na pripojenie LED použil GPIO 16.
const int ledPin = 16; // 16 zodpovedá GPIO16
Potom nastavte vlastnosti signálu PWM v ďalších riadkoch. Nastavil som frekvenciu PWM na 9000 a rozlíšenie na 10, môžete ho zmeniť tak, aby generoval rôzne signály PWM. Dosky ESP32 podporujú rozlíšenie PWM od 1 bitu do 16 bitov. Musíte tiež zvoliť kanál PWM. ESP32 má celkom 16 (0 až 15) PWM kanálov.
konšt. frekvencia = 9000; const int ledChannel = 0; konštantné rozlíšenie = 10;
Teraz vo vnútri funkcie void setup () nakonfigurujte LED PWM s vlastnosťami, ktoré ste nastavili skôr, pomocou funkcie ledcSetup () . V ďalšom riadku definujte pin GPIO, kde je pripojená LED. Funkcia ledcAttachPin () sa používa na definovanie pinu GPIO a kanálu, ktorý generuje signál. V mojom prípade som použil ledPin, ktorý je GPIO 16 a ledChannel, ktorý zodpovedá kanálu 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, frekvencia, rozlíšenie); ledcAttachPin (ledPin, ledChannel); }
V prázdnej slučke prečítajte analógový pin, kde je pripojený hrniec, a uložte čítanie do premennej s názvom „dutyCycle“ . Jas LED sa bude zvyšovať alebo znižovať podľa otáčania potenciometra. LedcWrite () je veľmi podobný analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); oneskorenie (15); }
Testovanie signálov ESP32 PWM
Ak chcete otestovať signály ESP32 PWM, pripojte LED a potenciometer podľa schémy zapojenia a nahrajte kód do svojho ESP32. Uistite sa, že máte vybratú správnu dosku a port COM. Teraz otáčajte potenciometrom, aby ste zvýšili alebo znížili jas LED.
Kompletné fungovanie ukazuje video uvedené nižšie. Kliknutím na odkaz tiež skontrolujte ďalšie projekty založené na ESP32.