Mini računalnik RPi nam je že zlezel pod kožo. Kaj vse zmore ta mala naprava! Od preprostih vhodov – izhodov do najbolj kompleksnih aplikacij, o katerih smo v reviji Svet Elektronike že pisali. Naj vas spomnimo na spletni radio, detekcijo premikanja, spletni strežnik in še kaj bi se našlo. V seriji za začetnike smo se do sedaj naučili kako oživimo RPi, pravilno zaznati vhod in določiti izhod ter kako s prekinitvijo sočasno z glavnim programom pokličemo neko metodo. Na programerskem delu smo začeli glavni program pisati v „main“ funkcijo, katero smo vključili v blok try:except:, ki lovi napake. Skrajni čas je že, da se lotimo še pulzno širinske modulacije (PWM) in znakovnega (alfa-numeričnega) LCD zaslona, ki je še kako potreben za prikazovanje osnovnih podatkov pri raznih malih aplikacijah.
Pulzno širinska modulacija
Splošna oznaka za tovrstno modulacijo je PWM(ang. Pulse-Width Modulation). Princip PWM-ja je spreminjanje razmerja med visokim in nizkim delom periode pri neki frekvenci (Slika 1).
Širino trajanja impulza spreminjamo z razmerjem odstotka med visokim in nizkim delom. S tem spreminjamo tudi odstotek povprečne napetosti, ki je enaka razmerju površine impulza proti površini, kjer impulza ni. Torej če si ogledamo primer, kjer je dolžina impulza 30%, je zaradi pravokotnega signala tudi površina pod impulzom 30% površine celotne periode. To pomeni, da je pri tem trajanju impulza povprečna napetost 30% napajalne, ki se pri dovolj visokih frekvencah odraža kot enosmerna.
Mi smo za začetek regulirali svetilnost LED diode, priklopljeno preko 270Ω na priključek 7, tako kot v vseh dosedanjih primerih. Začetek uporabe PWM je dokaj preprost in si ga poglejmo v glavi programa „PWMZacetek“, celotnega pa si lahko, kot že veste, snamete iz naše spletne strani:
#dolocimo izhod
GPIO.setup(19, GPIO.OUT)
#spr. p bo sluzila kot PWM na
#prikljucku 19 s frekvenco 1000 Hz
p = GPIO.PWM(19, 1000)
#zazenemo p s 50% dolzine impulza
p.start(50)
#dioda sveti 5sec s polovicno svetilnostjo
time.sleep(5)
#ustavimo PWM
p.stop()
PWM lahko uporabimo na vseh 17 priključkih GPIO konektorja. Seveda pa poleg na začetku nastavljene, vrednost dolžine impulza tekom programa tudi enostavno spreminjamo z ukazom:
p.ChangeDutyCycle(TI)
kjer je „TI“ trajanje impulza, ki ga lahko nastavimo med 0.0 in 100.0. Ravno tako enostavno pa lahko spreminjamo frekvenco PWM-ja:
p.ChangeFrequency(frek)
kjer je atribut „frek“ frekvenca v Hz. Pridobljeno znanje lahko uporabimo v programu „PWMDimmLEDTipka“ za zatemnjevanje LED diode s tipko. Spremenljivko „pVrednost“ smo omejili na skrajni meji 0 in 100, ker sta to oznaki odstotka dolžine pozitivnega dela periode:
pVrednost = 50
while True:
time.sleep(0.2)
if (not GPIO.input(13) and pVrednost>0):
pVrednost -= 5
p.ChangeDutyCycle(pVrednost)
if (not GPIO.input(15) and pVrednost<100):
pVrednost += 5
p.ChangeDutyCycle(pVrednost)
Kot smo že omenili, je pri visokih frekvencah povprečna napetost zaznana kot enosmerna. Torej bi s tem lahko regulirali hitrost enosmernega motorja? Seveda! Mi smo, kot kaže slika 2, enosmerni krtačni motor priključili na 5V preko tranzistorja, ki ga krmili optični sklopnik.
Priročnik Raspberry Pi in Python za začetnike
Raspberry Pi in Python za začetnike (3) – PWM, LCD (osnove)
AX elektronika d.o.o.
2014_SE220_30