Naučite se nadzorovati svetlost LED, povezane z Raspberry Pi s pomočjo PWM.
PWM je nekaj, kar vsi uporabljamo vsak dan, tudi če se tega ne zavedamo. To je tehnika, ki je enostavna in neverjetno uporabna v številnih aplikacijah. Najboljše pa je, da je to nekaj, kar lahko vaš Raspberry Pi naredi, ne da bi se preznojil. kako Pa si poglejmo.
Kaj je PWM?
Glede na terminologijo se "impulzno-širinska modulacija" sliši precej domiselno. Toda vse, o čemer v resnici govorimo, je izklop in ponovni vklop električnega signala – izjemno hitro. Zakaj bi morda želeli to narediti? Preprosto zato, ker je to zelo enostaven način za simulacijo spremenljivega analognega signala, ne da bi se zatekli k temu Raspberry Pi HAT, dodatki, ali dodatno vezje. Pri določenih aplikacijah, kot je ogrevanje peči, pogon motorja ali zatemnitev LED, se signal PWM dobesedno ne razlikuje od "prave" analogne napetosti.
Delovni cikli
Torej, imamo niz impulzov, ki se dovajajo v obremenitev (stvar, ki jo poganjamo). Samo to ni tako uporabno - dokler ne začnemo spreminjati (ali modulirati) širine teh impulzov. Faza "vklopa" določenega obdobja vklopa in izklopa lahko zavzame od 0 do 100 % celotnega cikla. Ta odstotek imenujemo
delovni cikel.Recimo, da imamo signal 3V PWM z delovnim ciklom 50 %. Povprečna količina energije, ki gre skozi LED, bi bila enakovredna vedno vključenemu signalu 1,5 V. Povečajte delovni cikel in LED postane svetlejša; zavrtite navzdol in lučka LED se zatemni. Zvok lahko ustvarimo z isto metodo - zato lahko zvočni izhod na vašem Raspberry Pi preneha delovati, če uporabljate PWM za druge stvari.
PWM na Raspberry Pi
Programsko opremo PWM lahko uporabite na vsakem priključku GPIO Raspberry Pi. Toda strojna oprema PWM je na voljo samo na GPIO12, GPIO13, GPIO18, in GPIO19.
Kaj je razlika? No, če boste za generiranje signala uporabljali programsko opremo, boste porabili cikle procesorja. Vendar ima vaš CPE morda kaj pametnejšega od tega, da ukaže LED, naj se izklopi in prižge nekaj stokrat na sekundo. Pravzaprav ga lahko zmotijo in zataknejo druge naloge, kar lahko resno vpliva na vaše čase PWM.
Posledično je pogosto boljša ideja, da nalogo prenesete na specializirano vezje. V primeru Raspberry Pi je to vezje v notranjosti sistem na čipu v katerem je CPU. Strojni PWM je pogosto veliko bolj natančen in priročen, zato je v večini primerov prednostna možnost. Če želite vedeti, kaj se dogaja pod pokrovom čipa Broadcom BCM2711 Raspberry Pi 4, si lahko ogledate dokumentacijo BCM2711. Poglavje 8 pokriva stvari o PWM!
Zatemnitev LED
Da bo naša LED delovala z našim Raspberry Pi, bomo morali narediti nekaj vpenjanja. To pomeni dve komponenti: samo LED in upor za omejevanje toka, ki ga bomo serijsko povezali z njo. Brez upora obstaja nevarnost, da vaša LED dioda umre v smrdljivem oblačku dima, če skozi njo teče preveč toka.
Izračunavanje vrednosti upora
Ni pomembno, na kateri konec LED diode priključite upor. Pomembna je vrednost upora. Raspberry Pi 4 lahko zagotovi približno 16 miliamperov na zatič. Torej lahko uporabite Ohmov zakon da določite vrednost potrebnega upora.
Omenjeni zakon določa, da mora biti upor enak napetosti nad tokom. Poznamo napetost, ki prihaja iz pina GPIO Pi (3,3 V), in vemo, kakšen mora biti tok (16 miliamperov ali 0,016 amperov). Če prvega delimo z drugim, dobimo 206,25. Zdaj, ker boste težko našli upore te vrednosti, pojdimo raje na 220 ohmov.
Priključite anodo LED (dolga noga) na GPIO 18 (ki je fizični pin 12 na Raspberry Pi). Povežite katodo (kratko nogo) s katerim koli od ozemljitvenih zatičev Pi. Ne pozabite na upor, nekje ob poti. Zdaj ste pripravljeni na odhod!
Implementacija PWM na Raspberry Pi
Da bi strojni PWM deloval na Raspberry Pi, bomo uporabili knjižnica rpi-hardware-pwm Camerona Davidson-Pilona, prirejeno po koda Jeremy Impson. To je bilo uporabljeno v Pioreaktor (bioreaktor na osnovi Pi) – vendar je dovolj preprost za naše namene.
Najprej, dajmo uredi config.txtdatoteko, najdeno v /boot imenik. Dodati moramo samo eno vrstico: dtoverlay=pwm-2chan. Če bi želeli uporabiti zatiče GPIO, ki niso 18 in 19, bi lahko tukaj dodali nekaj dodatnih argumentov. Za zdaj naj bodo stvari preproste.
Znova zaženite svoj Pi in zaženite:
lsmod | grep pwm
Ta ukaz izpiše seznam vseh modulov, naloženih v osrednji del OS, imenovan jedro. Tukaj jih filtriramo, da najdemo samo stvari PWM, z uporabo grep (to je ukaz "tiskanje globalnega regularnega izraza").
če pwm_bcm2835 se prikaže med navedenimi moduli, potem smo na pravi poti. Skoraj smo končali s pripravami! Vse, kar ostane, je namestitev dejanske knjižnice. Iz terminala zaženite:
sudo pip3 install rpi-hardware-pwm
Zdaj smo pripravljeni na začetek.
Kodiranje vezja LED PWM
Čas je, da si malo umažemo roke kodiranje v Pythonu. Zaženite Thonnyja in kopirajte naslednjo kodo. Potem udari Teči.
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()
Če je vse v redu, boste videli, da LED postopoma postaja svetlejša, dokler jaz spremenljivka števca doseže 100. Potem se bo izklopil. Kaj se tukaj dogaja? Sprehodimo se skozi to.
Uvažamo ustrezen del knjižnice PWM strojne opreme (skupaj s čas modul) in deklariranje nove spremenljivke. Lahko nastavimo pwm_kanal na 0 ali 1, ki ustrezata zatičem GPIO 18 in 19 na Pi.
The hz vrednost, ki jo lahko nastavimo na poljubno frekvenco (čeprav smo na koncu omejeni s taktom Pi). Pri 60 Hz ne bi smeli videti utripanja PWM. Morda pa bi bilo dobro začeti z zelo nizko vrednostjo (npr. 10) in postopoma dvigovati stvari. Naredite to in dejansko boste lahko videli, kako se utripi dogajajo. Ne verjemite nam na besedo!
Delamo svoj delovni cikel (jaz) od 0 do 100 z uporabo zanke Python for. Omeniti velja, da lahko nastavimo čas.spanje argument, kolikor dolgo želimo – ker se PWM obravnava v strojni opremi, bo deloval v zakulisju, ne glede na to, kako dolgo programu rečemo, naj počaka.
S PWM se lahko naučite več
čestitke! Napisali ste svoj prvi program PWM. Toda, kot se pogosto zgodi z Raspberry Pi, lahko s temi stvarmi naredite veliko, še posebej, če svoj Raspberry Pi nadgradite s pravim PWM HAT. Torej, ne bodite zadovoljni z eno majhno LED. To novo moč lahko uporabite za krmiljenje motorjev, kodiranje sporočil in ustvarjanje tonov sintetizatorja. Čaka vas svet modulacije!