Modulacija širine impulsa (PWM) je tehnika koja mijenja širinu impulsa, a frekvenciju vala održava konstantnom. PWM tehnika koja se uglavnom koristi za kontrolu svjetline LED-a, brzine istosmjernog motora, upravljanje servo motorom ili u drugim slučajevima, gdje se mora generirati analogni signal pomoću digitalnog izvora. PWM smo detaljno objasnili u prethodnom članku.
U ovom uputstvu govorit ćemo o PWM (modulacija širine impulsa) pinovima ESP32 razvojne ploče. Svi GPIO pinovi razvojne ploče ESP32 (osim napajanja, GND, Tx, Rx i EN) mogu se koristiti za dobivanje PWM signala. Kao primjer za ESP32 PWM, izgradit ćemo jednostavan sklop koji mijenja svjetlinu LED-a prema PWM-signalima.
Komponente potrebne
- ESP32
- LED
- Otpornik 330 Ω
- 10k lonac
- Breadboard
Generacija PWM-a
Prije objašnjavanja generacije PWM-a na ESP32, razgovarajmo o nekim pojmovima povezanim s PWM-om.
TON (Uključeno): Trajanje vremena kada je signal visok.
TOFF (Isključeno vrijeme): Trajanje vremena kada je signal nizak.
Razdoblje: To je zbroj vremena uključivanja i isključenja PWM signala.
TotalPeriod = T UKLJ + T ISKLJUČENO
Radni ciklus: Postotak vremena kada je signal bio visok tijekom razdoblja PWM signala.
Radni ciklus = T ON / T Ukupno * 100
Na primjer, ako impuls s ukupnim razdobljem od 10 ms ostane UKLJUČEN (visok) 5 ms. Tada će radni ciklus biti:
Radni ciklus = 5/10 * 100 = 50% radnog ciklusa

Krug sadrži jednu LED diodu, otpornik i 10K potenciometar. Negativni pin LED diode spojen je na GND ESP32 kroz otpornik od 330 Ω. Možete koristiti bilo koju vrijednost otpora između 230 Ω i 500 Ω. Spojite LED pozitivni pin na GPIO 16 i signalni pin Pot na ADC1 (VP) pin ESP32.
Objašnjenje koda za ESP32 PWM
Kompletni kod dan je na kraju stranice.
Ovaj kôd ne zahtijeva knjižnicu, pa započnite svoj kôd definiranjem pina na koji je pričvršćena LED. U mom slučaju koristio sam GPIO 16 za spajanje LED diode.
const int ledPin = 16; // 16 odgovara GPIO16
Nakon toga postavite svojstva PWM signala u sljedeće redove. Frekvenciju PWM-a postavila sam na 9000, a razlučivost na 10, možete je promijeniti tako da generira različite PWM signale. ESP32 ploče podržavaju PWM razlučivost od 1 bita do 16 bita. Također trebate odabrati PWM kanal. ESP32 ima ukupno 16 (0 do 15) PWM kanala.
const int freq = 9000; const int ledChannel = 0; const int razlučivost = 10;
Sada unutar funkcije void setup () , konfigurirajte LED PWM sa svojstvima koja ste ranije postavili pomoću funkcije ledcSetup () . U sljedećem retku definirajte GPIO pin na koji je spojena LED dioda. Funkcija ledcAttachPin () koristi se za definiranje GPIO pina i kanala koji generira signal. U mom slučaju koristio sam ledPin koji je GPIO 16 i ledChannel koji odgovara kanalu 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, frekvencija, razlučivost); ledcAttachPin (ledPin, ledChannel); }
U praznoj petlji pročitajte analogni pin na mjestu gdje je povezan lonac i pohranite očitanje u varijablu nazvanu 'dutyCycle' . Svjetlina LED-a povećavat će se ili smanjivati prema rotaciji potenciometra. LedcWrite () je vrlo sličan analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); kašnjenje (15); }
Testiranje PWM signala ESP32
Da biste testirali ESP32 PWM signale, spojite LED i potenciometar prema shemi sklopa i prenesite kôd na svoj ESP32. Provjerite jeste li odabrali pravu ploču i COM priključak. Sada zakrenite potenciometar da biste povećali ili smanjili svjetlinu LED-a.

Kompletni rad prikazan je u videu datom u nastavku. Također, provjerite ostale projekte temeljene na ESP32 slijedeći vezu.

