SVETELEKTRO

17. marca 2012   Verzia pre tlač Verzia pre tlač

Programujeme AVR v jazyku C – 7. časť


zawin

Parametre AD prevodníkov, práca s interným 10-bitovým AD prevodníkom mikrokontroléra ATmega8.

Analógovo-digitálny prevodník alebo analógovo- číslicový prevodník (ADC z anglického Analog-to-Digital Converter) je elektronické zariadenie na prevod analógového signálu na digitálny signál. Prevod analógového signálu na digitálny je využívaný pomerne často, keďže signály sa skoro výlučne analyzujú a spracovávajú číslicovo. Príkladom konkrétnych aplikácií analógovo-digitálneho prevodu sú napr. meranie napätia, prúdu, neelektrických veličín…

Základné parametre AD prevodníkov:


Rozlišovacia schopnosť (Resolution): Je daná počtom rozlíšiteľných úrovní analógového signálu. Mikrokontrolér ATmega8 má 10-bitový AD prevodník to znamená ,že jeho rozlišovacia schopnosť je 2^10 = 1024 úrovní.

Rozsah prevodníka: Je daný minimálnou a maximálnou hodnotou analógovej veličiny. Označuje sa zväčša symbolom FS (Full Scale). Rozsah AD prevodníka u Atmega8 môže byť 0-Vcc.

Krok kvantovania: Alebo citlivosť AD prevodníka je najmenšia rozlíšiteľná veľkosť analógovej veličiny, tj. rozdiel susedných hodnôt analógovej veličiny pri ktorých sa zmení výstupný digitálny údaj. Označuje sa ako LSB (Least Significant Bit)

Chyba kvantovania: Chyba kvantovania predstavuje teoreticky maximálny rozdiel medzi hodnotou analógovej veličiny a jej maximálnou hodnotou zodpovedajúcou danému digitálnemu údaju. Obyčajne je to ½ LSB

Rýchlosť prevodu (Conversion Time): Rýchlosť prevodu je daná počtom prevodov, ktoré je schopný prevodník uskutočniť za jednotku času, alebo časom za ktorý vykoná prevodník jeden prevod. U ATmega8 môže byť čas prevodu v závislosti od preddeličky a zdroja hodín v rozsahu 13-260us.

Chybu prevodníka možno vyjadriť v zložkách:
Chyba ofsetu (Offset error): je rovnaká pre celý rozsah AD prevodníka, vzniká posunutím nuly.

Chyba zosilnenia(Gain Error): Závisí od hodnoty analógového signálu.

Chyba nelinárnosti (Non – linearity error): Je spôsobená vtedy, ak závislosť vstupného analógového signálu nie je lineárne závislá od výstupného kódového slova.

AD prevodník mikrokontroléra ATmega8:

Základné vlastnosti:
10-bitové rozlíšenie
Absolútna presnosť +-2 LSB
Integrálna nelinearita 0.5 LSB
Čas prevodu 65 – 260us (do 15 ksps)
6 vstupných kanálov
2 ďalšie vstupné kanály, len v puzdrách TQFP a MLF
Vstupný rozsah 0 až Vcc
Voliteľné 2,56V interné referenčné napätie
Opakovací, prípadne jednorazový režim
Prerušenie po skončení prevodu
Spiaci režim, potlačenie šumu

Výpočet výstupnej digitálnej hodnoty pre AD prevodník:
ADC = (Vin * 2^n)/Vref (Vref – napätie referencie, Vin – vstupné napätie)
Pri Vin = 2,5V, Vref = 5V a rozlíšení AD prevodníka 10-bitov bude teda výstupná digitálna hodnota:
ADC = (2,5V * 2^10)/5 = 512.

Citlivosť AD prevodníka vypočítame ako:
LSB = Vref/(2^n) (Vref – napätie referencie, n – rozlíšenie AD prevodníka)
Pri Vref= 5V a rozlíšení AD prevodníka 10-bitov bude teda citlivosť:
LSB = 5/(2^10) = 4,9mV/bit

Registre AD prevodníka (viď strana 199 v datasheete):


Register ADMUX (ADC multiplexer selection register) :

Bity REFS1 a REFS0 – výber zdroja referenčného napätia pre A/D prevodník

(0, 0) – Referenčné napätie je privedené na pin AREF (povolený rozsah 2,0V – AVcc), interná referencia je vypnutá
(0,1) – Referenciu predstavuje napájacie napätie na pine AVcc (vnútorne sa piny AVcc a AREF prepoja). Na pin AREF pripájame blokovací kondenzátor
(1,0) – rezervované
(1,1) – Vnútorná referencia 2,56V s pripojením blokovacím kondenzátorom na AREF pin. Pozor, presnosť vnútornej referencie má toleranciu až +-10%.

ADLAR – zarovnanie výsledku, ADC Left Adjust Result
Pomocou obsahu bitu ADLAR je možné zvoliť zarovnanie výsledku prevodu v registroch ADCL a ADCH. Ak hodnota bitu ADLAR je log.1, potom výsledok prevodu je zarovnaný nasledovne: horných 8 bitov v registri ADCH a dva spodné bity v registri ADCL, bity 7 a 6. V opačnom prípade je spodných 8 bitov výsledku v registri ADCL a dva najvyššie bity v registri ADCH, v bitoch 0 a 1. Využíva sa to vtedy, ak nám dostačuje rozsah AD prevodníka iba na 8 bitov, teda v tom prípade zvolíme ADLAR=1 a prečítame len vrchný register ADCH.

ADLAR = 0

ADLAR=1

Bity MUX3,MUX2,MUX1,MUX0 – Výber kanála, Analog Channel Selection
Hodnota uvedených bitov určuje, ktorý z analógových vstupných kanálov je pripojený na vstup A/D prevodníka.



Register ADCSRA (ADC Control and Status RegisterA) – riadiaci a stavový register

ADEN: povolenie činnosti ADC, ADC enable
Zápisom log.1 do bitu ADEN sa povoľuje činnosť prevodníka. Nulovaním uvedeného bitu sa prevodník vypína. Ak bit ADEN vynulujeme v priebehu prevodu, potom prevodník dokončí prebiehajúci prevod a vypne sa.

ADSC: štart prevodu, Start Conversion ADC
Ak prevodník pracuje v jednorazovom režime pred každým prevodom musí byť do bitu ADCS zapísaná log.1. Po ukončení prevodu sa pred vynulovaním bitu ADCS výsledok prevodu zapíše do údajových registrov ADC.

ADFR: výber opakovacieho režimu, ADC free run select
Ak nastavíme bit ADFR na log.1 prevodník pracuje v opakovacom režime. Vynulovaním bitu ADFR ukončíme opakovací režim.

ADIF: príznak prerušenia, ADC interrupt flag
Tento bit je nastavený na log.1 vtedy, keď prevod skončil a údajové registre ADCH a ADCL sú naplnené novým výsledkom.

ADIE: povolenie prerušenia,ADC interrupt eanable
Ak bit ADIE je nastavený na log. 1 a je povolené globálne prerušenie vykoná sa prerušenie na akciu „dokončenie ADC prevodu“.

ADPS2 – ADPS0: nastavenie preddeličky, ADC prescaler select bits
Uvedené bity určujú deliaci pomer medzi hodinovou frekvenciou (clkCPU) a frekvenciou vstupných hodinových impulzov do ADC. Pre dosiahnutie presnosti výsledku na 10 bitov musí byť frekvencia AD prevodníka 50-200kHz.

Registre ADCH a ADCL:
– Výstupné registre, v ktorých sa nachádza výsledok AD prevodu. Tieto dva registre spoločne tvoria jeden 16-bitový register ADC.

Techniky na potlačenie šumu:

Digitálne obvody vnútri mikrokontroléra generujú elektromagnetický šum, ktorý môže mať negatívny vplyv na presnosť analógových meraní. Ak presnosť merania je kritická vplyv šumu môže byť čiastočne redukovaný nasledovným postupom:

1. Analógová časť mikrokontroléra a všetky analógové komponenty v aplikácii by mali mať pri návrhu PCB vlastnú analógovú zem. Analógová zem je s digitálnou spojená na PCB v jednom bode.

2. Minimalizujme dĺžku analógových signálových vodičov. Analógové signálové vodiče umiestnime tak, aby prechádzali nad analógovou zemniacou plochou. Vedieme ich čo najďalej od digitálnych vodičov s rýchlo sa meniacimi signálmi.

3. AVCC vývod spojíme s napájaním digitálnej časti VCC cez filtračný LC článok.

4. Použijeme funkciu potlačenia šumu CPU.

5. 5. Ak sú piny 0-3 portu C sú použité ako digitálne výstupy nemeníme ich pokiaľ prebieha prevod, pretože napájanie týchto pinov je spoločné s napájaním AD prevodníka.

Schéma zapojenia ATmega8:



Toto je štandardné zapojenie mikrokontroléra pre prácu s AD prevodníkom. Túto schému budeme využívať v nasledovných príkladoch. LC člen na pine AVCC slúži na potlačenie šumu, pre náš prípad stačí pripojiť pin AVCC priamo na VCC napájanie. Čo sa týka displeja, možno ho pripojiť na ľubovoľné piny mikrokontroléra okrem PORTC, pretože ten budeme využívať ako vstup pre AD prevodník. Piny treba následne definovať v hlavičkovom súbore lcd.h (viď predošlá časť seriálu).

Príklady:


Príklad č.1: využitie prerušenia na akciu skončenia AD prevodu
V prvom prípade nastavíme AD prevodník na free running mode s vyvolaním prerušenia pri skončení prevodu. V prerušení zapíšeme obsah registra ADC do globálnej premennej adc. V nekonečnej slučke hlavného programu prepočítavame hodnotu adc na napätie a tieto dve hodnoty zobrazujeme na displeji.

Zdrojový kód:

Príklad č. 2: Vytvorenie funkcie na čítanie kanála s AD prevodníka
Funkcia unsigned int Read_ADC(unsigned char channel); má parameter channel, kde napíšeme číslo kanála, ktorý chceme použiť ako vstup pre AD prevodník (viď tabuľka ADMUX). Návratovou hodnotou tejto funkcie je výsledok AD prevodu. Na zistenie skončenia prevodu využívame príznak na bite ADIF v registri ADCSRA. Túto hodnotu v nekonečnej slučke spolu s prepočítaním napätím zobrazujeme na displeji.

Pozn: Pokiaľ by sme chceli zobrazovať na displeji napätie ako desatinné číslo, treba nastaviť kompiler, aby prácu s desatinnými číslami umožňoval – viď predošlú časť seriálu.

Zdrojový kód:

Youtube video:

Ďakujem všetkým čo sa podieľali na tvorbe tohto článku.
V budúcej časti sa bližšie pozrieme na komunikáciu cez rozhranie USART.

Ako sa vám páčil tento článok?
  • Páči sa mi (0)
  • Súhlasím (0)
  • Zábavné (0)
  • Informatívne (0)
Najnovšie články od zawin (zobraziť všetky)

Komentáre (5)

  1. Milospr píše:

    perfektná práca zawin!! 😀 bude aj pdf verzia??

  2. xxx3l píše:

    Ahoj budu članky ešte pokračovať??? ako typ UART, TWI???

  3. darkmagic píše:

    Opravdu pěkná práce, už aby byl další díl;).
    Díky

Pridaj komentár