Modulacija širine impulza (PWM) je tehnika, ki spreminja širino impulza, hkrati pa ohranja frekvenco valov konstantno. Tehnika PWM se v glavnem uporablja za nadzor svetlosti LED, hitrosti enosmernega motorja, krmiljenje servo motorja ali v drugih primerih, kjer je treba z digitalnim virom generirati analogni signal. PWM smo podrobno razložili v prejšnjem članku.
V tej vadnici bomo govorili o zatičih PWM (modulacija širine impulza) na razvojni plošči ESP32. Vsi GPIO zatiči razvojne plošče ESP32 (razen napajanja, GND, Tx, Rx in EN) se lahko uporabljajo za pridobivanje PWM signala. Kot primer PWM ESP32 bomo zgradili preprosto vezje, ki spreminja svetlost LED glede na signale PWM.
Potrebne komponente
- ESP32
- LED
- 330 Ω upor
- 10k lonec
- Breadboard
Generacija PWM
Pred razlago generacije PWM na ESP32 se pogovorimo o nekaterih izrazih, povezanih s PWM.
TON (vklopljeno): čas, ko je signal visok.
TOFF (čas izklopa): čas, ko je signal nizek.
Obdobje: To je vsota časa in časa izklopa signala PWM.
TotalPeriod = T ON + T OFF
Delovni cikel: Odstotek časa, ko je bil signal v obdobju signala PWM visok.
Delovni cikel = T ON / T Skupaj * 100
Če na primer impulz s skupnim obdobjem 10 ms ostane vključen (visok) 5 ms. Potem bo delovni cikel:
Delovni cikel = 5/10 * 100 = 50% delovni cikel
Vezje vsebuje eno LED, upor in 10K potenciometer. Negativni zatič LED je povezan z GND ESP32 prek upora 330 Ω. Uporabite lahko katero koli vrednost upora med 230 Ω in 500 Ω. Pozitivni zatič LED priklopite na GPIO 16 in signalni zatič lonca na zatič ADC1 (VP) ESP32.
Pojasnilo kode za PWM ESP32
Popolna koda je podana na koncu strani.
Ta koda ne zahteva nobene knjižnice, zato začnite svojo kodo tako, da določite zatič, na katerega je pritrjena LED. V mojem primeru sem za priključitev LED uporabil GPIO 16.
const int ledPin = 16; // 16 ustreza GPIO16
Po tem nastavite lastnosti signala PWM v naslednjih vrsticah. Nastavil sem frekvenco PWM na 9000 in ločljivost na 10, lahko pa jo spremenite tako, da ustvarja različne PWM signale. Plošče ESP32 podpirajo ločljivost PWM od 1 bita do 16 bitov. Izbrati morate tudi kanal PWM. ESP32 ima skupno 16 (0 do 15) kanalov PWM.
const int freq = 9000; const int ledChannel = 0; const int ločljivost = 10;
Zdaj v funkciji void setup () nastavite LED PWM z lastnostmi, ki ste jih nastavili prej s pomočjo funkcije ledcSetup () . V naslednji vrstici določite zatič GPIO, kamor je priključena LED. Funkcija ledcAttachPin () se uporablja za določanje GPIO zatiča in kanala, ki ustvarja signal. V mojem primeru sem uporabil ledPin, ki je GPIO 16, in ledChannel, ki ustreza kanalu 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, freq, ločljivost); ledcAttachPin (ledPin, ledChannel); }
V void zanki preberite analogni zatič, kjer je priključen lonec, in odčitke shranite v spremenljivko, imenovano "dutyCycle" . Svetlost LED se bo povečala ali zmanjšala glede na vrtenje potenciometra. LedcWrite () je zelo podobna analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); zamuda (15); }
Testiranje signalov PWM ESP32
Če želite preizkusiti signale PWM ESP32, priključite LED in potenciometer v skladu z vezjem in naložite kodo na svoj ESP32. Prepričajte se, da ste izbrali pravo ploščo in vrata COM. Zdaj zavrtite potenciometer, da povečate ali zmanjšate svetlost LED.
Popolno delo je prikazano v spodnjem videoposnetku. Po povezavi preverite tudi druge projekte, ki temeljijo na ESP32.