Modulacja szerokości impulsu (PWM) to technika zmieniająca szerokość impulsu przy zachowaniu stałej częstotliwości fali. Technika PWM stosowana głównie do sterowania jasnością diody LED, prędkością silnika prądu stałego, sterowaniem serwomotorem lub w innych przypadkach, gdy trzeba wygenerować sygnał analogowy z wykorzystaniem źródła cyfrowego. Szczegółowo wyjaśniliśmy PWM w poprzednim artykule.
W tym samouczku będziemy mówić o pinach PWM (modulacji szerokości impulsu) na płytce rozwojowej ESP32. Wszystkie piny GPIO płytki rozwojowej ESP32 (z wyjątkiem zasilania, GND, Tx, Rx i EN) mogą być użyte do uzyskania sygnału PWM. Jako przykład ESP32 PWM, zbudujemy prosty obwód, który zmienia jasność diody LED zgodnie z sygnałami PWM.
Wymagane składniki
- ESP32
- DOPROWADZIŁO
- Rezystor 330 Ω
- 10k Pot
- Płytka prototypowa
Generacja PWM
Zanim wyjaśnimy generację PWM w ESP32, omówmy kilka terminów związanych z PWM.
TON (On Time): Czas, w którym sygnał jest wysoki.
TOFF (Off Time): Czas, w którym sygnał jest niski.
Okres: jest to suma czasu włączenia i wyłączenia sygnału PWM.
TotalPeriod = T ON + T OFF
Cykl pracy: procent czasu, w którym sygnał był wysoki w okresie sygnału PWM.
Cykl pracy = T ON / T ogółem * 100
Na przykład, jeśli impuls o całkowitym okresie 10 ms pozostaje włączony (wysoki) przez 5 ms. Wtedy cykl pracy wyniesie:
Cykl pracy = 5/10 * 100 = 50% cykl pracy
Obwód zawiera pojedynczą diodę LED, rezystor i potencjometr 10K. Ujemny pin diody LED jest podłączony do GND ESP32 przez rezystor 330 Ω. Możesz użyć dowolnej wartości rezystora z zakresu od 230 Ω do 500 Ω. Podłącz dodatni pin diody LED do GPIO 16, a pin sygnałowy Pot do styku ADC1 (VP) ESP32.
Objaśnienie kodu ESP32 PWM
Pełny kod znajduje się na końcu strony.
Ten kod nie wymaga żadnej biblioteki, więc zacznij kod od zdefiniowania pin, do którego jest podłączona dioda LED. W moim przypadku do podłączenia diody LED użyłem GPIO 16.
const int ledPin = 16; // 16 odpowiada GPIO16
Następnie ustaw właściwości sygnału PWM w kolejnych wierszach. Ustawiłem częstotliwość PWM na 9000, a rozdzielczość na 10, możesz to zmienić, aby generować różne sygnały PWM. Płyty ESP32 obsługują rozdzielczość PWM od 1 bitu do 16 bitów. Musisz także wybrać kanał PWM. ESP32 ma łącznie 16 (od 0 do 15) kanałów PWM.
const int freq = 9000; const int ledChannel = 0; stała int rozdzielczość = 10;
Teraz w funkcji void setup () skonfiguruj PWM diody LED z właściwościami ustawionymi wcześniej za pomocą funkcji ledcSetup () . W kolejnym wierszu określ pin GPIO, do którego podłączona jest dioda LED. Funkcja ledcAttachPin () służy do definiowania pinu GPIO i kanału generującego sygnał. W moim przypadku użyłem ledPin czyli GPIO 16 i ledChannel, który odpowiada kanałowi 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, freq, rozdzielczość); ledcAttachPin (ledPin, ledChannel); }
W pustej pętli odczytaj styk analogowy, do którego podłączony jest potencjometr, i zapisz odczyt w zmiennej o nazwie „cykl pracy” . Jasność diody LED będzie się zwiększać lub zmniejszać w zależności od obrotów potencjometru. LedcWrite () jest bardzo podobna do analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); opóźnienie (15); }
Testowanie sygnałów ESP32 PWM
Aby przetestować sygnały PWM ESP32, podłącz diodę LED i potencjometr zgodnie ze schematem obwodu i prześlij kod do ESP32. Upewnij się, że masz wybraną odpowiednią kartę i port COM. Teraz obróć potencjometr, aby zwiększyć lub zmniejszyć jasność diody LED.
Kompletną pracę przedstawia poniższy film. Sprawdź również inne projekty oparte na ESP32, klikając łącze.