Kako uporabljamo analogni vhod in izhod.

Poleg digitalnih signalov, ki delujejo z nivojema logične 0 in 1, najdemo v povezavi z mikroprocesorji večkrat aalogna vezja oziroma sisteme. Mikroprocesorji lahko preberejo analogne vrednosti z vzorčenjem tako, da jih pretvorijo v digitalne z analogno-digitalnim pretvornikom (ADC). Lahko pa generirajo analogni signal za katerokoli zunanjo napravo s pomočjo pulzno širinske modulacije (PWM). Intel Galileo ima vgrajene PWM module in ADC pretvornike, da lahko generira analogne napetosti na izhodih in bere analogne napetosti na vhodih.

V tej vaji bo prikazana uporaba analognega vhoda za krmiljenje LED diode s PWM signalom. S potenciometrom bomo spreminjali napetost na analognem vhodu. V odvisnosti od te napetosti se bo spreminjala svetilnost LED diode.

Razvojna plošča Intel Galileo vsebuje 14 digitalnih vhodno-izhodnih pinov (0-13) in šest analognih vhodov (A0-A5). Izmed vseh 14-tih digitalnih pinov, jih lahko 6 uporabimo za generiranje PWM signalov (pin 3, pin 5, pin 6, pin 9, pin 10 in pin 11). Vsak od 6-tih analognih vhodov omogoča 12-bitno resolucijo (4096 različnih vrednosti v območju od 0 V do 5 V).

Potenciometer (drsnik potenciometra) bomo priključili na analogni vhod A0. Ostala dva priključka potenciometra bomo priključili, enega na maso (GND) in drugega na +5 V. LED diodo bomo priključili na pin 5, saj ta omogoča generiranje PWM signala. Program (koda) bo neprestano bral napetost na analognem vhodu A0 in v odvisnosti od te napetosti generiral PWM signal tako, da se bo v odvisnosti od napetosti na analognem vhodu A0 spreminjala svetilnost LED diode.

Slika 1: Sestava elementov na eksperimentalno ploščico in priključitev na razvojno ploščo Intel Galileo.

Elementi vezja:

Potenciometer 10 k

R 470 ohm

Visokosvetleča LED dioda, 5 mm, modra

//Program za spreminjanje PWM signala (pin 5) v odvisnosti od napetosti na A0: 

/*

 S spreminjanjem napetosti na analognem vhodu A0 (potenciometer) spreminjamo

 PWM signal na pinu 5 in s tem svetilnost LED diode.

 Avtor: Milan Ivič

 December 2014

*/

 const int Potenciometer = A0;  //S potenciometrom spreminjamo napetost na analognem vhodu A0

 const int LED = 5;                     //LED dioda je priključena na pin 5 (na pinu 5 lahko generiramo PWM)

 int Potenciometer_vrednost = 0;

 int Vrednost_za_LED = 0;

 void setup()

 {

   Serial.begin(9600);   //Serijska komunikacija, 9600 bit/s

 }

 void loop()

 {

   //Omogočiti želimo 12-bitno resolucijo

   analogReadResolution(12);

   //Branje analogne vrednosti napetosti na A0:

   Potenciometer_vrednost = analogRead(Potenciometer);

    

   //map za določanje območja na PWM izhodu

   Vrednost_za_LED = map(Potenciometer_vrednost, 0, 4095, 0, 255);

 

   analogWrite(LED, Vrednost_za_LED);

 

   //Izpis na serijskem monitorju:

   Serial.print("Resolucija 12bit: ");

   Serial.print(Potenciometer_vrednost);

   Serial.print("    Vrednost za LED: ");

   Serial.println(Vrednost_za_LED);

 

   //5 ms zakasnitve pred naslednjim obhodom zanke loop za stabilizacijo AD pretvornika

   delay(5);  

 }

Opis programa:

Na začetku programa smo določili (deklarirali spremenljivke) pine, kamor bomo priključili potenciometer in LED diodo ter ju nato inicializirali (dolelili smo jima vrednost 0).

V rutini void setup smo vključili komunikacijo s serijskim monitorjem. Želimo da se na serijskem monitorju izpisujejo vrednosti na A0 (0 - 4095) in pinu 6 (0 - 255).

V zanki void loop, ki se neprestano ponavlja, smo določili 12-bitno resolucijo branja napetosti na analognem vhodu A0. Če tega ne storimo, bo resolucija 10-bitna. Nato beremo (analogRead) napetost na A0, ki je odvisna od zasuka potenciometra. Ob vsakem prehodu zanke loop se prebrana vrednost shrani v spremenljivko Potenciometer_vrednost.

Nato z operatorjem map rangiramo vrednost PWM signala za LED diodo. Napetost na analognem vhodu beremo z 12-bitno resolucijo (0 - 4095), PWM signal na pinu 5 pa generiramo z 8-bitno resolucijo (0 - 255). Zato vrednosti iz območja 0 - 4095 pretvorimo v območje 0 - 255.

PWM signal:

PWM signal je v bistvu sestavljen iz pravokotnih impulzov konstantne frekvence. Razmerje širine impulza proti periodi imenujemo duty cikel in je izraženo v odstotkih. PWM duty cikel, izražen v odstotkih, ustreza povprečni moči tega pulznega signala.

Slika 2: PWM signal in povprečna vrednost napetosti na LED diodi.

Izpis na serijskem monitorju:

Za prikaz izpisa kot je na sliki 3 je uporabljena zakasnitev 500 ms. Pri maksimalni vrednosti napetosti na A0 (5 V => 4098) je na pinu 5, kamor je priključena LED dioda tudi 5 V (255), duty cikel je 100 %.

Slika 3: Izpis na serijskem monitorju.

Slika 4: Prikaz sestavljenega vezja.