Jste zde

AT89C2051 jako integrační A/D převodník

Integrační AD převodník pro AT89C2051 pouze s jediným odporem a kondenzátorem. Ukázka řešení, včetně ovládacího programu pro CPU.

V některých aplikacích potřebujeme jednoduchou indikaci napěťových úrovní v zapojení vybavených mikropočítačem. V takových případech obvykle použijeme integrovaný A/D převodník. Pokud nám postačí menší přesnost můžeme použít integračního převodníku s využitím vnitřního analogového komparátoru, který obsahuje procesor 89C2051. K vlastní realizaci A/D převodníku nám postačí kondenzátor a rezistor! V některých případech je vhodné doplnit měřící vstup ochranným obvodem s rezistoru a diod. 

Zapojení a princip převodu
Na vstup P1.(Uvst) se přivádí měřené napětí U1, které je porovnáváno vestavěným komparátorem s napětím nabíjejícího se kondenzátoru C1 z RC článku R1-C1. Odpor R1 může být připojen přímo na napájecí napětí, protože pro startování nabíjení kondenzátoru velmi elegantně používáme tranzistor T1, který obsahuje procesor 2051 přímo sám v sobě a je určen pro spínání portu P1.1 do log. 0, je-li por pouřit jako výstupní. 
Díky tomu vytvoříme A/D převodním jenom s použitím odporu a kondenzátoru.

Čas od rozpojení T1 = zahájení nabájení RC článku, do překlopení komparátoru je vždy úměrný velikosti Uvst, které měříme. Čas je daný rovnicí nabíjení kondenzátoru [1]. Průběh nabíjecího napětí RC článku je sice exponenciální, ale při vhodně zvoleném horním možném měřitelném vstupním napětí je převod téměř lineární (viz graf). 

Popis převodu 
Převod začíná vybitím kondenzátoru C1 pomocí výstupu P1.1 (tranzistor T1, čas t1 v grafu). Po rozpojení T1 se začne C1 nabíjet přes rezistor R1. Současně je spuštěn vnitřní čítač (CT0), který měří čas až do okamžiku kdy se překlopí interní komparátor Q1. To znamená, že v tomto okamžiku napětí Uc dosáhlo velikosti Uvst. Tento okamžik je v grafu označen jako čas t2. Čas t2-t1 je úměrný Uvst (pro menší vstupní napětí se komparátor překlopí dříve a t2-t1 bude menší). Čas je dán rovnicí [1], nárůst Uc je exponenciální a bylo by jej možné linearizovat použitím zdroje proudu pro nabíjení C1. Volbou R1 C1 měníme rychlost nárůstu Uc a dostatečně velkým rezistorem R1 nabíjení v podstatě linearizujeme. S uvedenými hodnotami součástek slouží převodník s napájením 5V k indikaci napětí přibližně do 2,5V - zhruba při této úrovni Uvst načte vnitřní čítač hodnotu 255 (oscilátor 24MHz). Stabilitu převodu určuje stabilita napájecího napětí Ucc v průběhu měření a odchylka napětí Vcc během převodu od hodnoty během kalibrace.

Linearita převodníku 
Graf linearity převodníku byl získán pomocí testovacího programu tak, že na výstupy P1.4 až P1.7 (vyšší nibble) a P3.0 až P3.3 (nižší nibble) byly připojeny LED diody a získané binární číslo bylo převedeno na dekadické (Výstupní hodnota). Z grafu je patrné, že převodník bude vhodný pro hrubou indikaci analogové hodnoty.

Rovnice nabíjení C1 [1] 

Výpis programu k otestování převodníku je přiložen. 
Pomocí tohoto programu byla testována linearita převodu. 
Výstup čítače je přenášen na porty P3.0 až P3.3 a P1.4 až P1.7.

 

;Stazeno z www.HW.cz 
;                   & nbsp;          Autorem tohoto SW je Ondrej Weisz -  oweisz@iol.cz

;---------------------------------------------------------------------
; integrační převodník AD
; s využitím vnitřního komparátoru
;
; na P1.1 je připojen C 22nF, na P1.0 se přivádí Ux (0 až 5V!!)
; kondenzátor je vybíjen portem a nabíjen přes odpor 10kohm
; ze zdroje 5V (Ucc). Měří se doba za kterou dosáhne náboj kondenzátoru
; vstupního napětí Ux (komparátor). Doba je úměrná napětí
; pro přesnější měření by bylo nutné nabíjet kondenzátor
ze zdroje
; konstantního proudu, nebo přepočítávat dobu pomocí logaritmu -
; inverze nabíjecí rovnice kondenzátoru Uc=Uo*exp(-t/RC). Hodnoty
; součástek jsou stanoveny pro krystal 24MHz tak, aby CT0 načítal
; hodnotu 256 přibližně při napětí Ux = 2.5V
;
; pro kontrolu je po ukončení měření přenesen obsah CT0-TL0
; na porty P1 a P3, tak aby na P3.0 až P3.3 vystupovalo nižší
; nibble a P1.4 až P1.7 vyšší nible
;
;
setCT   .equ 00000001b    ;nastavení čítače
        .org 0
        mov TMOD,#setCT   ;nastavení
čítače
opak:   clr P1.1          ;vybití
kondenzátoru
        nop
        nop
       
nop               ;prodleva na vybití
        setb P1.1        
;zahájení nabíjení
        setb
TR0          ;start čítání
cekej:  jb P3.6,cekej     ;čekání na překlopení
komparátoru
        clr
TR0           ;zastavení čítače
        mov A,TL0        
;přenos stavu čítače
        orl A,#0F0h      
;vymaskování horního nibble
        mov
P3,A          ;a přenos na P3
        mov A,TL0        
;přenos stavu čítače
        orl A,#0Fh       
;vymaskování dolního nibble
        mov
P1,A          ;a přenos na P1
        mov TL0,#0       
;vynulování čítače
        ajmp opak        
;a vše znovu dokola
        .end
; konec programu --------------------------------------------------------
;Stazeno z www.HW.cz 
;                   &
nbsp;          Autorem tohoto SW je Ondrej Weisz - oweisz@iol.cz

Pokud máte hotové podobnoé SW rutiny, které chcete publikovat, pošlete nám je pokošíme se zde vytvořit knihovnu podobných utilit. - INFORMACE PRO AUTORY
 
center>DOWNLOAD rutiny v .ZIP souboru
Hodnocení článku: