Naučite kako kontrolirati svjetlinu LED-a spojenog na Raspberry Pi pomoću PWM-a.
PWM je nešto što svi koristimo svaki dan, čak i ako toga ne znamo. To je tehnika koja je jednostavna i nevjerojatno korisna u nizu primjena. Još najbolje, to je nešto što vaš Raspberry Pi može učiniti bez da se oznoji. Kako? Pogledajmo.
Što je PWM?
Kako terminologija kaže, "Pulse-Width Modulation" zvuči prilično otmjeno. Ali sve o čemu zapravo govorimo je isključivanje i ponovno uključivanje električnog signala—izuzetno brzo. Zašto bismo to željeli učiniti? Jednostavno zato što je to vrlo jednostavan način simulacije varijabilnog analognog signala, bez pribjegavanja Raspberry Pi HAT-ovi, dodaci, ili dodatni strujni krug. Za određene primjene, poput grijanja peći, pokretanja motora ili prigušivanja LED-a, PWM signal se doslovno ne razlikuje od "pravog" analognog napona.
Radni ciklusi
Dakle, imamo niz impulsa koji se unose u opterećenje (ono što pokrećemo). Samo ovo nije toliko korisno - sve dok ne počnemo mijenjati (ili modulirati) širinu tih impulsa. Faza "uključenja" određenog razdoblja uključivanja i isključivanja može zauzimati bilo gdje od 0 do 100% ukupnog ciklusa. Ovaj postotak nazivamo
radnog ciklusa.Na primjer, pretpostavimo da imamo 3V PWM signal s radnim ciklusom od 50%. Prosječna količina energije koja prolazi kroz LED diodu bila bi ekvivalentna uvijek uključenom signalu od 1,5 V. Povećajte radni ciklus i LED dioda postaje svjetlija; smanjite i LED se gasi. Možemo generirati zvuk koristeći istu metodu—zbog čega bi audio izlaz na vašem Raspberry Piju mogao prestati funkcionirati ako koristite PWM za druge stvari.
PWM na Raspberry Pi
Možete koristiti softverski PWM na svakom GPIO pinu Raspberry Pi. Ali hardverski PWM dostupan je samo na GPIO12, GPIO13, GPIO18, i GPIO19.
Koja je razlika? Pa, ako ćete koristiti softver za generiranje signala, tada ćete trošiti CPU cikluse. Međutim, vaš CPU možda ima pametnijeg posla nego reći LED-u da se ugasi i uključi nekoliko stotina puta u sekundi. Zapravo, mogli bi ga omesti i zaglaviti drugi zadaci, što može ozbiljno utjecati na vaše PWM tajminge.
Shodno tome, često je bolja ideja delegirati zadatak specijaliziranim sklopovima. U slučaju Raspberry Pi-ja, ovaj sklop živi unutra sustav na čipu u kojem se nalazi CPU. Hardverski PWM često je daleko precizniji i praktičniji, pa je stoga u većini slučajeva preferirana opcija. Ako želite doznati što se događa ispod haube Broadcom BCM2711 čipa Raspberry Pi 4, onda možete pogledati dokumentaciju BCM2711. Poglavlje 8 pokriva PWM stvari!
Prigušivanje LED-a
Da bi naša LED dioda radila s našim Raspberry Pijem, morat ćemo malo napraviti maketu. To znači dvije komponente: sama LED dioda i otpornik za ograničavanje struje, koji ćemo spojiti u seriju s njom. Bez otpornika, vaša LED dioda je u opasnosti da umre u smrdljivom dimu ako kroz nju prođe previše struje.
Određivanje vrijednosti otpornika
Nije važno na koji kraj LED diode spajate otpornik. Ono što je važno je vrijednost otpornika. Raspberry Pi 4 može dati oko 16 miliampera po pinu. Tako da možemo koristiti Ohmov zakon da biste izračunali vrijednost potrebnog otpornika.
Navedeni zakon kaže da otpor treba biti jednak naponu preko struje. Znamo napon koji izlazi iz Pi-jevog GPIO pina (3,3 V) i znamo kolika bi trebala biti struja (16 miliampera ili 0,016 ampera). Ako prvo podijelimo s drugim, dobit ćemo 206,25. Budući da ćete se mučiti s pronalaženjem otpornika ove vrijednosti, uzmimo umjesto toga 220 ohma.
Spojite LED anodu (dugu nogu) na GPIO 18 (što je fizički pin 12 na Raspberry Pi). Spojite katodu (kratku nogu) na bilo koji od Pi pinova za uzemljenje. Ne zaboravite otpornik, negdje duž staze. Sada ste spremni za polazak!
Implementacija PWM-a na Raspberry Pi
Kako bi hardverski PWM radio na Raspberry Piju, koristit ćemo se biblioteka rpi-hardware-pwm od Cameron Davidson-Pilona, prilagođeno iz šifra Jeremyja Impsona. Ovo je korišteno u Pioreaktor (bioreaktor baziran na Pi)—ali dovoljno je jednostavan za naše potrebe.
Prvo, hajdemo uredite config.txtdatoteka, pronađena u /boot imenik. Samo trebamo dodati jedan redak: dtoverlay=pwm-2chan. Ako želimo koristiti GPIO pinove osim 18 i 19, mogli bismo dodati neke dodatne argumente ovdje. Neka za sada bude jednostavno.
Ponovno pokrenite svoj Pi i pokrenite:
lsmod | grep pwm
Ova naredba ispisuje sve module učitane u središnji dio OS-a, koji se zove jezgra. Ovdje ih filtriramo kako bismo pronašli samo PWM stvari, koristeći grep (to je naredba "ispis globalnog regularnog izraza").
Ako pwm_bcm2835 pojavi među navedenim modulima, onda smo na dobrom putu. Skoro smo gotovi s pripremama! Sve što preostaje je instalirati stvarnu biblioteku. Iz terminala pokrenite:
sudo pip3 install rpi-hardware-pwm
Sada smo spremni za početak.
Kodiranje PWM LED kruga
Vrijeme je da zaprljamo ruke s malo kodiranje u Pythonu. Pokrenite Thonnyja i kopirajte sljedeći kod. Zatim udri Trčanje.
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()
Ako je sve u redu, vidjet ćete da LED postupno postaje svjetliji sve dok ja varijabla brojača dosegne 100. Zatim će se isključiti. Što se ovdje događa? Prođimo kroz to.
Uvozimo relevantni dio hardverske PWM biblioteke (zajedno s vrijeme modul) i deklariranje nove varijable. Možemo postaviti pwm_kanal na 0 ili 1, što odgovara GPIO pinovima 18 i 19 na Pi.
The hz vrijednost koju možemo postaviti na bilo koju frekvenciju koju želimo (iako smo u konačnici ograničeni brzinom Pijevog takta). Na 60 Hz ne bismo trebali vidjeti treperenje PWM-a. Ali možda bi bilo dobro započeti s vrlo niskom vrijednošću (kao što je 10) i postupno povećavati. Učinite to i zapravo ćete moći vidjeti kako se pulsevi događaju. Nemojte nam samo vjerovati na riječ!
Odrađujemo svoj radni ciklus (ja) od 0 do 100 koristeći Python for petlju. Vrijedno je napomenuti da možemo postaviti vrijeme.spavati argument koliko god želimo - budući da se PWM-om upravlja u hardveru, radit će iza scene, koliko god dugo kažemo programu da čeka.
Uz PWM možete naučiti više
Čestitamo! Napisali ste svoj prvi PWM program. Ali, kao što je to često slučaj s Raspberry Pijem, postoji mnogo toga što možete učiniti s ovim stvarima, pogotovo ako svoj Raspberry Pi proširite pravim PWM HAT-om. Dakle, nemojte se zadovoljiti jednom malom LED diodom. Ovu novu moć možete koristiti za upravljanje motorima, kodiranje poruka i generiranje tonova sintesajzera. Svijet modulacije čeka!