Naučte se ovládat jas LED připojené k Raspberry Pi pomocí PWM.

PWM je něco, co všichni používáme každý den, i když o tom nevíme. Je to technika, která je přímočará a neuvěřitelně užitečná v řadě aplikací. Nejlepší na tom je, že je to něco, co vaše Raspberry Pi zvládne, aniž byste se zapotili. Jak? Podívejme se na to.

Co je PWM?

Jak říká terminologie, "Pulse-Width Modulation" zní docela fantazie. Ale vše, o čem tady ve skutečnosti mluvíme, je vypnutí a opětovné zapnutí elektrického signálu – extrémně rychle. Proč bychom to mohli chtít udělat? Jednoduše proto, že je to velmi snadný způsob simulace proměnného analogového signálu, aniž byste se museli uchylovat Čepice Raspberry Pi, doplňkynebo další obvody. Pro určité aplikace, jako je vytápění kamen, pohon motoru nebo stmívání LED, je signál PWM doslova nerozeznatelný od „skutečného“ analogového napětí.

Pracovní cykly

Takže máme sérii pulsů přiváděných do zátěže (věc, kterou řídíme). To samo o sobě není tak užitečné – dokud nezačneme měnit (nebo modulovat) šířku těchto pulzů. Fáze „zapnuto“ dané periody zapnuto-vypnuto může zabírat 0–100 % celkového cyklu. Toto procento nazýváme

pracovní cyklus.

Předpokládejme například, že máme 3V PWM signál s pracovním cyklem 50 %. Průměrné množství energie procházející LED by bylo ekvivalentní trvale zapnutému signálu 1,5 V. Zvyšte pracovní cyklus a LED se rozjasní; vytočte a LED zhasne. Můžeme generovat zvuk pomocí stejné metody – proto může zvuk na vašem Raspberry Pi přestat fungovat, pokud používáte PWM pro jiné věci.

PWM na Raspberry Pi

Softwarové PWM můžete použít na každém GPIO pinu Raspberry Pi. Hardwarové PWM je však dostupné pouze na GPIO12, GPIO13, GPIO18, a GPIO19.

Jaký je v tom rozdíl? No, pokud budete ke generování signálu používat software, pak budete spotřebovávat cykly CPU. Váš procesor však může mít lepší věci na práci, než říkat LED, aby se několikrát za sekundu vypnula a rozsvítila. Ve skutečnosti se může rozptýlit a uvíznout v jiných úkolech, což může vážně narušit vaše načasování PWM.

V důsledku toho je často lepší delegovat úkol na specializované obvody. V případě Raspberry Pi tento obvod žije uvnitř systém na čipu ve kterém je umístěn CPU. Hardwarové PWM je často mnohem přesnější a pohodlnější, a proto je ve většině případů preferovanou možností. Pokud chcete mít představu o tom, co se děje pod kapotou čipu Broadcom BCM2711 Raspberry Pi 4, můžete se podívat na dokumentaci BCM2711. Kapitola 8 pokrývá věci PWM!

Stmívání LED

Aby naše LED fungovala s naším Raspberry Pi, budeme muset udělat pár prken. To znamená dvě součásti: samotnou LED a rezistor omezující proud, který s ní zapojíme do série. Bez rezistoru hrozí, že vaše LED zemře v páchnoucím obláček kouře, pokud jí prochází příliš velký proud.

Zjištění hodnoty rezistoru

Nezáleží na tom, ke kterému konci LED připojíte odpor. Důležitá je hodnota odporu. Raspberry Pi 4 může poskytnout přibližně 16 miliampérů na pin. Takže můžeme použijte Ohmův zákon zjistit hodnotu potřebného odporu.

Tento zákon říká, že odpor by se měl rovnat napětí nad proudem. Známe napětí vycházející z GPIO pinu Pi (3,3 V) a víme, jaký by měl být proud (16 miliampérů nebo 0,016 ampérů). Pokud první vydělíme druhým, dostaneme 206,25. Nyní, protože budete mít problém najít rezistory této hodnoty, pojďme místo toho pro 220 ohmů.

Připojte anodu LED (dlouhá noha). GPIO 18 (což je fyzický pin 12 na Raspberry Pi). Připojte katodu (krátkou nohu) k jakémukoli uzemňovacímu kolíku Pi. Nezapomeň na odpor někde podél cesty. Nyní jste připraveni vyrazit!

Implementace PWM na Raspberry Pi

Aby hardwarové PWM fungovalo na Raspberry Pi, použijeme knihovna rpi-hardware-pwm od Camerona Davidson-Pilon, převzato z kód od Jeremyho Impsona. Toto bylo použito v Pioreaktor (bioreaktor na bázi Pi) – ale pro naše účely je to dost jednoduché.

Za prvé, pojďme upravte soubor config.txtsoubor, nalezený v /boot adresář. Potřebujeme přidat jeden řádek: dtoverlay=pwm-2chan. Pokud bychom chtěli použít jiné piny GPIO než 18 a 19, mohli bychom zde přidat nějaké další argumenty. Pro tuto chvíli to zjednodušme.

Restartujte Pi a spusťte:

lsmod | grep pwm

Tento příkaz vypíše všechny moduly načtené do centrální části operačního systému, zvané jádro. Zde je filtrujeme, abychom našli pouze věci PWM pomocí grep (to je "tisk globálního regulárního výrazu").

Li pwm_bcm2835 se zobrazí mezi uvedenými moduly, pak jsme na správné cestě. Už jsme skoro hotovi s přípravou! Zbývá pouze nainstalovat skutečnou knihovnu. Z terminálu spusťte:

sudo pip3 install rpi-hardware-pwm

Nyní jsme připraveni začít.

Kódování PWM LED obvodu

Je čas si trochu ušpinit ruce kódování v Pythonu. Zapalte Thonnyho a zkopírujte následující kód. Pak udeř Běh.

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

Pokud je vše v pořádku, uvidíte, že LED dioda bude postupně svítit až do i proměnná čítače dosáhne 100. Poté se vypne. Co se tam děje? Pojďme si to projít.

Importujeme relevantní část hardwarové PWM knihovny (spolu s čas modul) a deklarování nové proměnné. Můžeme nastavit pwm_channel na 0 nebo 1, které odpovídají pinům GPIO 18 a 19 na Pi.

The Hz hodnotu, kterou můžeme nastavit na jakoukoli frekvenci, kterou chceme (ačkoli jsme nakonec omezeni rychlostí hodin Pi). Při 60 Hz bychom neměli vidět žádné blikání PWM. Ale může být dobrý nápad začít s velmi nízkou hodnotou (například 10) a postupně věci posouvat nahoru. Udělejte to a ve skutečnosti budete moci vidět, jak se pulsy odehrávají. Neberte nás za slovo!

Pracujeme v našem pracovním cyklu (i) od 0 do 100 pomocí cyklu Python for. Stojí za zmínku, že můžeme nastavit čas.spánek argumentovat tak dlouho, jak budeme chtít – protože PWM je zpracováno hardwarově, poběží za scénou, jak dlouho řekneme programu, aby čekal.

S PWM se toho můžete naučit víc

Gratulujeme! Napsali jste svůj první PWM program. Ale jak už to tak u Raspberry Pi bývá, s těmito věcmi můžete dělat hodně, zvláště pokud své Raspberry Pi rozšíříte o správný PWM HAT. Takže se nespokojte s jednou malou LEDkou. Tuto novou sílu můžete použít k ovládání motorů, kódování zpráv a generování zvuků syntezátoru. Svět modulace čeká!