Uzziniet, kā kontrolēt gaismas diodes spilgtumu, kas savienots ar Raspberry Pi, izmantojot PWM.
PWM ir kaut kas, ko mēs visi lietojam katru dienu, pat ja mēs to nezinām. Tā ir vienkārša un neticami noderīga tehnika dažādās lietojumprogrammās. Pats labākais, ka jūsu Raspberry Pi var paveikt bez svīšanas. Kā? Paskatīsimies.
Kas ir PWM?
Kā terminoloģija iet, "impulsa platuma modulācija" izklausās diezgan iedomātā. Bet viss, par ko mēs patiesībā runājam, ir elektriskā signāla izslēgšana un atkal ieslēgšana — ārkārtīgi ātri. Kāpēc mēs varētu vēlēties to darīt? Vienkārši tāpēc, ka tas ir ļoti vienkāršs veids, kā simulēt mainīgu analogo signālu, neizmantojot to Raspberry Pi Cepures, papildinājumi, vai papildu shēmas. Dažiem lietojumiem, piemēram, plīts sildīšanai, motora vadīšanai vai gaismas diodes aptumšināšanai, PWM signālu burtiski nevar atšķirt no "īstā" analogā sprieguma.
Darba cikli
Tātad, mums ir virkne impulsu, kas tiek ievadīti kravai (lieta, ar kuru mēs braucam). Tas vien nav tik noderīgs - līdz mēs sākam mainīt (vai modulēt) šo impulsu platumu. Noteiktā ieslēgšanas perioda "ieslēgšanās" fāze var aizņemt no 0 līdz 100% no kopējā cikla. Mēs šo procentuālo daļu saucam par
cikls.Piemēram, pieņemsim, ka mums ir 3 V PWM signāls ar darba ciklu 50%. Vidējais jaudas daudzums, kas iet caur LED, būtu līdzvērtīgs vienmēr ieslēgtam 1,5 V signālam. Palieliniet darba ciklu, un gaismas diode kļūst spilgtāka; sastādiet to, un gaismas diode nodziest. Mēs varam ģenerēt audio, izmantojot to pašu metodi, tāpēc Raspberry Pi audio izeja var pārstāt darboties, ja PWM izmantojat citām lietām.
PWM uz Raspberry Pi
Programmatūras PWM varat izmantot katrā Raspberry Pi GPIO tapā. Bet aparatūras PWM ir pieejams tikai GPIO12, GPIO13, GPIO18, un GPIO19.
Kāda atšķirība? Ja signāla ģenerēšanai izmantosiet programmatūru, tad patērēsit CPU ciklus. Tomēr jūsu centrālajam procesoram var būt labākas lietas, nekā likt gaismas diodei izslēgties un ieslēgties vairākus simtus reižu sekundē. Faktiski tas var kļūt apjucis un iestrēgts ar citiem uzdevumiem, kas var nopietni sajaukt jūsu PWM laiku.
Līdz ar to bieži vien ir labāk deleģēt uzdevumu specializētai shēmai. Raspberry Pi gadījumā šī shēma dzīvo iekšpusē sistēma mikroshēmā kurā atrodas centrālais procesors. Aparatūras PWM bieži ir daudz precīzāka un ērtāka, un tāpēc vairumā gadījumu tā ir vēlamā opcija. Ja vēlaties iegūt priekšstatu par to, kas notiek Raspberry Pi 4 Broadcom BCM2711 mikroshēmā zem pārsega, varat apskatīt BCM2711 dokumentāciju. 8. nodaļa aptver PWM lietas!
Gaismas diodes aptumšošana
Lai mūsu gaismas diode darbotos ar Raspberry Pi, mums būs jāveic dažas izmaiņas. Tas nozīmē divus komponentus: pašu LED un strāvu ierobežojošu rezistoru, ko mēs ar to savienosim virknē. Bez rezistora jūsu gaismas diode var nomirt nepatīkami smakojošā dūmu pūtī, ja caur to iet pārāk daudz strāvas.
Rezistora vērtības noteikšana
Nav nozīmes tam, kuram LED galam pievienojat rezistoru. Svarīga ir rezistora vērtība. Raspberry Pi 4 var nodrošināt aptuveni 16 miliamperus uz vienu tapu. Tātad, mēs varam izmantojiet Ohma likumu lai aprēķinātu nepieciešamā rezistora vērtību.
Minētais likums nosaka, ka pretestībai jābūt vienādai ar spriegumu pār strāvu. Mēs zinām spriegumu, kas nāk no Pi GPIO tapas (3,3 V), un mēs zinām, kādai jābūt strāvai (16 miliamperi jeb 0,016 ampēri). Ja dalām pirmo ar otro, iegūstam 206.25. Tagad, tā kā jums būs grūti atrast šādas vērtības rezistorus, tā vietā izmantosim 220 omi.
Pievienojiet LED anodu (garu kāju) ar GPIO 18 (kas ir Raspberry Pi fiziskā tapa 12). Savienojiet katodu (īso kāju) ar jebkuru no Pi zemējuma tapām. Neaizmirstiet par rezistoru, kaut kur gar ceļu. Tagad esat gatavs doties!
PWM ieviešana uz Raspberry Pi
Lai aparatūras PWM darbotos Raspberry Pi, mēs izmantosim rpi-hardware-pwm bibliotēka no Cameron Davidson-Pilon, pielāgots no Džeremija Impsona kods. Tas ir izmantots Pioreaktors (Pi bāzes bioreaktors), taču tas ir pietiekami vienkāršs mūsu vajadzībām.
Pirmkārt, pieņemsim rediģējiet failu config.txtfails, kas atrodams /boot direktoriju. Mums tikai jāpievieno viena rinda: dtoverlay=pwm-2chan. Ja vēlamies izmantot GPIO tapas, kas nav 18 un 19, šeit varētu pievienot dažus papildu argumentus. Pagaidām lietas būs vienkāršas.
Pārstartējiet Pi un palaidiet:
lsmod | grep pwm
Šajā komandā ir uzskaitīti visi moduļi, kas ielādēti OS centrālajā daļā, ko sauc par kodolu. Šeit mēs tos filtrējam, lai atrastu tikai PWM saturu, izmantojot grep (tā ir "globālās regulārās izteiksmes drukāšana") komandu.
Ja pwm_bcm2835 parādās starp uzskaitītajiem moduļiem, tad mēs esam uz pareizā ceļa. Esam gandrīz pabeiguši gatavošanos! Atliek tikai instalēt faktisko bibliotēku. No termināļa palaidiet:
sudo pip3 install rpi-hardware-pwm
Tagad esam gatavi sākt.
PWM LED shēmas kodēšana
Laiks nosmērēt rokas ar mazumiņu kodēšana Python. Iedarbiniet Toniju un iekopējiet šādu kodu. Tad sit Skrien.
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()
Ja viss ir kārtībā, jūs redzēsiet, ka gaismas diode pakāpeniski kļūs gaišāka, līdz i skaitītāja mainīgais sasniedz 100. Tad tas izslēgsies. Kas šeit notiek? Izstaigāsim to.
Mēs importējam attiecīgo aparatūras PWM bibliotēkas daļu (kopā ar laiks modulis) un jauna mainīgā deklarēšana. Mēs varam iestatīt pwm_kanāls uz 0 vai 1, kas atbilst attiecīgi GPIO 18. un 19. tapām uz Pi.
The hz vērtību, ko varam iestatīt jebkurai frekvencei, kas mums patīk (lai gan galu galā mūs ierobežo Pi pulksteņa ātrums). Pie 60 Hz mums nevajadzētu redzēt nekādu PWM mirgošanu. Taču varētu būt laba ideja sākt ar ļoti zemu vērtību (piemēram, 10) un pakāpeniski mainīt lietas uz augšu. Dariet to, un jūs faktiski varēsit redzēt, kā notiek impulsi. Neuztver tikai mūsu vārdus!
Mēs strādājam savu darba ciklu (i) uz augšu no 0 līdz 100 izmantojot Python for cilpu. Ir vērts atzīmēt, ka mēs varam iestatīt laiks.gulēt argumentu tik ilgi, cik mums patīk — tā kā PWM tiek apstrādāts aparatūrā, tas darbosies aizkulisēs neatkarīgi no tā, cik ilgi mēs liksim programmai gaidīt.
Ar PWM ir vēl ko mācīties
Apsveicam! Jūs esat uzrakstījis savu pirmo PWM programmu. Taču, kā tas bieži notiek ar Raspberry Pi, ar šīm lietām varat darīt daudz, it īpaši, ja papildināsit savu Raspberry Pi ar pareizo PWM CEPURĒTI. Tāpēc neapmierinieties ar vienu mazu LED. Varat izmantot šo jauno jaudu, lai vadītu motorus, kodētu ziņojumus un ģenerētu sintezatora signālus. Modulācijas pasaule gaida!