|
在低成本智能儀表的設(shè)計過程中優(yōu)先考慮的是成本問題,作為核心部件的單片機通常選用低檔的8位機或4位機。就目前的情況而言,自帶A/D轉(zhuǎn)換的低檔單埏機價格昂貴,在需要進行數(shù)據(jù)采集要時往往通過外部A/D轉(zhuǎn)換器件,這在很大程度上增加了系統(tǒng)的成本。例如,目前AT89C2051單片機的零售價僅 7~8元,而中速A/D轉(zhuǎn)換器件的價格大都在20元以上。本文介紹的低成本A/D轉(zhuǎn)換方法僅使用兩片通用、廉價的器件就能達到中速A/D轉(zhuǎn)換的速度和低于 16位的轉(zhuǎn)換分辨率。 1 原理 有一線性良好的鋸齒波信號,最大幅度為Vmax,正程(0~Vmax)的掃描時間為t2(如圖1中的直線OB), 在正程掃描期間的某一時刻t所對應(yīng)的電壓Vt為Vmax(t/t2)。圖1中的曲線CD為一待測模擬信號,兩信號在A點相交,時間為t1,不難理解,線性鋸齒波在A點的幅度就是待測的模擬信號的大小,其值Vt1可以表示為:Vt1=Vmax(t1/t2)。這就是說,可以采用一種方法將待測的模擬信號與線性鋸齒波進行比較,當(dāng)線性鋸齒波在某一時刻的幅度超過待測模擬信號的幅度時就會引起比較器輸出狀態(tài)的改變。因此,測出比較器輸出狀態(tài)翻轉(zhuǎn)的時間,就能通過計算得到待測模擬信號的大小。 2 電路及A/D轉(zhuǎn)換的過程 圖2給出了具有8位分辨率的A/D轉(zhuǎn)換電路。圖中,IC1為AT89C2051單片機,其P1.0和P1.1除了具有通用I/O口線的功能外,還是內(nèi)部模擬比較器的同相輸入端和反相輸入端,比較器輸出的結(jié)果在內(nèi)部連接到P3.6。IC2和IC3為線性鋸齒波產(chǎn)生電路,其正程開始掃描的時刻由單片機的 P3.7控制。IC3為一雙輸入與非門緩沖驅(qū)動器,這里等效為一個開關(guān)。當(dāng)P3.7=0時,開關(guān)斷開,C1通過R1、W1充電,線性鋸齒波開始正程掃描,同時單片機內(nèi)部定時器0開始計數(shù),計數(shù)脈沖為單片機內(nèi)部時鐘。待測的模擬信號從P1.1輸入,因為線性鋸齒波電壓是從0開始線性遞增的,所以在開始正程掃描的時刻,P3.6為0.當(dāng)鋸齒波的電壓線性遞增到超過待測模擬信號的電壓時,比較器的輸出翻轉(zhuǎn),P3.6為1,此時定時器0的數(shù)值就是A/D轉(zhuǎn)換的結(jié)果,也就是圖1中所示的t1,通過前面的公式就可以得到待測模擬電壓的值。其程序框圖如圖3所示。 3 線性鋸齒波電路參數(shù)的確定 AT89C2051單片機的定時器0是一個16位計數(shù)器,因此這種方法所能達到的最高分辨率為16位,在最高時鐘頻率下(24MHz)完成一次A/D轉(zhuǎn)換的最長時間約為33ms。在實際應(yīng)用過程中不一定使用這么高的分辨率,在8位分辨率的情況下完成一次A/D轉(zhuǎn)換的最長時間為128μs。下面以8位分辨率為例介紹鋸齒波電路參數(shù)的確定方法。 對于圖2電路,當(dāng)P3.7輸出為低時,鋸齒波正程掃描開始,C1經(jīng)R1、W1充是,其電壓Vc1為: Vc1=Vcc×(1-e-(t/τ)) 其中τ=(R1+Rw1)C1 如果運放IC2:B將Vc1放大10倍,其輸出為: Vo1=[1+(R3/R2)]Vc1 =10Vcc(1-e-(t/τ)) 因為IC2:B的輸出并不是線性鋸齒波,所以增加一級IC2:A用作非線性補償,其輸出電壓Vo2可表示為: Vo2=Vi2=(Vo1+Vc3)/2 =[10Vcc(1-e-(t/τ))+Vo2(1-e-(t/η)12)]/2 式中:Vcc=5V;η=(R5+Rw2)C3 上式經(jīng)過整理可得: Vo2=50(1-e-(t/τ))/(1+e-(t/η)) 上式就是線性鋸齒波的理論表達式,通過合理選擇τ、η的值,就可以得到線性良好的鋸齒波。 在實際設(shè)計中,我們通過一段C語言程序可根據(jù)上式先從理論上求得最佳的τ、η的值,再根據(jù)實驗結(jié)果進行調(diào)整。其程序如下: #i nclude<stdio.h> #i nclude<math.h> int main(void) { int τ=640, η=610; /*預(yù)置τ、η的值*/ double result,result-bak=0; double t,x,y; system(“cls”); /*清屏幕*/ for(t=0;t<=127;t+=0.5)/*8位分辨率時,鋸齒波的正程為128微秒*/ { x=-t/τ; y=-t/η; result=50*(-exp(x))/(1+exp(y)); printf(“%4fmV”,(result-result-bak) 1000);/*每0.5微秒遞增的電壓(mv)*/ result-bak=result; } } 在τ=640μs、η=610μs時,通過上述編程處理,可使鋸齒波非常接近線性,每μs的線性誤差均在0.1mV以內(nèi),完全可達到8位分辨率A/D轉(zhuǎn)換的要求。 4 誤差分析及補償 采用該方法進行A/D轉(zhuǎn)換的誤差來源主要有兩個,第一是鋸齒波的非線性此起的誤差,根據(jù)上面的敘述,鋸齒波的非線性基本上對A/D轉(zhuǎn)換的結(jié)果不產(chǎn)生影響;第二是單片機在控制A/D轉(zhuǎn)換的過程中引出的,這包括三個方面:其一是在“打開轉(zhuǎn)換開關(guān)”和“定時器開始計數(shù)”這兩個動作中單片機不可能同時完成;其二是單片機判斷片內(nèi)模擬比較器翻轉(zhuǎn)的過程需要兩個機器周期,而計數(shù)器最小的計數(shù)單位為1個機器周期;第三個原因是單片機確認(rèn)模擬比較器輸出狀態(tài)翻轉(zhuǎn)和關(guān)閉定時器不可能同時完成。對于第一和第三種情況引起的誤差,由于它的確是指令執(zhí)行所引起的,其誤差的數(shù)值取決于指令執(zhí)行的時間,因而在轉(zhuǎn)換結(jié)束時將定時器0的值減去這個時間就可以了;而第二種情況引起的誤差是無法進行補償?shù)摹?/P> 5 結(jié)束語 采用本文所述的方法所設(shè)計的數(shù)據(jù)采集系統(tǒng)成本低廉,接口簡單,具有較高的性能價格比。需要指出的是,為保證系統(tǒng)的長期穩(wěn)定性,應(yīng)采用高穩(wěn)定的積分電容(C |