Pulse Width Modulation (PWM) je technika, která mění šířku pulzu při zachování konstantní frekvence vlny. Technika PWM se používá hlavně k ovládání jasu LED, rychlosti stejnosměrného motoru, ovládání servomotoru nebo v jiných případech, kdy je nutné generovat analogový signál pomocí digitálního zdroje. PWM jsme podrobně vysvětlili v předchozím článku.
V tomto tutoriálu budeme hovořit o pinech PWM (modulace šířky pulzu) vývojové desky ESP32. K získání signálu PWM lze použít všechny piny GPIO vývojové desky ESP32 (kromě Power, GND, Tx, Rx a EN). Jako příklad ESP32 PWM sestavíme jednoduchý obvod, který mění jas LED podle signálů PWM.
Požadované komponenty
- ESP32
- VEDENÝ
- Rezistor 330 Ω
- 10k hrnec
- Nepájivá deska
Generování PWM
Než vysvětlíme generování PWM na ESP32, pojďme diskutovat o některých pojmech spojených s PWM.
TON (On Time): Doba, po kterou je signál vysoký.
TOFF (Off Time): Doba, po kterou je signál slabý.
Period: Je to součet doby zapnutí a vypnutí signálu PWM.
TotalPeriod = T ON + T OFF
Pracovní cyklus: Procento času, kdy byl signál vysoký během období signálu PWM.
Pracovní cyklus = T ON / T celkem * 100
Například pokud puls s celkovou periodou 10ms zůstane ZAPNUTÝ (vysoký) po dobu 5ms. Pracovní cyklus pak bude:
Pracovní cyklus = 5/10 * 100 = 50% pracovní cyklus
Obvod obsahuje jednu LED, odpor a 10K potenciometr. Záporný kolík LED je připojen k GND ESP32 přes odpor 330 Ω. Můžete použít libovolnou hodnotu odporu mezi 230 Ω a 500 Ω. Připojte kladný kolík LED k GPIO 16 a signální kolík Potu k kolíku ADC1 (VP) ESP32.
Vysvětlení kódu pro ESP32 PWM
Celý kód je uveden na konci stránky.
Tento kód nevyžaduje žádnou knihovnu, takže začněte kód definováním kolíku, ke kterému je LED připojena. V mém případě jsem k připojení LED použil GPIO 16.
const int ledPin = 16; // 16 odpovídá GPIO16
Poté nastavte vlastnosti signálu PWM v dalších řádcích. Nastavil jsem frekvenci PWM na 9000 a rozlišení na 10, můžete jej změnit tak, aby generoval různé signály PWM. Desky ESP32 podporují rozlišení PWM od 1 bitu do 16 bitů. Musíte také vybrat kanál PWM. ESP32 má celkem 16 (0 až 15) PWM kanálů.
const int frekvence = 9000; const int ledChannel = 0; const int rozlišení = 10;
Nyní uvnitř funkce void setup () nakonfigurujte LED PWM s vlastnostmi, které jste nastavili dříve, pomocí funkce ledcSetup () . Na dalším řádku definujte pin GPIO, kde je připojena LED. Funkce ledcAttachPin () se používá k definování pinu GPIO a kanálu, který generuje signál. V mém případě jsem použil ledPin, což je GPIO 16 a ledChannel, který odpovídá kanálu 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, frekvence, rozlišení); ledcAttachPin (ledPin, ledChannel); }
Ve smyčce void si přečtěte analogový pin, kde je připojen Pot, a uložte odečet do proměnné zvané „dutyCycle“ . Jas LED se zvyšuje nebo snižuje podle otáčení potenciometru. LedcWrite () je velmi podobný analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); zpoždění (15); }
Testování signálů ESP32 PWM
Chcete-li otestovat signály ESP32 PWM, připojte LED a potenciometr podle schématu zapojení a nahrajte kód do svého ESP32. Ujistěte se, že máte vybranou správnou desku a port COM. Nyní otáčením potenciometru zvyšte nebo snižte jas LED.
Kompletní fungování je uvedeno ve videu níže. Zkontrolujte také další projekty založené na ESP32 pomocí odkazu.