Pulsa platuma modulācija (PWM) ir metode, kas maina impulsa platumu, saglabājot viļņa frekvences nemainīgu. PWM paņēmiens galvenokārt tiek izmantots, lai kontrolētu gaismas diodes spilgtumu, līdzstrāvas motora ātrumu, servomotora vadību vai citos gadījumos, kad jāveido analogais signāls, izmantojot digitālo avotu. Iepriekšējā rakstā mēs detalizēti izskaidrojām PWM.
Šajā apmācībā mēs runāsim par ESP32 izstrādes paneļa tapām PWM (pulsa platuma modulācija). PWM signāla iegūšanai var izmantot visus ESP32 izstrādes paneļa GPIO tapas (izņemot Power, GND, Tx, Rx un EN). Kā ESP32 PWM piemēru mēs izveidosim vienkāršu shēmu, kas maina LED spilgtumu atbilstoši PWM signāliem.
Nepieciešamās sastāvdaļas
- ESP32
- LED
- 330 Ω rezistors
- 10k katls
- Maizes dēlis
PWM paaudze
Pirms izskaidrot PWM paaudzi ESP32, apspriedīsim dažus ar PWM saistītos terminus.
TON (ieslēgšanas laiks): laika ilgums, kad signāls ir augsts.
TOFF (izslēgšanas laiks): laika ilgums, kad signāls ir zems.
Periods: tā ir PWM signāla ieslēgšanas un izslēgšanās laika summa.
TotalPeriod = T ON + T OFF
Darba cikls: Laika procentuālā daļa, kad signāls PWM signāla periodā bija augsts.
Darba cikls = T ON / T Kopā * 100
Piemēram, ja impulss ar kopējo periodu 10 ms paliek 5 sekundes ieslēgts (augsts). Tad darba cikls būs:
Darba cikls = 5/10 * 100 = 50% darba cikls
Shēmā ir viens LED, rezistors un 10K potenciometrs. LED negatīvā tapa ir savienota ar ESP32 GND caur 330 Ω rezistoru. Varat izmantot jebkuru rezistora vērtību no 230 Ω līdz 500 Ω. Savienojiet LED pozitīvo tapu ar GPIO 16 un Pot signāla tapu ar ESP32 ADC1 (VP) tapu.
ESP32 PWM koda skaidrojums
Pilns kods ir norādīts lapas beigās.
Šim kodam nav nepieciešama bibliotēka, tāpēc sāciet kodu, nosakot tapu, kurai ir pievienota gaismas diode. Manā gadījumā LED savienošanai izmantoju GPIO 16.
const int ledPin = 16; // 16 atbilst GPIO16
Pēc tam nākamajās rindās iestatiet PWM signāla īpašības. Es iestatīju PWM frekvenci uz 9000 un izšķirtspēju uz 10, jūs varat to mainīt, lai ģenerētu dažādus PWM signālus. ESP32 dēļi atbalsta PWM izšķirtspēju no 1 līdz 16 bitiem. Jums arī jāizvēlas PWM kanāls. ESP32 kopā ir 16 (0 līdz 15) PWM kanāli.
const int frekv = 9000; const int ledChannel = 0; const int izšķirtspēja = 10;
Funkcijas void setup () iekšpusē konfigurējiet LED PWM ar iepriekš iestatītajām īpašībām, izmantojot funkciju ledcSetup () . Nākamajā rindā definējiet GPIO tapu, kur ir pievienota gaismas diode. Funkcija ledcAttachPin () tiek izmantota, lai definētu GPIO tapu un kanālu, kas ģenerē signālu. Manā gadījumā es izmantoju ledPin, kas ir GPIO 16, un ledChannel, kas atbilst 0. kanālam.
void setup () {Sērijas.sākt (9600); ledcSetup (ledChannel, freq, izšķirtspēja); ledcAttachPin (ledPin, ledChannel); }
Jo tukšumu cilpas, izlasiet Analog PIN kur Pot ir pievienots un uzglabāt lasījumu mainīgajā sauc "dutyCycle" . LED spilgtums palielināsies vai samazināsies atkarībā no potenciometra rotācijas. LedcWrite () ir ļoti līdzīgs analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); kavēšanās (15); }
ESP32 PWM signālu pārbaude
Lai pārbaudītu ESP32 PWM signālus, pievienojiet LED un potenciometru atbilstoši shēmas shēmai un augšupielādējiet kodu savā ESP32. Pārliecinieties, vai esat izvēlējies pareizo dēli un COM portu. Tagad pagrieziet potenciometru, lai palielinātu vai samazinātu LED spilgtumu.
Pilnīga darbība ir parādīta zemāk redzamajā video. Pārbaudiet arī citus ESP32 balstītos projektus, noklikšķinot uz saites.