
Prispevki
Analogni vhodi in izhodi mikrokrmilnika (GPIO)

Svet okoli nas je analogen. Temperatura se ne spreminja v skokih, temveč zvezno, svetloba postopoma ugaša in zvok potuje kot valovanje z neskončnim številom vmesnih stanj. Mikrokrmilniki pa so po svoji naravi digitalne naprave, ki razumejo le dve stanji: vklopljeno (1) in izklopljeno (0). Za interakcijo z resničnim svetom potrebujejo posebne vmesnike, ki premostijo vrzel med zveznimi analognimi signali in diskretnim digitalnim svetom. V tem priročniku bomo podrobno raziskali, kako mikrokrmilniki obdelujejo analogne signale, kakšne so njihove omejitve in kako doseči visoko natančnost pri meritvah.
Razlika med analognim in digitalnim signalom
Digitalni signal je binaren. Predstavljamo si ga lahko kot stikalo za luč, ki je bodisi vklopljeno bodisi izklopljeno. V elektroniki to pomeni, da je napetost na pinu ali 0 V (logična ničla) ali polna napajalna napetost, na primer 5 V (logična enica). Vmesna stanja v digitalnem svetu ne obstajajo oziroma veljajo za nedefinirana.
Analogni signal pa je zvezen. Če digitalni signal primerjamo s stikalom, je analogni signal kot vrtljivi gumb (potenciometer) za zatemnitev luči. Napetost se lahko nahaja kjerkoli med 0 V in 5 V – lahko je 1,2 V, 3,456 V ali 4,99 V. Ker mikrokrmilnik ne more neposredno shraniti “zvezne” vrednosti, mora to vrednost pretvoriti v število, ki ga lahko obdela njegov procesor.
Kaj je ADC in kako deluje
ADC (Analog-to-Digital Converter) ali analogno-digitalni pretvornik je vezje znotraj mikrokrmilnika, ki vzorči analogno napetost in jo spremeni v digitalno vrednost. Ta proces se imenuje kvantizacija. Pretvornik primerja vhodno napetost z referenčno napetostjo in določi, kje na lestvici se nahaja vhodni signal.
Večina sodobnih mikrokrmilnikov uporablja metodo zaporednega približevanja (Successive Approximation Register – SAR). Postopek je podoben tehtanju predmeta na tehtnici z utežmi: ADC najprej preveri, ali je napetost višja od polovice referenčne vrednosti, nato četrtine in tako naprej, dokler ne doseže končne digitalne vrednosti.

ADC Most med svetovoma
Pomen ločljivosti pri meritvah
Ločljivost ADC pretvornika nam pove, na koliko delov lahko razdelimo merilno območje. Izraža se v bitih. Večje kot je število bitov, bolj natančno lahko mikrokrmilnik “vidi” majhne spremembe napetosti.
- 8-bitna ločljivost: Omogoča 256 korakov (2^8). Pri 5 V napajanju je najmanjša sprememba, ki jo zazna, približno 19,5 mV.
- 10-bitna ločljivost: Standardna pri Arduino Uno, omogoča 1024 korakov (2^10). Pri 5 V je ločljivost približno 4,9 mV.
- 12-bitna ločljivost: Pogosta pri ESP32 in Arduino Due, omogoča 4096 korakov (2^12). Pri 3,3 V je ločljivost približno 0,8 mV.
Visoka ločljivost je ključna pri uporabi senzorjev, ki oddajajo zelo šibke signale, kot so termočleni ali merilni lističi za tehtnice.
Arduino Uno in njegove omejitve pri analognih signalih
Arduino Uno je odlična platforma za začetnike, vendar ima pri analognih signalih specifične omejitve, ki jih moramo razumeti. Njegov mikrokrmilnik ATmega328P ima 10-bitni ADC, kar je dovolj za večino hobi projektov, nima pa vgrajenega pravega analognega izhoda (DAC).
Ko na Arduino Uno uporabimo funkcijo analogRead(), dobimo vrednost med 0 in 1023. Ko pa želimo uporabiti “analogni” izhod s funkcijo analogWrite(), mikrokrmilnik dejansko ne spreminja napetosti, temveč uporablja tehniko PWM (Pulse Width Modulation).
Razlika med analogRead in analogWrite
Pomembno je razumeti, da ti dve funkciji delujeta na povsem različnih principih:
- analogRead(): Je pravi analogni vhod. Odčita dejansko napetost na pinu (npr. A0) in jo pretvori v digitalno število.
- analogWrite(): Ni pravi analogni izhod. Ustvari digitalni pravokotni signal, kjer spreminjamo razmerje med časom vklopa in izklopa (delovni cikel). Čeprav se zdi, da LED dioda sveti šibkeje ali se motor vrti počasneje, gre le za hitro preklapljanje med 0 V in 5 V.
Pravi analogni izhodi in DAC pretvornik
DAC (Digital-to-Analog Converter) je nasprotje ADC pretvornika. Digitalno vrednost spremeni v dejansko, stabilno analogno napetost. Če potrebujemo čisto sinusno valovanje ali natančno krmiljenje brez šuma, ki ga povzroča PWM, potrebujemo mikrokrmilnik s pravim DAC pretvornikom.
Nekateri mikrokrmilniki, ki vključujejo pravi DAC:
- ESP32: Ima dva 8-bitna DAC kanala (pina 25 in 26).
- Arduino Due: Ponuja dva 12-bitna DAC izhoda za visoko kakovost zvoka ali krmiljenje.
- Serija Arduino MKR: Vključuje 10-bitni DAC izhod.
Uporaba DAC je nujna v avdio tehniki, kjer bi bil PWM šum slišen kot nadležno piskanje.

Analogni proti digitalnim signalom
Referenčna napetost in AREF pin
Natančnost analognih meritev je neposredno odvisna od stabilnosti referenčne napetosti. Če napajate Arduino preko USB vhoda, kjer napetost niha med 4,7 V in 5,1 V, bodo tudi vaši analogni odčitki nihali, čeprav je vhodni signal stabilen.
AREF (Analog Reference) pin omogoča priklop zunanje, zelo stabilne referenčne napetosti. Če na ta pin priključimo natančnih 3,3 V in v kodi nastavimo analogReference(EXTERNAL), bo ADC pretvornik primerjal vhodni signal s temi 3,3 V, kar bo bistveno izboljšalo ponovljivost meritev.
Vpliv šuma in stabilizacija signala
Analogni signali so izjemno dovzetni za elektromagnetne motnje (EMI). Že dolga žica ob napajalnem kablu lahko v analogni vhod vnese šum, ki povzroči “skakanje” vrednosti.
Za stabilizacijo signala lahko uporabimo več metod:
- Kondenzatorji: Majhen keramični kondenzator (npr. 100 nF) med analognim vhodom in ozemljitvijo (GND) deluje kot filter za visokofrekvenčni šum.
- Povprečenje v kodi: Namesto ene meritve naredimo 10 ali 100 odčitkov in izračunamo njihovo povprečje. To je najpreprostejši način za glajenje vrednosti.
- Oklopljeni kabli: Pri dolgih povezavah uporabimo kable z opletom, ki preprečujejo vdor zunanjih motenj.
Uporaba zunanjih ADC modulov kot je ADS1115
Kadar vgrajeni pretvorniki v mikrokrmilniku ne zadoščajo, se zatečemo k zunanjim modulom. Eden najbolj priljubljenih je ADS1115.
ADS1115 ponuja:
- 16-bitno ločljivost: Kar pomeni 65.536 korakov, kar je 64-krat večja natančnost kot pri Arduino Uno.
- Štirje kanali: Ki jih lahko uporabimo kot štiri posamične vhode ali dva diferencialna vhoda.
- Programabilno ojačanje (PGA): Omogoča merjenje zelo majhnih napetosti (npr. signalov iz senzorjev tlaka) brez zunanjih ojačevalnikov.
- I2C komunikacija: Za povezavo potrebujemo le dve žici, kar poenostavi vezje.

Industrijski standardi in napetostni signali
V industrijski avtomatizaciji se redko uporablja surova napetost neposredno iz senzorja. Najpogosteje srečamo dva standarda:
- 0-10 V signali: Standard za krmiljenje ventilov in frekvenčnih pretvornikov. Ker večina mikrokrmilnikov deluje na 3,3 V ali 5 V, moramo za branje teh signalov uporabiti napetostni delilnik.
- 4-20 mA tokovna zanka: Najbolj odporen standard na šum in dolge razdalje. Za pretvorbo tega signala v napetost, ki jo mikrokrmilnik razume, uporabimo natančen upor (npr. 250 ohmov za 5 V območje).
Ali se analogni pini lahko uporabijo kot digitalni
Eno najpogostejših vprašanj začetnikov je, ali lahko analogne pine uporabijo za digitalne komponente, ko jim zmanjka prostora. Odgovor je pritrdilen. Pri večini mikrokrmilnikov (vključno z Arduino Uno) so analogni pini (A0-A5) dejansko digitalni pini z dodano funkcijo ADC pretvornika.
Uporabite jih lahko z ukazom pinMode(A0, OUTPUT) ali digitalWrite(A0, HIGH) popolnoma enako kot kateri koli drug digitalni pin. Edina izjema so nekateri specifični pini na določenih platformah (npr. A6 in A7 na Arduino Nano), ki so izključno analogni.
Kako pretvoriti PWM v pravo analogno napetost
Če nimate mikrokrmilnika z DAC izhodom, potrebujete pa stabilno napetost (npr. za krmiljenje starejšega ojačevalnika), lahko PWM signal pretvorite z uporabo RC filtra.
RC filter sestavljata upor in kondenzator. Upor omeji tok, kondenzator pa se polni in prazni, s čimer “pobriše” vrhove PWM signala in ustvari gladko povprečno napetost. Čeprav ta rešitev ni tako hitra in natančna kot pravi DAC, je v mnogih primerih povsem zadostna in stroškovno učinkovita.
Slabosti analognih vhodov pri dolgih kablih
Pri uporabi analognih senzorjev na razdaljah nad nekaj metrov se pojavita dve glavni težavi:
- Padec napetosti: Zaradi upornosti žice se napetost signala zmanjša, kar povzroči napačne meritve.
- Elektromagnetni šum: Dolga žica deluje kot antena in lovi motnje iz okolice, kar v signal vnese ogromno “smetja”.
V takšnih primerih je bolje uporabiti digitalne senzorje (I2C, SPI ali OneWire) ali pa signal na mestu meritve pretvoriti v digitalno obliko in ga nato poslati do mikrokrmilnika.
Praktična primera uporabe ADC in DAC
Najpogostejši primer uporabe ADC je branje potenciometra. Z vrtenjem gumba spreminjamo napetost na sredinskem pinu, mikrokrmilnik pa to pretvori v število, s katerim nato krmilimo hitrost utripanja LED diode ali položaj servo motorja.
Primer uporabe DAC (ali PWM z RC filtrom) pa je generiranje zvočnega signala. Z hitrim spreminjanjem izhodne napetosti po določenem algoritmu lahko ustvarimo preproste melodije ali celo sintetiziramo človeški govor, ki ga nato predvajamo preko zvočnika.
Povzetek ključnih spoznanj
Analogni vhodi in izhodi so okno mikrokrmilnika v realni svet. Razumevanje ločljivosti, vpliva šuma in razlike med pravim analognim izhodom (DAC) in simuliranim (PWM) je ključno za razvoj zanesljivih elektronskih naprav. Pri zahtevnejših projektih ne pozabite na uporabo stabilnih referenčnih napetosti in filtriranje signala, saj so to temelji natančnega inženirskega dela.
Zaključek
Spoznali smo, da analogna tehnika kljub prevladi digitalnih sistemov ostaja nepogrešljiv del elektronike. Mikrokrmilniki nam s svojimi vgrajenimi ADC pretvorniki omogočajo enostavno povezovanje s tisoči različnih senzorjev. Z uporabo naprednejših tehnik, kot so zunanji pretvorniki, referenčne napetosti in filtri, pa lahko meje hobi elektronike premaknemo globoko v področje profesionalnih merilnih naprav. Spodbujamo vas, da v svojem naslednjem projektu namesto digitalnega senzorja poskusite uporabiti analognega in se sami prepričate o izzivih in prednostih te klasične tehnologije.



