Sužinokite, kaip valdyti šviesos diodo, prijungto prie Raspberry Pi, ryškumą naudojant PWM.

PWM yra kažkas, ką mes visi naudojame kasdien, net jei to nežinome. Tai paprastas ir neįtikėtinai naudingas metodas įvairiose srityse. Dar geriausia, kad tai jūsų Raspberry Pi gali padaryti neišmušdamas prakaito. Kaip? Pažiūrėkime.

Kas yra PWM?

Kalbant apie terminiją, „impulso pločio moduliacija“ skamba gana įmantriai. Tačiau viskas, apie ką mes čia kalbame, yra elektros signalo išjungimas ir vėl įjungimas – itin greitai. Kodėl mes galime tai daryti? Tiesiog todėl, kad tai labai paprastas būdas imituoti kintamą analoginį signalą, nesinaudojant juo Raspberry Pi HATs, priedai, arba papildomos grandinės. Tam tikroms programoms, pvz., kaitinant viryklę, varant variklį ar pritemdant šviesos diodą, PWM signalas tiesiogine prasme neatskiriamas nuo „tikrosios“ analoginės įtampos.

Darbo ciklai

Taigi, mes turime daugybę impulsų, kurie tiekiami į krovinį (daiktą, kurį mes vairuojame). Vien tai nėra labai naudinga – kol nepradėsime keisti (arba moduliuoti) tų impulsų plotį. Tam tikro įjungimo laikotarpio „įjungimo“ fazė gali užimti nuo 0 iki 100 % viso ciklo. Šį procentą vadiname

instagram viewer
darbo ciklas.

Pavyzdžiui, tarkime, kad turime 3 V PWM signalą, kurio darbo ciklas yra 50%. Vidutinis energijos kiekis, einantis per šviesos diodą, būtų lygus visada įjungtam 1,5 V signalui. Padidinkite darbo ciklą ir šviesos diodas taps ryškesnis; surinkite jį ir šviesos diodas užges. Garsą galime generuoti naudodami tą patį metodą, todėl jūsų Raspberry Pi garso išvestis gali nustoti veikti, jei PWM naudojate kitiems dalykams.

PWM „Raspberry Pi“.

Galite naudoti programinę įrangą PWM kiekviename Raspberry Pi GPIO kaištyje. Tačiau aparatinė PWM galima tik naudojant GPIO12, GPIO13, GPIO18, ir GPIO19.

Koks skirtumas? Na, jei signalui generuoti naudosite programinę įrangą, sunaudosite procesoriaus ciklus. Tačiau jūsų procesorius gali turėti geresnių dalykų, nei liepti šviesos diodui išsijungti ir įsijungti kelis šimtus kartų per sekundę. Tiesą sakant, jis gali išsiblaškyti ir užstrigti dėl kitų užduočių, kurios gali rimtai sujaukti jūsų PWM laiką.

Todėl dažnai geriau deleguoti užduotį specializuotai grandinei. „Raspberry Pi“ atveju ši grandinė gyvena viduje „System on Chip“. kuriame yra centrinis procesorius. Aparatinė PWM dažnai yra daug tikslesnė ir patogesnė, todėl daugeliu atvejų tai yra pageidaujama parinktis. Jei norite suprasti, kas vyksta po Raspberry Pi 4 Broadcom BCM2711 lusto gaubtu, galite pažiūrėti BCM2711 dokumentacija. 8 skyrius apima PWM dalykus!

Šviesos diodo pritemdymas

Kad mūsų šviesos diodas veiktų su Raspberry Pi, turėsime šiek tiek pakoreguoti. Tai reiškia du komponentus: patį šviesos diodą ir srovę ribojantį rezistorių, kurį sujungsime nuosekliai. Be rezistoriaus, jūsų šviesos diodas gali mirti nuo nemalonaus kvapo dūmų, jei per jį praeis per daug srovės.

Rezistoriaus vertės nustatymas

Nesvarbu, prie kurio LED galo prijungsite rezistorių. Svarbiausia yra rezistoriaus vertė. Raspberry Pi 4 gali užtikrinti apie 16 miliamperų vienam kaiščiui. Taigi, mes galime naudokite Omo dėsnį nustatyti reikalingo rezistoriaus vertę.

Minėtas įstatymas teigia, kad varža turi būti lygi įtampai virš srovės. Mes žinome įtampą, išeinančią iš Pi GPIO kaiščio (3,3 V), ir žinome, kokia turi būti srovė (16 miliamperų arba 0,016 amperų). Jei pirmąjį padalinsime iš pastarojo, gausime 206,25. Dabar, kadangi jums bus sunku rasti tokios vertės rezistorius, pasirinkkime 220 omų.

Prijunkite LED anodą (ilgą koją) prie GPIO 18 (tai yra fizinis Raspberry Pi 12 kaištis). Katodą (trumpą koją) prijunkite prie bet kurio Pi įžeminimo kaiščio. Nepamirškite rezistoriaus kažkur kelyje. Dabar esate pasiruošę eiti!

PWM diegimas Raspberry Pi

Kad aparatinė PWM veiktų su Raspberry Pi, naudosime rpi-hardware-pwm biblioteka iš Cameron Davidson-Pilon, pritaikyta iš kodas Jeremy Impson. Tai buvo naudojama Pioreaktorius (Pi pagrindu sukurtas bioreaktorius), tačiau tai pakankamai paprasta mūsų tikslams.

Pirma, tegul redaguoti config.txtfailas, rastas /boot katalogas. Mums tereikia pridėti vieną eilutę: dtoverlay=pwm-2chan. Jei norėtume naudoti kitus nei 18 ir 19 GPIO kaiščius, čia galėtume pridėti keletą papildomų argumentų. Kol kas tegul viskas yra paprasta.

Iš naujo paleiskite Pi ir paleiskite:

lsmod | grep pwm

Ši komanda išvardija visus modulius, įkeltus į centrinę OS dalį, vadinamą branduoliu. Čia mes juos filtruojame, kad rastume tik PWM medžiagą, naudodami grep (tai yra „pasaulinės reguliariosios išraiškos spausdinimas“) komandą.

Jeigu pwm_bcm2835 rodomas tarp išvardytų modulių, tada einame teisingu keliu. Mes beveik baigėme ruoštis! Lieka tik įdiegti tikrąją biblioteką. Iš terminalo paleiskite:

sudo pip3 install rpi-hardware-pwm

Dabar esame pasiruošę pradėti.

PWM LED grandinės kodavimas

Laikas šiek tiek susitepti rankas kodavimas Python. Įjunkite Thonny ir nukopijuokite šį kodą. Tada paspauskite Bėk.

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()

Jei viskas bus gerai, pamatysite, kad šviesos diodas palaipsniui ryškės, kol bus i skaitiklio kintamasis pasiekia 100. Tada jis išsijungs. Kas čia vyksta? Eikime per jį.

Importuojame atitinkamą aparatinės įrangos PWM bibliotekos dalį (kartu su laikas modulis) ir paskelbti naują kintamąjį. Galime nustatyti pwm_channel iki 0 arba 1, kurie atitinkamai atitinka 18 ir 19 GPIO kaiščius ant Pi.

The hz vertę, kurią galime nustatyti į bet kokį mums patinkantį dažnį (nors galiausiai mus riboja Pi laikrodžio greitis). Esant 60 Hz, neturėtume matyti jokio PWM mirgėjimo. Tačiau gali būti gera idėja pradėti nuo labai mažos vertės (pvz., 10) ir palaipsniui keisti dalykus. Padarykite tai ir iš tikrųjų pamatysite vykstančius pulsus. Netikėkite mūsų žodžio!

Mes dirbame pagal darbo ciklą (i) nuo 0 iki 100 naudojant Python for ciklus. Verta paminėti, kad galime nustatyti laikas.miegas argumentas tiek, kiek norime – kadangi PWM tvarkomas aparatinėje įrangoje, jis veiks užkulisiuose, kad ir kaip ilgai lieptume programai laukti.

Su PWM galima daugiau sužinoti

Sveikiname! Parašėte savo pirmąją PWM programą. Tačiau, kaip dažnai būna su Raspberry Pi, su šiais dalykais galite nuveikti daug, ypač jei papildysite savo Raspberry Pi naudodami tinkamą PWM SKRYBĘ. Taigi, nepasitenkinkite vienu mažu šviesos diodu. Šią naują galią galite naudoti varikliams valdyti, pranešimams koduoti ir sintezatoriaus tonams generuoti. Laukia moduliavimo pasaulis!