2. januar, 2014

Programiranje z Arduino (5) – PWM izhod

Revija 215 215 17 - Programiranje z Arduino (5) - PWM izhodRevija logo tehnologija biz - Programiranje z Arduino (5) - PWM izhodV preteklih člankih smo nekaj izvedeli o digitalnih vhodih in izhodih ter o analognih vhodih na razvojni plošči Arduino. Tokrat bo govora o analognih izhodih. Najprej si bomo ogledali nekaj osnovnih dejstev o šestih Arduino analognih izhodih, nato pa še kako se Arduino analogne izhode lahko prilagodi našim potrebam.

Arduino analogni izhodi

Slike niZačnimo s šokantno novico: analogni izhodi pri Arduinu sploh ne obstajajo. Vsaj ne v taki obliki kot so analogni vhodi, kjer ATMega328P mikrokontroler z 10-bitno natančnostjo dejansko lahko zajame 1024 različnih nivojev napetosti. Zakaj potem sploh govorimo o analognih izhodih, če teh ni? Preprosto zato, ker se digitalni izhod v nekaterih slučajih obnaša, oziroma je navzven videti kot analogni izhod, če ga dovolj hitro preklapljamo med logično ničlo in logično enko. Poglejmo si na primeru. Imamo svetečo diodo, ki bi ji radi spreminjali svetilnost.

Arduino ima za tovrstne potrebe pripravljeno priočno funkcijo analogWrite(priključek, vrednost). Funkcija sprejme 2 parametra: priključek in analogno vrednost. Za razliko od analognega vhoda, ki je 10-biten je analogni izhod le 8-biten. To pomeni, da ima parameter vrednosti od 0 do 255. Če bi npr. hoteli, da sveteča dioda na priključku D11 sveti s polovično močjo bi zapisali:

analogWrite(11,127);

Če bi o dogajanju sklepali le iz svetlosti diode, bi na prvo žogo lahko rekli, da se je napetost na priključku 11 zmanjšala. Če pa v roke vzamemo boljše orodje za karakterizacijo vezij, kot je skromna sveteča dioda (slika 1) vidimo, da Arduino dela vse kaj drugega. Svetečo diodo zelo hitro – vsaj z vidika naše percepcije – prižiga in ugaša. Kako hitro? S frekvenco približno 490Hz, oziroma periodo približno 2ms. Če se malo poigramo in popravimo vrednost s 127 na 63 se bo čas, ko je izhod na logični enki skrajšal še približno za polovico, in bo sedaj le še približno 25% celotne periode. Čas ko je priključek na logični enki imenujemo krajše tudi obratovalni cikel (angl. Duty cycle). Celotnemu načinu generiranja analogne vrednosti pa pulzna modulacija (tudi pulzno širinska modulacija). V angleški literaturi, ki dominira na internetu pa pojem najdete pod PWM – Pulse Width Modulation)Slike ni.

V tej situaciji se torej digitalni izhod s hitrim preklapljanjem obnaša kot analogni izhod. Še več! V tem primeru je celo boljši kot pravi analogni izhod, saj bi bili sicer pri sveteči diodi obremenjeni z njenim sila nelinearnim odzivom svetlosti v odvisnosti od napajalne napetosti. Ne moremo pa v ta namen uporabiti vseh digitalnih izhodov. Arduino UNO nam kot PWM izhode ponuja digitalne priključke D3, D5, D6, D9, D10 in D11.

Podajmo malo bolj zanimiv primer in napišimo program za “analogno utripanje” sveteče diode. Analogni blink, če želite. Potrebujemo zelo malo strojne opreme (skromno žico), kot izvor svetlobe pa bomo uporabili kar svetečo diodo na Arduinu. Ah kako, boste porekli. Sveteča dioda na Arduinu je vezana na priključek D13, ki pa ne omogoča pulzne modulacije. Res je! Zato bomo D11 priključek z žico povezali direktno na prikluček D13. D13 je privzet kot vhod, zato nas ta priključek ne bo nič motil. Še predupora ne rabimo, saj je dioda z njim že opremljena.:

For zanka je samo ena, vendar spremenljivka k, ki vsako loop zanko izmenjuje vrednosti -1 in 1, (enkrat prišteva in drugič odšteva) skrbi za to, da se p izmenično povečuje ali zmanjšuje. p tako teče od 0 do 255 in potem nazaj na 0. Rezultat je mehko utripanje sveteče diode vezane na priključek D13.

Celotni članek

Programiranje z Arduino (5)

Helico d.o.o. Vipavska 4e

5270 Ajdovščina

www.tehnologija.biz

2014_SE215_17