Dowiedz się, jak kontrolować jasność diody LED podłączonej do Raspberry Pi za pomocą PWM.
PWM to coś, z czego wszyscy korzystamy na co dzień, nawet jeśli o tym nie wiemy. Jest to technika prosta i niezwykle użyteczna w wielu zastosowaniach. A co najważniejsze, jest to coś, co Twoje Raspberry Pi może zrobić bez pocenia się. Jak? Spójrzmy.
Co to jest PWM?
Zgodnie z terminologią „modulacja szerokości impulsu” brzmi całkiem fantazyjnie. Ale tak naprawdę mówimy tutaj o wyłączeniu i ponownym włączeniu sygnału elektrycznego – niezwykle szybko. Dlaczego możemy chcieć to zrobić? Po prostu dlatego, że jest to bardzo łatwy sposób symulowania zmiennego sygnału analogowego, bez konieczności uciekania się do niego Raspberry Pi HAT, dodatkilub dodatkowe obwody. W przypadku niektórych zastosowań, takich jak ogrzewanie pieca, napędzanie silnika lub przyciemnianie diody LED, sygnał PWM jest dosłownie nie do odróżnienia od „prawdziwego” napięcia analogowego.
Cykle pracy
Mamy więc serię impulsów podawanych do obciążenia (rzecz, którą napędzamy). Samo to nie jest zbyt przydatne, dopóki nie zaczniemy zmieniać (lub modulować) szerokości tych impulsów. Faza „włączenia” danego okresu włączenia i wyłączenia może zająć od 0 do 100% całkowitego cyklu. Nazywamy ten procent
cykl pracy.Załóżmy na przykład, że mamy sygnał PWM 3 V z cyklem pracy 50%. Średnia moc przechodząca przez diodę LED będzie równa stałemu sygnałowi o napięciu 1,5 V. Zwiększ cykl pracy, a dioda LED stanie się jaśniejsza; naciśnij go, a dioda LED zgaśnie. Możemy generować dźwięk przy użyciu tej samej metody — dlatego wyjście audio w Raspberry Pi może przestać działać, jeśli używasz PWM do innych celów.
PWM na Raspberry Pi
Możesz użyć oprogramowania PWM na każdym pinie GPIO Raspberry Pi. Ale sprzętowe PWM jest dostępne tylko na GPIO12, GPIO13, GPIO18, I GPIO19.
Co za różnica? Cóż, jeśli zamierzasz używać oprogramowania do generowania sygnału, będziesz zużywać cykle procesora. Jednak Twój procesor może mieć lepsze rzeczy do roboty niż nakazywać diodzie LED wyłączanie i włączanie kilkaset razy na sekundę. W rzeczywistości może zostać rozproszony i ugrzęznąć w innych zadaniach, co może poważnie zaburzyć synchronizację PWM.
W związku z tym często lepszym pomysłem jest delegowanie zadania wyspecjalizowanym obwodom. W przypadku Raspberry Pi obwody te znajdują się wewnątrz System na chipie w którym mieści się procesor. Sprzętowe PWM jest często znacznie bardziej precyzyjne i wygodne, dlatego w większości przypadków jest preferowaną opcją. Jeśli chcesz mieć pojęcie o tym, co dzieje się pod maską w chipie Broadcom BCM2711 Raspberry Pi 4, możesz zajrzeć do dokumentacja BCM2711. Rozdział 8 omawia kwestie PWM!
Ściemnianie diody LED
Aby nasza dioda LED działała z naszym Raspberry Pi, musimy wykonać pewne prace prototypowe. Oznacza to dwa elementy: samą diodę LED i rezystor ograniczający prąd, który połączymy z nią szeregowo. Bez rezystora dioda LED może umrzeć w śmierdzącym kłębie dymu, jeśli przepłynie przez nią zbyt duży prąd.
Obliczanie wartości rezystora
Nie ma znaczenia, do którego końca diody LED podłączysz rezystor. Istotna jest wartość rezystora. Raspberry Pi 4 może zapewnić około 16 miliamperów na pin. Więc możemy skorzystaj z prawa Ohma aby obliczyć wartość potrzebnego rezystora.
Prawo to stanowi, że rezystancja powinna być równa napięciu w stosunku do prądu. Znamy napięcie wychodzące z pinu GPIO Pi (3,3 V) i wiemy, jaki powinien być prąd (16 miliamperów, czyli 0,016 ampera). Jeśli podzielimy tę pierwszą przez drugą, otrzymamy 206,25. Teraz, ponieważ będziesz miał trudności ze znalezieniem rezystorów o tej wartości, zamiast tego wybierzmy 220 omów.
Podłącz anodę diody LED (długa nóżka) do GPIO 18 (który jest fizycznym pinem 12 w Raspberry Pi). Podłącz katodę (krótką nóżkę) do dowolnego z pinów uziemiających Pi. Nie zapomnij o rezystorze, gdzieś po drodze. Jesteś teraz gotowy do pracy!
Implementacja PWM na Raspberry Pi
Aby sprzętowy PWM działał na Raspberry Pi, użyjemy biblioteka rpi-hardware-pwm autorstwa Camerona Davidsona-Pilona, przyjęty z kod autorstwa Jeremy’ego Impsona. Zostało to wykorzystane w Pioreaktor (bioreaktor na bazie Pi) – ale dla naszych celów jest to wystarczająco proste.
Najpierw niech edytuj plik config.txtplik znaleziony w /boot informator. Musimy tylko dodać jedną linię: dtoverlay=pwm-2chan. Gdybyśmy chcieli użyć pinów GPIO innych niż 18 i 19, moglibyśmy dodać tutaj kilka dodatkowych argumentów. Na razie zachowajmy prostotę.
Uruchom ponownie Pi i uruchom:
lsmod | grep pwm
To polecenie wyświetla listę wszystkich modułów załadowanych do centralnej części systemu operacyjnego, zwanej jądrem. Tutaj filtrujemy je, aby znaleźć tylko rzeczy PWM, używając grep (to jest polecenie „globalnego drukowania wyrażeń regularnych”).
Jeśli pwm_bcm2835 pojawi się wśród wymienionych modułów, to jesteśmy na dobrej drodze. Już prawie skończyliśmy przygotowania! Pozostaje tylko zainstalować właściwą bibliotekę. Z terminala uruchom:
sudo pip3 install rpi-hardware-pwm
Jesteśmy teraz gotowi, aby zacząć.
Kodowanie obwodu LED PWM
Czas ubrudzić sobie ręce odrobiną kodowanie w Pythonie. Uruchom Thonny'ego i skopiuj poniższy kod. Następnie uderz Uruchomić.
from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
pwm.change_duty_cycle(i)
time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()
Jeśli wszystko będzie w porządku, dioda LED będzie stopniowo jaśniejć, aż do momentu I zmienna licznika osiąga wartość 100. Potem się wyłączy. Co tu się dzieje? Przejdźmy się przez to.
Importujemy odpowiedni fragment sprzętowej biblioteki PWM (wraz z plikiem czas moduł) i zadeklarowanie nowej zmiennej. Możemy ustawić pwm_kanał na 0 lub 1, które odpowiadają odpowiednio pinom 18 i 19 GPIO w Pi.
The Hz wartość możemy ustawić na dowolną częstotliwość (chociaż ostatecznie jesteśmy ograniczeni szybkością zegara Pi). Przy 60 Hz nie powinniśmy widzieć żadnego migotania PWM. Jednak dobrym pomysłem może być rozpoczęcie od bardzo niskiej wartości (np. 10) i stopniowe zwiększanie jej wartości. Zrób to, a będziesz mógł zobaczyć pulsowanie. Nie wierz nam na słowo!
Pracujemy zgodnie z naszym cyklem pracy (I) w górę od 0 do 100 za pomocą pętli for Pythona. Warto zauważyć, że możemy ustawić czas spać argument tak długo, jak chcemy — ponieważ PWM jest obsługiwany sprzętowo, będzie działać za kulisami, niezależnie od tego, jak długo każemy programowi czekać.
Dzięki PWM można dowiedzieć się więcej
Gratulacje! Napisałeś swój pierwszy program PWM. Ale, jak to często bywa w przypadku Raspberry Pi, z tymi rzeczami można wiele zrobić, zwłaszcza jeśli wzbogacisz swoje Raspberry Pi o odpowiedni kapelusz PWM. Nie zadowalaj się więc jedną małą diodą LED. Możesz użyć tej nowej mocy do sterowania silnikami, kodowania wiadomości i generowania dźwięków syntezatora. Świat modulacji czeka!