Siit saate teada, kuidas juhtida PWM-i abil Raspberry Pi-ga ühendatud LED-i heledust.
PWM on midagi, mida me kõik kasutame iga päev, isegi kui me seda ei tea. See on lihtne ja paljudes rakendustes uskumatult kasulik tehnika. Mis veel parim, see on midagi, mida teie Raspberry Pi saab teha ilma higistamata. Kuidas? Heidame pilgu peale.
Mis on PWM?
Nagu terminoloogia ütleb, kõlab "impulsi laiuse modulatsioon" üsna uhke. Aga kõik, millest me siin tegelikult räägime, on elektrisignaali välja- ja uuesti sisselülitamine – ülikiiresti. Miks me võiksime seda teha? Lihtsalt sellepärast, et see on väga lihtne viis muutuva analoogsignaali simuleerimiseks ilma seda kasutamata Raspberry Pi MÜTSID, lisandmoodulidvõi lisavooluringid. Teatud rakenduste puhul, nagu ahju kütmine, mootori juhtimine või LED-i hämardamine, on PWM-signaal sõna otseses mõttes eristamatu "päris" analoogpingest.
Töötsüklid
Niisiis, meil on koormasse (asi, millega me juhime) söödetakse impulsse. See üksi pole nii kasulik – kuni me hakkame nende impulsside laiust muutma (või moduleerima). Teatud sisselülitusperioodi "sisse" faas võib võtta 0–100% kogu tsüklist. Me nimetame seda protsenti
töötsükkel.Oletame näiteks, et meil on 3 V PWM-signaal, mille töötsükkel on 50%. LED-i läbiv keskmine võimsus oleks võrdne alati sisse lülitatud 1,5 V signaaliga. Vända töötsükkel üles ja LED muutub heledamaks; vali see alla ja LED tuhmub. Saame heli genereerida sama meetodiga – seepärast võib teie Raspberry Pi heliväljund lakata töötamast, kui kasutate PWM-i muudeks asjadeks.
PWM Raspberry Pi-l
Saate kasutada tarkvara PWM-i igal Raspberry Pi GPIO-viiul. Kuid riistvara PWM on saadaval ainult seadmes GPIO12, GPIO13, GPIO18, ja GPIO19.
Mis vahet sellel on? Noh, kui kavatsete kasutada signaali genereerimiseks tarkvara, kulub teil protsessori tsükleid. Teie protsessoril võib aga olla paremaid asju, kui käskida LED-il mitusada korda sekundis välja ja sisse lülitada. Tegelikult võib see häirida ja takerduda muude ülesannete tõttu, mis võivad teie PWM-i ajastustega tõsiselt segada.
Seetõttu on sageli parem mõte delegeerida ülesanne spetsialiseeritud vooluringidele. Raspberry Pi puhul elab see vooluring sees süsteem kiibil kus asub CPU. Riistvaraline PWM on sageli palju täpsem ja mugavam ning seetõttu on see enamikul juhtudel eelistatud valik. Kui soovite aimu, mis Raspberry Pi 4 Broadcom BCM2711 kiibis kapoti all toimub, siis võite vaadata BCM2711 dokumentatsiooni. 8. peatükk hõlmab PWM-i asju!
LED-i hämardamine
Selleks, et LED-tuli Raspberry Pi-ga töötaks, tuleb meil veidi lahti teha. See tähendab kahte komponenti: LED ise ja voolu piirav takisti, mille me sellega järjestikku ühendame. Ilma takistita on teie LED-il oht halvasti lõhnava suitsu sisse surra, kui seda läbib liiga palju voolu.
Takisti väärtuse väljatöötamine
Pole tähtis, millise LED-i otsaga takisti ühendate. Oluline on takisti väärtus. Raspberry Pi 4 suudab pakkuda umbes 16 milliamprit kontakti kohta. Nii me saame kasutage Ohmi seadust vajaliku takisti väärtuse arvutamiseks.
Nimetatud seadus ütleb, et takistus peab võrduma pingega üle voolu. Teame Pi GPIO-pistikust väljuvat pinget (3,3 V) ja teame, milline peaks olema vool (16 milliamprit või 0,016 amprit). Kui jagame esimese teisega, saame 206,25. Kuna teil on selle väärtusega takistite leidmisega raskusi, proovime selle asemel 220 oomi.
Ühendage LED-i anood (pikk jalg). GPIO 18 (mis on Raspberry Pi füüsiline tihvt 12). Ühendage katood (lühike jalg) mis tahes Pi maandustihvtiga. Ärge unustage takistit kuskil tee ääres. Nüüd olete valmis minema!
PWM-i rakendamine Raspberry Pi-s
Raspberry Pi riistvara PWM-i tööle panemiseks kasutame rpi-hardware-pwm raamatukogu Cameron Davidson-Pilonilt, kohandatud alates kood Jeremy Impsonilt. Seda on kasutatud Pioreaktor (Pi-põhine bioreaktor), kuid see on meie eesmärkide jaoks piisavalt lihtne.
Esiteks, lähme muutke faili config.txtfail, mis on leitud /boot kataloog. Peame lihtsalt lisama ühe rea: dtoverlay=pwm-2chan. Kui sooviksime kasutada muid GPIO kontakte peale 18 ja 19, võiksime siia lisada mõned täiendavad argumendid. Jätkame praegu asjad lihtsaks.
Taaskäivitage oma Pi ja käivitage:
lsmod | grep pwm
See käsk loetleb kõik OS-i keskossa, mida nimetatakse kerneliks, laaditud moodulid. Siin filtreerime need, et leida ainult PWM-kraam, kasutades grep (see on "globaalne regulaaravaldise print") käsk.
Kui pwm_bcm2835 kuvatakse loetletud moodulite hulgas, siis oleme õigel teel. Oleme valmistumisega peaaegu valmis! Jääb üle vaid tegelik raamatukogu installida. Käivitage terminalist:
sudo pip3 install rpi-hardware-pwm
Oleme nüüd alustamiseks valmis.
PWM LED-ahela kodeerimine
Aeg natuke käsi määrida kodeerimine Pythonis. Käivitage Thonny ja kopeerige järgmine kood. Siis löö Jookse.
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()
Kui kõik on korras, näete, et LED muutub järk-järgult heledamaks, kuni i loenduri muutuja jõuab 100-ni. Siis lülitub see välja. Mis siin toimub? Jalutame selle läbi.
Impordime riistvara PWM-teegi asjakohase osa (koos aega moodul) ja uue muutuja deklareerimine. Saame määrata pwm_kanal 0-ni või 1-ni, mis vastavad vastavalt Pi GPIO tihvtidele 18 ja 19.
The hz väärtuse, mille saame seada mis tahes sagedusele, mis meile meeldib (kuigi meid piirab lõpuks Pi taktsagedus). 60 Hz juures ei tohiks me PWM-i virvendust näha. Kuid võib olla hea mõte alustada väga madalast väärtusest (nt 10) ja järk-järgult asju tõsta. Tehke seda ja näete tegelikult pulssi toimumas. Ärge lihtsalt võtke meie sõna!
Töötame oma töötsükli (i) 0 kuni 100 kasutades Pythoni tsüklit. Väärib märkimist, et saame määrata aeg.uni argumendiks nii kaua, kui meile meeldib – kuna PWM-i käsitletakse riistvaras, töötab see kulisside taga, olenemata sellest, kui kaua me käsime programmil oodata.
PWM-iga on rohkem õppida
Palju õnne! Olete kirjutanud oma esimese PWM-programmi. Kuid nagu Raspberry Pi puhul sageli juhtub, saate selle kraamiga palju ära teha, eriti kui täiendate oma Raspberry Pi-d õige PWM HATiga. Nii et ärge rahulduge ühe väikese LED-iga. Seda uut võimsust saate kasutada mootorite juhtimiseks, sõnumite kodeerimiseks ja süntesaatoritoonide genereerimiseks. Modulatsioonimaailm ootab!