單片機(jī)內(nèi)部模擬比較器的應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
一般來(lái)說(shuō),內(nèi)部帶A/D轉(zhuǎn)換器的單片機(jī)價(jià)格都比較昂貴,而且一般只有8到10位的分辨率,這在高分辨率要求的場(chǎng)合顯然不適用;而普通的單片機(jī)則根本沒(méi)有 A/D轉(zhuǎn)換器。隨著現(xiàn)代電子技術(shù)的發(fā)展,出現(xiàn)了一些體積小、內(nèi)含模擬比較器的單片機(jī),如ATMAL的AT89C2051、ZILOG的Z86E04、 MICROCHIP的PIC16C620等,這些單片機(jī)在使用時(shí)連接比較器的端口一般只作普通I/O使用,而對(duì)其內(nèi)置的模擬比較器的應(yīng)用卻很少。下面以 AT89C2051為例,談?wù)劺脝纹瑱C(jī)內(nèi)置模擬比較器來(lái)構(gòu)成A/D轉(zhuǎn)換器的新方法。
1 硬件轉(zhuǎn)換電路
AT89C2051 是MCS51單片機(jī)系列中的一種,它雖然只有20個(gè)引腳,卻集成了51系列單片機(jī)的標(biāo)準(zhǔn)內(nèi)核,其中包括2k程序存儲(chǔ)器、128字節(jié)數(shù)據(jù)存儲(chǔ)器、2個(gè)16位定時(shí)計(jì)數(shù)器、一個(gè)標(biāo)準(zhǔn)全雙工UART和一個(gè)精確的模擬比較器,而這個(gè)模擬比較器是以前產(chǎn)品所沒(méi)有的。圖1是利用AT89C2051的模擬比較器來(lái)構(gòu)成雙積分式A/D轉(zhuǎn)換器的電路原理圖。其中:內(nèi)置模擬比較器的結(jié)構(gòu)如圖中虛線(xiàn)包圍部分所示,比較器的正、反相輸入端分別與P1.0、P1.1連接,這是兩個(gè)漏極開(kāi)路無(wú)上拉電阻的輸出和輸入端口,當(dāng)向P1.0、P1.1寫(xiě)“1”時(shí),M1、M2截止,相當(dāng)于P1.0、P1.1對(duì)數(shù)字部分懸空,這時(shí)比較器的輸入不受單片機(jī)端口輸出的影響;由于P1.0、P1.1具有很強(qiáng)的灌電流能力,當(dāng)寫(xiě)入“0”時(shí),P1.0、P1.1能吸入20mA的灌電流,而且M1、M2的飽和電壓很低,利用這一特點(diǎn)可為積分電容徹底放電。比較器輸出端在單片機(jī)內(nèi)部與P3.6連接,讀P3.6就可得到比較器的輸出結(jié)果。因此,利用 AT89C2051這個(gè)內(nèi)置的比較器,再加上少量的外圍器件就可組成雙積分式A/D轉(zhuǎn)換器。圖1中,I0為恒流源,其電流約為0.5~2mA,Cf是積分電容,Cf與I0的選擇取決于A/D轉(zhuǎn)換的位數(shù),Vref為參考電壓,一般取模擬輸入電壓最大值的一半,U2是一個(gè)模擬開(kāi)關(guān),其中通道0接參考電壓,通道1至7接模擬輸入,即該A/D轉(zhuǎn)換器有7個(gè)輸入通道。
2 轉(zhuǎn)換過(guò)程
當(dāng)恒流源對(duì)電容器積分時(shí),積分電容上的電壓與時(shí)間成線(xiàn)性比例關(guān)系,這樣利用單片機(jī)內(nèi)部的定時(shí)計(jì)數(shù)器就可分別測(cè)量參考電壓及模擬輸入電壓的積分時(shí)間,再通過(guò) CPU的運(yùn)算來(lái)得到轉(zhuǎn)換的結(jié)果。單片機(jī)的端口P1.2至P1.4可用來(lái)輸出模擬開(kāi)關(guān)通道選擇地址,定時(shí)計(jì)數(shù)器T0可設(shè)定為方式1,16 位定時(shí)狀態(tài),用來(lái)測(cè)定積分時(shí)間。該轉(zhuǎn)換過(guò)程可分5個(gè)步驟:
第一步為積分電容的放電,主要是向P1.1寫(xiě)“0”,利用其吸入灌電流大的特點(diǎn)為Cf放電,同時(shí)定時(shí)計(jì)數(shù)器T0清零。
第二步是參考電壓積分,即模擬開(kāi)關(guān)選擇通道0,相當(dāng)于Vref接至比較器的正輸入端,并向P1.1寫(xiě)“1”,同時(shí)啟動(dòng)定時(shí)計(jì)數(shù)器,這樣,I0開(kāi)始對(duì)Cf積分;程序循環(huán)讀P3.6狀態(tài),以檢測(cè)比較器的輸出結(jié)果,當(dāng)積分電容上的積分電壓稍大于(由于比較器有極高的增益,故可近似地看作等于)參考電壓時(shí),比較器的輸出反轉(zhuǎn),P3.6發(fā)生由高至低的跳變。程序檢測(cè)到這個(gè)跳變后,停止定時(shí)計(jì)數(shù)器,保存此時(shí)的定時(shí)計(jì)數(shù)器結(jié)果Tref,此時(shí)可由恒流源對(duì)電容積分的關(guān)系式得出:Vref=(I0 Tref)/Cf
第三步為積分電容放電,也就是重復(fù)第一步對(duì)Cf放電和定時(shí)計(jì)數(shù)器T0清零。
第四步為輸入電壓積分,此時(shí)模擬開(kāi)關(guān)可選擇通道1~7中的一個(gè),相當(dāng)于模擬輸入電壓Vx接至比較器的正輸入端,重復(fù)第二步對(duì)輸入電壓積分,則可得到積分時(shí)間Tx,因此,Vx=(I0Tx)/Cf
以上4步積分電容Cf上的積分電壓波形如圖2所示。
第五步是通過(guò)CPU的運(yùn)算來(lái)求得A/D轉(zhuǎn)換的結(jié)果,由第二步結(jié)果除以第四步結(jié)果,可以得到:
Vref/Vx=Tref/Tx
變換后得:
Vx=(VrefTx)/Tref
上式即A/D轉(zhuǎn)換的結(jié)果。
從上式可以看出:A/D轉(zhuǎn)換結(jié)果Vx只與Vref、Tx、Tref有關(guān)而與I0、Cf無(wú)關(guān)。這一點(diǎn)非常重要。因?yàn)樗馕吨谵D(zhuǎn)換過(guò)程中抑制了恒流源和積分電容溫漂所造成的誤差,從而保證了該A/D轉(zhuǎn)換器工作的穩(wěn)定性,這也正是積分式A/D轉(zhuǎn)換器的優(yōu)點(diǎn)。理論上,該A/D轉(zhuǎn)換器的精度只取決于參考電壓的穩(wěn)定性和單片機(jī)定時(shí)計(jì)數(shù)器的精確度,而這兩點(diǎn)都相對(duì)比較容易保證。當(dāng)然,這是指在恒流源為理想恒流源的情況,實(shí)際上恒流源的特性決定了該A/D轉(zhuǎn)換器的非線(xiàn)性誤差,因此,在要求較高的場(chǎng)合,應(yīng)選用線(xiàn)性好的恒流源集成電路,如LM334等,而在要求不高的情況下則可用圖3所示的由分立元件組成的恒流源電路來(lái)實(shí)現(xiàn)A/D轉(zhuǎn)換。這時(shí)積分電容可選擇溫度系數(shù)較小的滌綸電容等。
需要注意的是,由于單片機(jī)采用端口查詢(xún)的方式來(lái)檢測(cè)比較器的輸出結(jié)果,MCS51系列單片機(jī)端口查詢(xún)命令需要占用2個(gè)機(jī)器周期,而定時(shí)計(jì)數(shù)器則需要在每個(gè)機(jī)器周期上加1。因此,在使用時(shí)有可能在比較器的輸出反轉(zhuǎn)時(shí),程序不能立刻停止定時(shí)計(jì)數(shù)器,而是要等到下一個(gè)機(jī)器周期運(yùn)行到CLRTR0語(yǔ)句時(shí)才停止。這樣,定時(shí)計(jì)數(shù)器的值總為偶數(shù),這一問(wèn)題如果不在程序中進(jìn)行處理就會(huì)造成誤差。解決的方法是增加I0、Cf的積分時(shí)間,即把積分時(shí)間加大一倍,再把定時(shí)計(jì)數(shù)器的讀數(shù)即Tref和Tx除以2,這樣就能把定時(shí)計(jì)數(shù)器多加了1的誤差去掉而得到正確的結(jié)果。也就是說(shuō),如果要得到12位的分辨率,那么就需要有13位的定時(shí)計(jì)數(shù)器的讀數(shù)。這種算法雖然犧牲了定時(shí)計(jì)數(shù)器的1位分辨率,加長(zhǎng)了轉(zhuǎn)換周期,但是確保了測(cè)量結(jié)果的準(zhǔn)確性。對(duì)于有模擬比較器輸出跳變中斷的單片機(jī)如Z86E08等,上述過(guò)程處理起來(lái)會(huì)更簡(jiǎn)單,可用程序在比較器輸出反轉(zhuǎn)時(shí)來(lái)設(shè)定中斷,并在中斷子程序的開(kāi)始時(shí)停止定時(shí)計(jì)數(shù)器,其讀數(shù)減去從比較器中斷到執(zhí)行中斷子程序之間的機(jī)器周期數(shù)即為實(shí)際積分時(shí)間。
由于AT89C2051的定時(shí)計(jì)數(shù)器為16位,所以該A/D轉(zhuǎn)換器的分辨率實(shí)際上可以達(dá)到15位。調(diào)整I0和Cf的值就能改變A/D轉(zhuǎn)換器的分辨率,I0和Cf的取值與分辨率和單片機(jī)時(shí)鐘頻率之間的關(guān)系,應(yīng)滿(mǎn)足下式:
12×2N+1/(f0 Vmax)≤Cf/IO≤12×216/(f0Vmax)
式中Vmax 為最大模擬輸入電壓,N為分辨率位數(shù),f0為單片機(jī)的時(shí)鐘頻率。根據(jù)上式,在設(shè)計(jì)時(shí)應(yīng)保證足夠長(zhǎng)的積分時(shí)間以保證分辯率的要求。同時(shí)還應(yīng)保證積分時(shí)間不能超過(guò)單片機(jī)的最大定時(shí)值,以免引起定時(shí)計(jì)數(shù)器的溢出。
3 軟件編程
整個(gè)工作過(guò)程的主要程序如下(該程序采用MCS51匯編語(yǔ)言編寫(xiě))。除法子程序和20μs延時(shí)子程序分別為:
(1)初始化主程序:
4 結(jié)束語(yǔ)
上述所述,采用內(nèi)部帶模擬比較器的單片機(jī)加上少量的外國(guó)元件,并在程序上稍作處理,就能夠構(gòu)成一種新的A/D轉(zhuǎn)換器,該方法可節(jié)約因擴(kuò)展A/D而占用的大量I/O,而且這種A/D轉(zhuǎn)換器能達(dá)到很高的分辯率和精度,并且有抗干擾能力強(qiáng)、分辯率可由程序調(diào)整的特點(diǎn),從而增加了單片機(jī)的應(yīng)用范圍和使用靈活性,同時(shí)就應(yīng)用系統(tǒng)的設(shè)計(jì)也顯得簡(jiǎn)潔和不效。
參考文獻(xiàn)
1.AT89 系列單片機(jī)。愛(ài)迪爾電子有限公司
2.Discrete Z8 Microcontrollers Databook.Zilong,Inc