Modularea lățimii pulsului (PWM) este o tehnică care variază lățimea unui impuls, menținând în același timp frecvența de undă constantă. Tehnica PWM utilizată în principal pentru a controla luminozitatea LED-ului, viteza motorului de curent continuu, controlul unui servomotor sau, în alte cazuri, unde trebuie să genereze un semnal analogic folosind o sursă digitală. Am explicat în detaliu PWM în articolul anterior.
În acest tutorial, vom vorbi despre pinii PWM (modularea lățimii impulsurilor) ale plăcii de dezvoltare ESP32. Toți pinii GPIO ai plăcii de dezvoltare ESP32 (cu excepția Power, GND, Tx, Rx și EN) pot fi folosiți pentru a obține semnalul PWM. Ca exemplu ESP32 PWM, vom construi un circuit simplu care schimbă luminozitatea LED-ului în funcție de semnalele PWM.
Componente necesare
- ESP32
- LED
- Rezistor de 330 Ω
- Oală de 10k
- Breadboard
Generarea PWM
Înainte de a explica generația PWM pe ESP32, să discutăm câțiva termeni asociați cu PWM.
TON (On Time): Durata de timp când semnalul este ridicat.
TOFF (Off Time): Durata de timp când semnalul este scăzut.
Perioada: este suma timpului de pornire și de oprire a semnalului PWM.
TotalPeriod = T ON + T OFF
Ciclul de funcționare: Procentul de timp în care semnalul a fost ridicat în perioada semnalului PWM.
Ciclul de funcționare = T ON / T Total * 100
De exemplu, dacă un impuls cu o perioadă totală de 10 ms rămâne activat (ridicat) timp de 5 ms. Apoi, ciclul de funcționare va fi:
Ciclul de funcționare = 5/10 * 100 = 50% Ciclul de funcționare
Circuitul conține un singur LED, un rezistor și un potențiometru de 10K. Pinul negativ al LED-ului este conectat la GND-ul ESP32 printr-un rezistor de 330 Ω. Puteți utiliza orice valoare a rezistenței între 230 Ω și 500 Ω. Conectați pinul pozitiv LED la GPIO 16 și pinul de semnal al Potului la pinul ADC1 (VP) al ESP32.
Cod Explicație pentru ESP32 PWM
Codul complet este dat la sfârșitul paginii.
Acest cod nu necesită nicio bibliotecă, deci porniți codul definind pinul, LED-ul este atașat. În cazul meu, am folosit GPIO 16 pentru a conecta LED-ul.
const int ledPin = 16; // 16 corespunde GPIO16
După aceea, setați proprietățile semnalului PWM în rândurile următoare. Am setat frecvența PWM la 9000, iar rezoluția la 10, o puteți modifica pentru a genera diferite semnale PWM. Plăcile ESP32 acceptă rezoluția PWM de la 1 bit la 16 biți. De asemenea, trebuie să alegeți un canal PWM. ESP32 are un total de 16 (0 la 15) canale PWM.
const int freq = 9000; const int ledChannel = 0; rezoluție int int = 10;
Acum, în interiorul funcției void setup () , configurați LED-ul PWM cu proprietățile pe care le-ați setat anterior folosind funcția ledcSetup () . În linia următoare, definiți pinul GPIO unde este conectat LED-ul. Funcția ledcAttachPin () este utilizată pentru a defini pinul GPIO și canalul care generează semnalul. În cazul meu, am folosit ledPin care este GPIO 16 și ledChannel care corespunde canalului 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, frecvență, rezoluție); ledcAttachPin (ledPin, ledChannel); }
În bucla de gol, citiți pinul analogic unde potul este conectat și stocați citirea într-o variabilă numită „dutyCycle” . Luminozitatea LED-ului va crește sau scădea în funcție de rotația potențiometrului. LedcWrite () este foarte similar cu analogWrite ().
bucla void () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); întârziere (15); }
Testarea semnalelor ESP32 PWM
Pentru a testa semnalele ESP32 PWM, conectați LED-ul și potențiometrul conform schemei de circuit și încărcați codul pe ESP32. Asigurați-vă că ați selectat placa și portul COM potrivite. Acum rotiți potențiometrul pentru a crește sau a reduce luminozitatea LED-ului.
Lucrarea completă este prezentată în videoclipul prezentat mai jos. De asemenea, verificați alte proiecte bazate pe ESP32 urmând linkul.