Ismerje meg, hogyan szabályozhatja a Raspberry Pi-hez csatlakoztatott LED fényerejét PWM segítségével.

A PWM-et mindannyian mindennap használjuk, még ha nem is ismerjük. Ez egy olyan technika, amely egyszerű és hihetetlenül hasznos számos alkalmazásban. A legjobb még az, hogy ez olyasvalami, amit a Raspberry Pi megtehet anélkül, hogy izzadna. Hogyan? Lássuk.

Mi az a PWM?

Ahogy a terminológia tartja, az "impulzusszélesség-moduláció" nagyon elegánsan hangzik. De valójában csak arról beszélünk, hogy ki- és újra bekapcsoljuk az elektromos jelet – rendkívül gyorsan. Miért akarjuk ezt megtenni? Egyszerűen azért, mert ez egy nagyon egyszerű módja egy változó analóg jel szimulációjának, anélkül, hogy igénybe vennénk Raspberry Pi HAT-ok, kiegészítők, vagy extra áramkör. Bizonyos alkalmazásoknál, mint például a tűzhely fűtése, a motor meghajtása vagy a LED tompítása, a PWM jel szó szerint megkülönböztethetetlen a "valódi" analóg feszültségtől.

Munkaciklusok

Tehát van egy sor impulzusunk, amely egy rakományba kerül (az a dolog, amit mi vezetünk). Ez önmagában nem olyan hasznos – amíg el nem kezdjük változtatni (vagy modulálni) az impulzusok szélességét. Egy adott kikapcsolási időszak „be” fázisa a teljes ciklus 0–100%-át foglalhatja el. Ezt a százalékot nevezzük a

instagram viewer
munkaciklus.

Tegyük fel például, hogy van egy 3 V-os PWM jelünk 50%-os munkaciklussal. A LED-en átmenő átlagos teljesítmény 1,5 V-os mindig bekapcsolt jelnek felel meg. Hajtsa fel a munkaciklust, és a LED világosabb lesz; tárcsázza le, és a LED elhalványul. Ugyanezzel a módszerrel tudunk hangot generálni – ezért előfordulhat, hogy a Raspberry Pi hangkimenete leáll, ha más dolgokra PWM-et használ.

PWM a Raspberry Pi-n

Használhat szoftveres PWM-et a Raspberry Pi minden GPIO tűjén. De a hardveres PWM csak a következő helyen érhető el GPIO12, GPIO13, GPIO18, és GPIO19.

Mi a különbség? Nos, ha szoftvert fog használni a jel generálásához, akkor CPU-ciklusokat fog fogyasztani. A CPU-nak azonban jobb dolga is lehet, mint másodpercenként több százszor ki- és bekapcsolni a LED-et. Valójában elvonhatja a figyelmét és elakadhat más feladatok miatt, amelyek súlyosan összezavarhatják a PWM időzítését.

Következésképpen gyakran jobb ötlet a feladatot speciális áramkörökre ruházni. A Raspberry Pi esetében ez az áramkör belül él a System on Chip amelyben a CPU található. A hardveres PWM gyakran sokkal pontosabb és kényelmesebb, ezért a legtöbb esetben ez a preferált lehetőség. Ha szeretné tudni, hogy mi történik a motorháztető alatt a Raspberry Pi 4 Broadcom BCM2711 chipjében, akkor nézze meg a BCM2711 dokumentációját. A 8. fejezet a PWM-ről szól!

LED tompítása

Ahhoz, hogy a LED-ünk működjön a Raspberry Pi-vel, el kell végeznünk egy kis feldolgozást. Ez két komponenst jelent: magát a LED-et és egy áramkorlátozó ellenállást, amit sorba kötünk vele. Ellenállás nélkül fennáll annak a veszélye, hogy a LED belehal egy bűzös füstbe, ha túl sok áram megy át rajta.

Az ellenállás értékének meghatározása

Nem mindegy, hogy a LED melyik végére csatlakoztatod az ellenállást. Ami számít, az az ellenállás értéke. A Raspberry Pi 4 körülbelül 16 milliampert tud biztosítani tűnként. Szóval mi tudunk használja az Ohm-törvényt hogy kiszámolja a szükséges ellenállás értékét.

Az említett törvény kimondja, hogy az ellenállásnak meg kell egyeznie az áram feletti feszültséggel. Ismerjük a Pi GPIO tűjéből kilépő feszültséget (3,3 V), és tudjuk, hogy mekkora legyen az áramerősség (16 milliamper vagy 0,016 amper). Ha az előbbit elosztjuk az utóbbival, 206,25-öt kapunk. Most, mivel nehéz lesz ilyen értékű ellenállást találni, válasszuk inkább a 220 ohmost.

Csatlakoztassa a LED anódját (hosszú lábát). GPIO 18 (ami a Raspberry Pi 12-es érintkezője). Csatlakoztassa a katódot (rövid láb) a Pi bármely földelt érintkezőjéhez. Ne felejtsd el az ellenállást valahol az út mentén. Most már készen állsz az indulásra!

PWM megvalósítása Raspberry Pi-n

Ahhoz, hogy a hardveres PWM működjön a Raspberry Pi-n, a rpi-hardware-pwm könyvtár a Cameron Davidson-Pilontól, átvett kód: Jeremy Impson. Ezt használták a Pioreaktor (Pi-alapú bioreaktor) – de a mi céljainknak elég egyszerű.

Először is, lássuk szerkessze a config.txt fájltfájlban található /boot Könyvtár. Csak egy sort kell hozzáadnunk: dtoverlay=pwm-2chan. Ha a 18-tól és a 19-től eltérő GPIO-tűket szeretnénk használni, hozzáadhatunk néhány további argumentumot. Egyelőre maradjunk az egyszerű dolgokban.

Indítsa újra a Pi-t, és futtassa:

lsmod | grep pwm

Ez a parancs felsorolja az operációs rendszer központi részébe, az úgynevezett kernelbe betöltött összes modult. Itt szűrjük őket, hogy csak a PWM-cuccokat találjuk meg, a grep (ez "globális reguláris kifejezés nyomtatása") parancsot.

Ha pwm_bcm2835 megjelenik a felsorolt ​​modulok között, akkor jó úton járunk. Már majdnem végeztünk a felkészüléssel! Már csak a tényleges könyvtár telepítése van hátra. A terminálról futtassa:

sudo pip3 install rpi-hardware-pwm

Most már készen állunk az indulásra.

A PWM LED áramkör kódolása

Ideje bepiszkítani a kezünket egy kis aprósággal kódolás Pythonban. Indítsd be Thonnyt, és másold be a következő kódot. Aztán ütni Fuss.

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

Ha minden rendben van, látni fogja, hogy a LED fokozatosan világosabb lesz, amíg a én számláló változó eléri a 100-at. Aztán kikapcsol. Mi folyik itt? Menjünk át rajta.

Importáljuk a hardveres PWM könyvtár megfelelő részét (a idő modul) és egy új változó deklarálása. Beállíthatjuk a pwm_channel 0-ra vagy 1-re, amelyek megfelelnek a Pi 18. és 19. érintkezőjének.

A hz értéket tetszőleges frekvenciára állíthatjuk be (bár végső soron a Pi órajele korlátoz minket). 60 Hz-en nem látunk PWM-villogást. De jó ötlet lehet nagyon alacsony értékkel kezdeni (például 10), és fokozatosan feljebb tolni a dolgokat. Tedd ezt, és valóban látni fogod a pulzusokat. Ne csak szót fogadjon!

A munkaciklusunkat dolgozzuk (én) 0-ról 100-ra Python for ciklus használatával. Érdemes megjegyezni, hogy beállíthatjuk a idő.alvás ameddig csak akarjuk – mivel a PWM-et hardverben kezelik, a színfalak mögött fut, bármennyire is mondjuk a programnak, hogy várjon.

Van még mit tanulni a PWM-mel

Gratulálunk! Megírtad az első PWM-programodat. De ahogy az a Raspberry Pi esetében gyakran előfordul, sok mindent megtehetsz ezzel a cuccal, különösen, ha a Raspberry Pi-t a megfelelő PWM HAT-tel bővíted. Tehát ne elégedj meg egy kis LED-del. Ezt az új teljesítményt motorok vezérlésére, üzenetek kódolására és szintetizátorhangok generálására használhatja. A moduláció világa vár!