Naučte sa ovládať jas LED pripojenej k Raspberry Pi pomocou PWM.
PWM je niečo, čo všetci používame každý deň, aj keď o tom nevieme. Je to technika, ktorá je priama a neuveriteľne užitočná v celom rade aplikácií. Najlepšie na tom je, že je to niečo, čo váš Raspberry Pi zvládne bez toho, aby sa zapotil. Ako? Pozrime sa.
Čo je PWM?
Ako hovorí terminológia, "Pulse-Width Modulation" znie celkom luxusne. Ale všetko, o čom tu v skutočnosti hovoríme, je vypnutie a opätovné zapnutie elektrického signálu – mimoriadne rýchlo. Prečo by sme to mohli chcieť urobiť? Jednoducho preto, že je to veľmi jednoduchý spôsob simulácie premenlivého analógového signálu bez toho, aby ste sa museli uchýliť Klobúky Raspberry Pi, doplnkyalebo prídavné obvody. Pre určité aplikácie, ako je vykurovanie kachlí, pohon motora alebo stmievanie LED, je signál PWM doslova nerozoznateľný od „skutočného“ analógového napätia.
Pracovné cykly
Takže máme sériu impulzov privádzaných do záťaže (vec, ktorú riadime). Toto samo osebe nie je také užitočné – kým nezačneme meniť (alebo modulovať) šírku týchto impulzov. Fáza zapnutia danej periódy zapnutia a vypnutia môže zaberať 0 až 100 % celkového cyklu. Toto percento nazývame
pracovný cyklus.Predpokladajme napríklad, že máme 3V PWM signál s pracovným cyklom 50%. Priemerné množstvo energie prechádzajúcej cez LED by sa rovnalo vždy zapnutému signálu 1,5 V. Zvýšte pracovný cyklus a LED sa rozjasní; vytočte ho a LED stmavne. Môžeme generovať zvuk pomocou rovnakej metódy – a preto môže zvukový výstup na vašom Raspberry Pi prestať fungovať, ak používate PWM na iné veci.
PWM na Raspberry Pi
Softvérové PWM môžete použiť na každom GPIO pine Raspberry Pi. Hardvérové PWM je však dostupné iba na GPIO12, GPIO13, GPIO18, a GPIO19.
Aký je rozdiel? No, ak budete používať softvér na generovanie signálu, potom budete spotrebovávať cykly CPU. Váš procesor však môže mať lepšie veci na práci, než povedať LED, aby sa vypínala a zapínala niekoľko stokrát za sekundu. V skutočnosti sa môže rozptyľovať a uviaznuť pri iných úlohách, čo môže vážne narušiť vaše načasovanie PWM.
V dôsledku toho je často lepší nápad delegovať úlohu na špecializované obvody. V prípade Raspberry Pi tento obvod žije vo vnútri systém na čipe v ktorom je umiestnený CPU. Hardvérové PWM je často oveľa presnejšie a pohodlnejšie, a preto je vo väčšine prípadov preferovanou možnosťou. Ak chcete mať predstavu o tom, čo sa deje pod kapotou čipu Broadcom BCM2711 Raspberry Pi 4, môžete sa pozrieť na dokumentáciu BCM2711. Kapitola 8 sa týka vecí PWM!
Stmievanie LED
Ak chcete, aby naša LED fungovala s naším Raspberry Pi, budeme musieť urobiť nejaký prápor. To znamená dva komponenty: samotná LED a odpor obmedzujúci prúd, ktorý s ním zapojíme do série. Bez odporu hrozí, že vaša LED zomrie v páchnucom obláčiku dymu, ak cez ňu prechádza príliš veľa prúdu.
Výpočet hodnoty rezistora
Nezáleží na tom, na ktorý koniec LED pripojíte odpor. Dôležitá je hodnota odporu. Raspberry Pi 4 môže poskytnúť približne 16 miliampérov na kolík. Takže môžeme použite Ohmov zákon na určenie hodnoty potrebného odporu.
Uvedený zákon uvádza, že odpor by sa mal rovnať napätiu nad prúdom. Poznáme napätie vychádzajúce z GPIO kolíka Pi (3,3 V) a vieme, aký by mal byť prúd (16 miliampérov alebo 0,016 ampérov). Ak prvé vydelíme druhým, dostaneme 206,25. Teraz, keďže budete mať problém nájsť odpory tejto hodnoty, poďme radšej na 220 ohmov.
Pripojte anódu LED (dlhá noha). GPIO 18 (čo je fyzický kolík 12 na Raspberry Pi). Pripojte katódu (krátka noha) k niektorému z uzemňovacích kolíkov Pi. Nezabudnite na odpor niekde pozdĺž cesty. Teraz ste pripravení ísť!
Implementácia PWM na Raspberry Pi
Aby hardvérové PWM fungovalo na Raspberry Pi, použijeme knižnica rpi-hardware-pwm od Camerona Davidsona-Pilona, prevzaté z kód od Jeremyho Impsona. Toto bolo použité v Pioreaktor (bioreaktor založený na Pi) - ale na naše účely je to dosť jednoduché.
Najprv poďme upravte súbor config.txtsúbor, ktorý sa nachádza v /boot adresár. Potrebujeme pridať iba jeden riadok: dtoverlay=pwm-2chan. Ak by sme chceli použiť GPIO piny iné ako 18 a 19, mohli by sme tu pridať nejaké ďalšie argumenty. Zatiaľ si veci zjednodušíme.
Reštartujte Pi a spustite:
lsmod | grep pwm
Tento príkaz uvádza zoznam všetkých modulov načítaných do centrálnej časti OS, nazývanej jadro. Tu ich filtrujeme, aby sme našli iba veci PWM pomocou grep (to je „tlač globálneho regulárneho výrazu“).
Ak pwm_bcm2835 sa zobrazí medzi uvedenými modulmi, potom sme na správnej ceste. S prípravou sme takmer hotoví! Zostáva len nainštalovať skutočnú knižnicu. Z terminálu spustite:
sudo pip3 install rpi-hardware-pwm
Teraz sme pripravení začať.
Kódovanie PWM LED obvodu
Je čas zašpiniť si ruky troškou kódovanie v Pythone. Zapnite Thonnyho a skopírujte nasledujúci kód. Potom zasiahnite Bežať.
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()
Ak je všetko v poriadku, uvidíte, ako sa LED dióda postupne rozjasňuje až do i premenná počítadla dosiahne 100. Potom sa vypne. Čo sa tu deje? Poďme si to prejsť.
Importujeme relevantnú časť hardvérovej knižnice PWM (spolu s čas modul) a deklarovanie novej premennej. Môžeme nastaviť pwm_channel na 0 alebo 1, ktoré zodpovedajú kolíkom GPIO 18 a 19 na Pi.
The hz hodnotu, ktorú môžeme nastaviť na akúkoľvek frekvenciu, ktorú chceme (hoci sme v konečnom dôsledku obmedzení rýchlosťou hodín Pi). Pri 60 Hz by sme nemali vidieť žiadne blikanie PWM. Ale môže byť dobrý nápad začať s veľmi nízkou hodnotou (napríklad 10) a postupne posúvať veci nahor. Urobte to a skutočne budete môcť vidieť, ako sa pulzy dejú. Neberte nás len za slovo!
Pracujeme v našom pracovnom cykle (i) od 0 do 100 pomocou cyklu Python for. Stojí za zmienku, že môžeme nastaviť čas.spánok argumentovať tak dlho, ako budeme chcieť – keďže PWM sa spracováva hardvérovo, bude prebiehať v zákulisí, akokoľvek dlho povieme programu, aby čakal.
S PWM sa môžete naučiť viac
Gratulujem! Napísali ste svoj prvý PWM program. Ale ako je to tak často v prípade Raspberry Pi, s týmito vecami môžete robiť veľa, najmä ak svoje Raspberry Pi rozšírite o správny PWM HAT. Takže sa neuspokojte s jednou malou LED diódou. Túto novú silu môžete použiť na ovládanie motorov, kódovanie správ a generovanie tónov syntetizátora. Svet modulácie čaká!