Pulso pločio moduliacija (PWM) yra technika, kuri keičia impulso plotį, išlaikydama pastovią bangos dažnį. PWM technika daugiausia naudojama šviesos diodo ryškumui, nuolatinės srovės variklio greičiui, servovarikliui valdyti arba kitais atvejais, kai tenka generuoti analoginį signalą naudojant skaitmeninį šaltinį. Mes išsamiai paaiškinome PWM ankstesniame straipsnyje.
Šioje pamokoje kalbėsime apie ESP32 kūrimo plokštės PWM (impulso pločio moduliacijos) kaiščius. PWM signalui gauti gali būti naudojami visi ESP32 kūrimo plokštės GPIO kaiščiai (išskyrus maitinimo, GND, Tx, Rx ir EN). Kaip ESP32 PWM pavyzdį sukursime paprastą grandinę, kuri keičia šviesos diodų ryškumą pagal PWM signalus.
Būtini komponentai
- ESP32
- LED
- 330 Ω rezistorius
- 10 tūkst. Puodo
- Bandomoji Lenta
PWM karta
Prieš paaiškindami PWM generavimą ESP32, aptarkime keletą terminų, susijusių su PWM.
TON (On Time): laiko trukmė, kai signalas yra aukštas.
TOFF (išjungimo laikas): laiko trukmė, kai signalas yra žemas.
Laikotarpis: Tai PWM signalo įjungimo ir išjungimo laiko suma.
TotalPeriod = T ON + T OFF
Darbo ciklas: procentas laiko, kai signalas buvo aukštas PWM signalo laikotarpiu.
Darbo ciklas = T ON / T Iš viso * 100
Pvz., Jei impulsas, kurio bendras laikotarpis yra 10 ms, lieka ĮJUNGTAS (didelis) 5 ms. Tada darbo ciklas bus:
Darbo ciklas = 5/10 * 100 = 50% darbo ciklas
Grandinėje yra vienas šviesos diodas, rezistorius ir 10K potenciometras. Neigiamas šviesos diodo kaištis yra prijungtas prie ESP32 GND per 330 Ω rezistorių. Galite naudoti bet kurią rezistoriaus vertę nuo 230 Ω iki 500 Ω. Prijunkite LED teigiamą kaištį prie GPIO 16, o „Pot“ signalo kaištį prie ESP32 ADC1 (VP) kaiščio.
ESP32 PWM kodo paaiškinimas
Visas kodas pateikiamas puslapio pabaigoje.
Šiam kodui nereikia jokios bibliotekos, todėl pradėkite kodą apibrėždami kaištį, prie kurio pritvirtintas šviesos diodas. Mano atveju LED prijungimui naudojau GPIO 16.
const int ledPin = 16; // 16 atitinka GPIO16
Po to kitose eilutėse nustatykite PWM signalo savybes. Aš nustatiau PWM dažnį 9000, o skiriamąją gebą - 10, galite jį pakeisti, kad generuotumėte skirtingus PWM signalus. ESP32 plokštės palaiko PWM skiriamąją gebą nuo 1 iki 16 bitų. Taip pat turite pasirinkti PWM kanalą. ESP32 iš viso turi 16 (nuo 0 iki 15) PWM kanalų.
const int dažnis = 9000; const int ledChannel = 0; const int skiriamoji geba = 10;
Dabar „ void setup“ () funkcijos viduje sukonfigūruokite „LED PWM“ su anksčiau nustatytomis ypatybėmis naudodami „ ledcSetup ()“ funkciją. Kitoje eilutėje apibrėžkite GPIO kaištį, kuriame prijungtas šviesos diodas. Funkcija ledcAttachPin () naudojama apibrėžti GPIO kaištį ir kanalą, kuris generuoja signalą. Mano atveju naudojau „ledPin“, kuris yra GPIO 16, ir „ledChannel“, kuris atitinka 0 kanalą.
negaliojanti sąranka () {Serial.begin (9600); ledcSetup (ledChannel, dažnas, skiriamoji geba); ledcAttachPin (ledPin, ledChannel); }
Į void kilpa, skaityti Analoginis pin kur puodai yra prijungtas ir laikyti svarstymą į kintamąjį vadinamą "dutyCycle" . Šviesos diodo ryškumas padidės arba sumažės priklausomai nuo potenciometro sukimosi. „ LedcWrite“ () yra labai panašus į „ analogWrite“ ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); vėlavimas (15); }
ESP32 PWM signalų testavimas
Norėdami patikrinti ESP32 PWM signalus, prijunkite šviesos diodą ir potenciometrą pagal grandinės schemą ir įkelkite kodą į savo ESP32. Įsitikinkite, kad pasirinkote tinkamą plokštę ir COM prievadą. Dabar pasukite potenciometrą, kad padidintumėte arba sumažintumėte šviesos diodų ryškumą.
Visiškas darbas parodytas toliau pateiktame vaizdo įraše. Taip pat patikrinkite kitus ESP32 pagrįstus projektus spustelėdami nuorodą.