Opi hallitsemaan Raspberry Pi: hen liitetyn LEDin kirkkautta PWM: n avulla.
PWM on jotain, jota me kaikki käytämme päivittäin, vaikka emme tietäisikään sitä. Se on tekniikka, joka on yksinkertainen ja uskomattoman hyödyllinen monissa sovelluksissa. Mikä parasta, Raspberry Pi voi tehdä sen ilman hikoilua. Miten? Katsotaanpa.
Mikä on PWM?
Terminologian mukaan "Pulse-Width Modulation" kuulostaa melko hienolta. Mutta oikeastaan puhumme vain sähköisen signaalin sammuttamisesta ja uudelleen käynnistämisestä – erittäin nopeasti. Miksi saatamme haluta tehdä tämän? Yksinkertaisesti siksi, että se on erittäin helppo tapa simuloida muuttuvaa analogista signaalia turvautumatta Raspberry Pi -hatut, lisäosat, tai ylimääräisiä piirejä. Tietyissä sovelluksissa, kuten lieden lämmittämisessä, moottorin käyttämisessä tai LEDin himmentymisessä, PWM-signaalia ei voi kirjaimellisesti erottaa "todellisesta" analogisesta jännitteestä.
Työjaksot
Joten meillä on sarja pulsseja, jotka syötetään kuormaan (johon me ajamme). Tämä ei yksinään ole kovin hyödyllistä - kunnes alamme muuttaa (tai moduloida) noiden pulssien leveyttä. Tietyn päällekytkentäjakson "on"-vaihe voi kestää 0–100 % kokonaissyklistä. Kutsumme tätä prosenttiosuutta
käyttömäärä.Oletetaan esimerkiksi, että meillä on 3 V PWM-signaali, jonka käyttösuhde on 50%. LEDin läpi kulkeva keskimääräinen teho vastaa 1,5 V: n aina päällä olevaa signaalia. Käännä käyttömäärä ylös, ja LED kirkkaampi; valitse se alas ja LED himmenee. Voimme luoda ääntä samalla menetelmällä – minkä vuoksi Raspberry Pi: n äänilähtö saattaa lakata toimimasta, jos käytät PWM: ää muihin asioihin.
PWM Raspberry Pi: ssä
Voit käyttää PWM-ohjelmistoa jokaisessa Raspberry Pi: n GPIO-nastassa. Mutta laitteiston PWM on saatavilla vain GPIO12, GPIO13, GPIO18, ja GPIO19.
Mitä eroa? No, jos aiot käyttää ohjelmistoa signaalin luomiseen, kulutat suorittimen jaksoja. Prosessorillasi saattaa kuitenkin olla parempaa tekemistä kuin käskeä LED-valoa sammumaan ja syttymään useita satoja kertoja sekunnissa. Itse asiassa se saattaa häiritä ja juuttua muihin tehtäviin, mikä voi vakavasti sotkea PWM-ajoituksiasi.
Tästä syystä on usein parempi idea delegoida tehtävä erikoistuneelle piirille. Raspberry Pi: n tapauksessa tämä piiri elää sisällä System on Chip jossa CPU on. Laitteiston PWM on usein paljon tarkempi ja kätevämpi, ja siksi se on suosituin vaihtoehto useimmissa tapauksissa. Jos haluat käsityksen siitä, mitä Raspberry Pi 4:n Broadcom BCM2711 -sirun konepellin alla tapahtuu, voit katsoa BCM2711-dokumentaatio. Luku 8 kattaa PWM-jutut!
LEDin himmennys
Saadaksemme LED-valaisimet toimimaan Raspberry Pi: n kanssa, meidän on tehtävä hieman koelautailua. Tämä tarkoittaa kahta komponenttia: itse LEDiä ja virtaa rajoittavaa vastusta, jotka kytketään sarjaan sen kanssa. Ilman vastusta LED-valo on vaarassa kuolla pahanhajuiseen savupiippuun, jos sen läpi kulkee liikaa virtaa.
Vastuksen arvon selvittäminen
Sillä ei ole väliä, mihin LEDin päähän liität vastuksen. Tärkeintä on vastuksen arvo. Raspberry Pi 4 voi tarjota noin 16 milliampeeria nastaa kohti. Jotta voimme käytä Ohmin lakia tarvittavan vastuksen arvon selvittämiseksi.
Mainittu laki sanoo, että resistanssin tulee olla yhtä suuri kuin virran ylittävä jännite. Tiedämme Pi: n GPIO-nastasta tulevan jännitteen (3,3 V) ja tiedämme, mikä virran tulisi olla (16 milliampeeria tai 0,016 ampeeria). Jos jaetaan edellinen jälkimmäisellä, saadaan 206.25. Nyt, koska sinulla on vaikeuksia löytää tämän arvoisia vastuksia, lähdetään sen sijaan 220 ohmiin.
Liitä LEDin anodi (pitkä jalka) liittimeen GPIO 18 (joka on Raspberry Pi: n fyysinen nasta 12). Yhdistä katodi (lyhyt jalka) mihin tahansa Pi: n maadoitusnastaan. Älä unohda vastusta, jonnekin polun varrella. Olet nyt valmis lähtemään!
PWM: n käyttöönotto Raspberry Pi: ssä
Saadaksemme laitteiston PWM: n toimimaan Raspberry Pi: ssä, käytämme rpi-hardware-pwm-kirjasto Cameron Davidson-Pilonilta, mukautettu alkaen koodi Jeremy Impson. Tätä on käytetty mm Pioreaktori (Pi-pohjainen bioreaktori) - mutta se on tarpeeksi yksinkertainen tarkoituksiinmme.
Ensin mennään muokkaa config.txt-tiedostoatiedosto, joka löytyy /boot hakemistosta. Meidän täytyy vain lisätä yksi rivi: dtoverlay=pwm-2chan. Jos halusimme käyttää muita GPIO-nastoja kuin 18 ja 19, voisimme lisätä tähän joitain lisäargumentteja. Pidetään asiat toistaiseksi yksinkertaisina.
Käynnistä Pi uudelleen ja suorita:
lsmod | grep pwm
Tämä komento luettelee kaikki moduulit, jotka on ladattu käyttöjärjestelmän keskiosaan, jota kutsutaan ytimeksi. Tässä suodatamme ne löytääksemme vain PWM-materiaalit käyttämällä grep (se on "globaali säännöllinen lauseke") -komento.
Jos pwm_bcm2835 näkyy lueteltujen moduulien joukossa, niin olemme oikeilla jäljillä. Valmistautuminen on melkein valmis! Jäljelle jää vain varsinaisen kirjaston asentaminen. Suorita terminaalista:
sudo pip3 install rpi-hardware-pwm
Olemme nyt valmiita aloittamaan.
PWM-LED-piirin koodaus
Aika likaa kätemme pienellä määrällä koodaus Pythonissa. Käynnistä Thonny ja kopioi seuraava koodi. Sitten lyö Juosta.
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()
Kun kaikki on hyvin, näet LEDin kirkastuvan vähitellen, kunnes i laskurimuuttuja saavuttaa 100. Sitten se sammuu. Mitä täällä tapahtuu? Kävelemme sen läpi.
Tuomme asiaankuuluvan osan laitteiston PWM-kirjastosta (sekä aika moduuli) ja ilmoittaa uusi muuttuja. Voimme asettaa pwm_channel 0:ksi tai 1:ksi, jotka vastaavat Pi: n GPIO-nastoja 18 ja 19.
The hz arvo, jonka voimme asettaa mille tahansa taajuudelle, josta pidämme (vaikka meitä lopulta rajoittaa Pi: n kellonopeus). 60 Hz: llä meidän ei pitäisi nähdä mitään PWM-värähtelyä. Mutta saattaa olla hyvä idea aloittaa hyvin pienellä arvolla (kuten 10) ja siirtää asioita vähitellen ylöspäin. Tee tämä, niin voit itse asiassa nähdä pulssin tapahtuvan. Älä vain ota sanaamme!
Teemme työmäärämme (i) 0:sta 100:aan käyttämällä Python for -silmukkaa. On syytä huomata, että voimme asettaa aika.nukkua argumentti niin kauan kuin haluamme – koska PWM: ää käsitellään laitteistossa, se toimii kulissien takana, vaikka käskemmekin ohjelmaa odottamaan.
PWM: llä on enemmän opittavaa
Onnittelut! Olet kirjoittanut ensimmäisen PWM-ohjelmasi. Mutta kuten Raspberry Pi: n kanssa usein tapahtuu, näillä asioilla voi tehdä paljon, varsinkin jos lisäät Raspberry Pi: täsi oikealla PWM-HATULLA. Joten älä tyydy yhteen pieneen LEDiin. Voit käyttää tätä uutta tehoa moottoreiden ohjaamiseen, viestien koodaamiseen ja syntetisaattoriäänien luomiseen. Modulaation maailma odottaa!