Modulacja szerokości impulsu lub PWM to technika używana do siekania sygnału cyfrowego, aby uzyskać zmienne wyjście. Większość mikrokontrolerów ma zegar wewnętrzny, który służy do generowania sygnału PWM. W tym samouczku będziemy obejmować piny PWM i sposób, w jaki można je skonfigurować w ESP32 za pomocą Arduino IDE.
PINS PWM w ESP32
Płyta ESP32 ma 16 niezależnych kanałów, które mogą generować sygnały PWM. Prawie wszystkie piny GPIO, które mogą działać jako wyjście, można użyć do generowania sygnału PWM. Piny GPIO 34,35,36,39 nie mogą być stosowane jako piny PWM, ponieważ są to piny tylko wejściowe.
W wariancie 36 PINS na desce ESP32 sześć zintegrowanych pinów SPI, które nie mogą być również używane jako generatory sygnałów PWM.
Jak używać pinów ESP32 PWM
PWM to technika sterowania urządzeniem za pomocą zmiennego cyfrowego sygnału impulsu. PWM pomaga kontrolować prędkość silnika. Głównym elementem generowania sygnałów PWM jest wewnętrzny moduł timera. Timer jest kontrolowany przez wewnętrzne źródło zegara mikrokontrolera.
W miarę rozpoczęcia czasu jego wartości jest porównywana z dwoma komparatorami, a po osiągnięciu określonej wartości cyklu pracy jest uruchamiany sygnał na pinie PWM. Następnie sygnał timera liczy się, aż osiągnie wartość rejestru okresu. Teraz ponownie komparator wygeneruje nowy spust i piny PWM przesunąć się z niskiego na wysokie.
Aby wygenerować sygnał PWM w pinach GPIO po czterech właściwościach, należy zdefiniować:
Skonfiguruj kanały PWM ESP32
Konfigurowanie kanału PWM w ESP32 jest podobne do anogwrite () Funkcja w programowaniu Arduino. Ale tutaj będziemy używać dedykowanego zestawu LEDCSETUP () Funkcje konfigurowania PWM w ESP32. Prawie wszystko, co potrzebne do sygnału PWM kanał, rezolucja I częstotliwość może być łatwo skonfigurowane przez użytkownika.
Poniżej jest LEDCSETUP () Funkcja używana do konfigurowania sygnału ESP32 PWM:
LEDCSETUP (kanał, częstotliwość, Resolution_bits);
Ta funkcja zawiera trzy argumenty.
Kanał: Ponieważ ESP32 ma 16 kanałów PWM, więc kanał argument wewnątrz LEDCSETUP () Funkcja może przyjąć dowolną wartość od 0 do 15.
Częstotliwość: Następnie w LEDCSETUP () Funkcja Mamy argumenty częstotliwości, które można ustawić zgodnie z wymaganiami takimi jak 1 kHz, 5 kHz, 8 kHz i 10 kHz. Na przykład maksymalna częstotliwość PWM z rozdzielczością 10 bitów w module PWM może być ustawiona 78.125KHz.
Rezolucja: Rozdzielczość sygnału PWM można skonfigurować między rozdzielczością od 1 do 16-bitową.
W ESP32 zarówno częstotliwość, jak i rozdzielczość PWM są niezależne od źródła zegara i odwrotnie proporcjonalne.
Ostatnim krokiem jest zdefiniowanie szpilki dla PWM. Nie przypisuj już używanych pinów do komunikacji, takich jak szpilki GPIO, takie jak UART, SPI itp.
LEDC (kontroler LED PWM) jest zaprojektowany przede wszystkim do sygnałów sterowania LED ESP32 PWM. Jednak wygenerowane tutaj sygnały PWM mogą być również używane do innych aplikacji.
Oto kilka punktów, o których należy pamiętać, konfigurując sygnał ESP32 PWM:
Kontrolowanie jasności LED za pomocą sygnału PWM w ESP32
Teraz będziemy kontrolować jasność LED za pomocą sygnału PWM. Połącz diodę LED z pinem ESP32 GPIO 18.
Tabela pokazuje połączenie PIN dla LED z ESP32.
ESP32 PIN GPIO | PROWADZONY |
GPIO 18 | +Ive |
GND | -Ive |
Kod kontroli jasności LED
Kod podany poniżej sprawi, że LED zanika i wychodzi:
const int led = 18; /*Równa się pinowi GPIO 18*/
const int freq = 5000; /*Częstotliwość sygnału PWM*/
const int led_channel = 0;
const int Resolution = 8; /*Rozdzielczość PWM*/
void setup ()
LEDCSETUP (LED_CHANNEL, FREQ, RESolution); /*Zdefiniowany sygnał PWM*/
Ledcattachpin (LED, LED_Channel);
void Loop ()
for (int obowiązkowy = 0; cutyCycle = 0; cutyCycle-) /*LED jasność zmniejsza* /
LedcWrite (LED_Channel, DutyCycle);
opóźnienie (15);
Kod rozpoczął się od zdefiniowania numeru PIN dla diody LED, czyli GPIO 18. Następnie ustawiamy właściwości sygnału PWM, które są częstotliwością, rozdzielczością sygnału PWM i kanałem LED.
Następnie za pomocą LEDCSETUP () funkcja konfigurujemy sygnał PWM. Ta funkcja akceptuje trzy argumenty częstotliwość, rezolucja I Kanał LED Zdefiniowaliśmy wcześniej.
W części pętli zmienimy cykl pracy między 0 a 255, aby zwiększyć jasność diody LED. Po tym ponownie użycie pętli dla For zmniejsza jasność LED z 255 do 0.
Modulacja szerokości impulsu zamienia sygnał cyfrowy w sygnał analogowy, zmieniając czas, jak długo pozostaje i wyłącza. Termin Cykl pracy jest używany do opisania procentu lub stosunku tego, jak długo pozostaje w porównaniu z tym, kiedy się wyłączy.
Tutaj wzięliśmy 8-bitowy kanał, więc zgodnie z obliczeniami:
2^8 = 256 zawierające wartości od 0 do 255. W przykładzie podanym powyżej cykl pracy jest równy 100%. Dla 20% cyklu pracy lub dowolnej innej wartości możemy go obliczyć za pomocą poniższych obliczeń:
Rozdzielczość kanału = 8 bitów
Dla 100% cyklu pracy = 0 do 255 (2^8 = 256 wartości)
Dla 20% cyklu pracy = 20% z 256 to 51
Tak więc 20% cykl pracy rozdzielczości 8-bitowej będzie równe wartości zakresu od 0 do 51.
Gdzie 0 = 0% i 51 = 100% 8-bitowego cyklu obowiązkowego rozdzielczości.
Wyjście
Na sprzęcie możemy zobaczyć jasność diody LED w pełni, oznacza to, że sygnał cyklu pracy wynosi 255.
Teraz widzimy, że dioda LED jest całkowicie przyciemniona, co oznacza, że wartość cyklu pracy wynosi 0.
Z powodzeniem kontrolowaliśmy jasność LED za pomocą sygnału PWM.
Wniosek
Tutaj w tym artykule omówiliśmy piny ESP32 PWM i sposób, w jaki można je użyć do kontrolowania wielu peryferyjnych, takich jak LED lub silnik. Omówiliśmy również kod do kontrolowania pojedynczych i wielu diod LED przy użyciu tego samego kanału PWM. Korzystając z tego przewodnika Każdy rodzaj sprzętu można kontrolować za pomocą sygnału PWM.