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.