陳遠浩
(林百欣科技中專,廣東汕頭,515041)
模數(shù)轉(zhuǎn)換應用在數(shù)字電路和單片機智能控制等應用領域,作用非常大,以單片機為例,傳統(tǒng)的做法一般是采在專用模數(shù)轉(zhuǎn)換芯片或采用RC模式,這兩種方式各有優(yōu)缺點,前者優(yōu)勢是穩(wěn)定性一致性較好,抗干擾能力強,但是其缺點是成本高。玩具市場中,對價格特別敏感,具有量大,低成本的特點,為降低生產(chǎn)成本,常用簡單的電阻加電容來代替A/D轉(zhuǎn)換芯片。筆者長期從事單片機智能控制設計開發(fā)工作,在實際工作中逐步改良傳統(tǒng)RC模數(shù)轉(zhuǎn)換的劣勢,并實現(xiàn)抗干擾,高精度、低成本和批量生產(chǎn)時的一致性要求。
圖1 傳統(tǒng)RC模數(shù)轉(zhuǎn)換原理圖
傳統(tǒng)的方法如圖1所示,采用2501B單片機的P2.0 輸出低電平時,電容C1 通過電阻R2、P2.0放電,當P2.0為高阻或高電平時,電流通過R1、R2給電容C1充電,隨著時間的推移,A點的電壓慢慢升高,當A的電壓與B點的基準電壓相等時,C點會發(fā)生跳變,P2.1用于檢測C點的跳變。單片機記錄從C1充電到P2.1發(fā)生跳變時間T,就可以計算出被測電阻R2的模數(shù)轉(zhuǎn)換值D。充放電曲線如圖2所示。
這種方法存在如下問題:第一、電源電壓VCC波動會影響充放電時間從而影響轉(zhuǎn)換結果,第二、電容C1漏電或者低價電容的誤差比較大時,對轉(zhuǎn)換結果影響非常大,而高精度電容的價格又較高。第三、環(huán)境溫度的變化也會影響轉(zhuǎn)換結果,第四、轉(zhuǎn)換時間較長(如參考文獻中[1]中所述的一個通道轉(zhuǎn)換時間10mS),如果按航模標準,遙控器的發(fā)射信號的時間間隔不能超過20mS,而大多數(shù)的遙控汽車、遙控船、遙控玩具飛機的A/D通道數(shù)都超過3路,則需30毫秒的時間才能完成轉(zhuǎn)換。第五、成本仍然偏高,因為使用了比較器,其成本比A/D轉(zhuǎn)換芯片相差不大。
圖2 RC充放電曲線
基于以上傳統(tǒng)RC方案的缺陷,筆者提出用單片機端口提供充電電流,通過參考通道的轉(zhuǎn)換數(shù)據(jù)來修正目標通道的轉(zhuǎn)換結果的改良策略,其電路原理圖如圖3所示,以SONIX的SN8P2501B單片機,實現(xiàn)W1電位器的模數(shù)轉(zhuǎn)換為例;電路中P2.0用于電容的放電,兼用于檢測電容C9是否已充電到高電平的電壓,P2.1作為參考通道接5.1k的參考電阻,P2.2端口接待轉(zhuǎn)換的電位器W1,R1為保護電阻,預防W1為0時的電流沖擊。
電路基本工作方案是:當設置P2.1、P2.2為高阻狀態(tài),P2.0為低電平時,電容C9通過電阻R5放電;放電完成后,設置P2.1輸出高電平給C9充電,同時P2.0改為輸入狀態(tài),檢測C9上的電壓是否已充到單片機的高電平輸入狀態(tài),單片機記錄從P2.1開始給C9充電到P2.0檢測到高電平的時間TR6,即為參考通道電阻R6的充電時間。同理,當設置P2.1為高阻,P2.2為高電平,P2.0為輸入狀態(tài)時,P2.2通過電位器W1、電阻R1給電容C9充電,單片機記錄從P2.2開始給C9充電到P2.0檢測到高電平的時間TWR1,即為目標通道電位器W1電阻R1的充電時間。
圖3 改良后的RC模數(shù)轉(zhuǎn)換電路圖
該單片機的內(nèi)部引腳電路結構如圖4所示。
圖4 SONIX2501B引腳內(nèi)部電路結構
P2.0~P2.5都有內(nèi)置上拉電阻,可以通過指令使能。使能后等效電路如圖5,電容C9充電時間正比于單片機的電壓VDD,另一方面,根據(jù)SONIX2501B單片機的電氣特性,P2.0檢測到高電平的條件是T的電壓Vt>=0.7VDD,也是正比于單片機的電壓VDD,即當電源電壓VDD升高時,雖然充電快了,但同時P2.0所需的高電平電壓Vt也相應升高了,所以電源的波動對轉(zhuǎn)換結果沒什么影響。
圖5 單片機使能上拉電阻后的等效電路
引入?yún)⒖纪ǖ?,即增加R6通道做模數(shù)轉(zhuǎn)換。如在圖5中,當C9的電容誤差、環(huán)境溫度等因素影響W1所在通道的充電時長時,也同等程度影響了R6所在通道的充電時長,所以,程序中可根據(jù)R6通道所受影響程度來修正W1通道的數(shù)值。具體說就是根據(jù)TR6來修正TWR1。
C9放電時不走充電時的大電阻路徑(R1、W1),而是通過一個小電阻R5(100歐)走P2.0端口放電,平均放電時間縮小為1/26,故提高整體轉(zhuǎn)換時間。
圖6 通用4通道遙控電路原理圖(模數(shù)轉(zhuǎn)換部分)
圖6是我廠生產(chǎn)的通用4通道遙控電路原理圖(模數(shù)轉(zhuǎn)換部分),通過給電容C9充放電的計時,實現(xiàn)W1、W2、W3、W4共4路的模數(shù)轉(zhuǎn)換。本方案有如下特點:(1)為節(jié)省I/O端口及原材料,4路轉(zhuǎn)換共用一個充放電電容C9,共用一個放電電阻R5。(2)P2.0端口既為檢測C9是否已充電到高電平的檢測端口,又是C9的放電通路。(3)為縮短放電時間,提高整機運行速度,采用100歐姆小電阻放電。(4)為了降低生產(chǎn)成本,提高產(chǎn)品的競爭力,C9采用了低成本的瓷片電容,(5)加入電阻R6作為參考通道,通過比例換算巧妙解決了電容誤差、溫度、濕度等外部環(huán)境對轉(zhuǎn)換結果的影響。
電容C9的充放電波形如圖7所示,前4個鋸齒波分別是W1、W2、W3、W4所在通道的充放電曲線,第5個鋸齒波是參考通道R6的充放電曲線,電位器阻值為0歐或者5K時的鋸齒波分別如第1個、第2個鋸齒波。本實例5個鋸齒波總共時長在9mS以內(nèi),滿足航模20mS以內(nèi)的要求。
單片機時鐘采用內(nèi)部高速16MHz,4分頻,實測電路的A/D轉(zhuǎn)換精度接近10位,即1024級。
圖7 C9的充放波形圖
實例中單片機2501B的端口分配如表1所示。實例程序、流程圖中涉及的變量定義如表2所示。實例的程序流程圖如圖8所示。
表1
圖8 流程圖
表2
實例的編程過程
(1)系統(tǒng)初始化
①、各變量TR6、TWR1、TWR2、TWR3、TWR4等賦值0;②、因各通道端口通過電阻相連,為避免各通道充放電時的相互干擾,將相關端口P2.0~P2.5置為高阻模式,并全能上拉電阻。
(2)檢測參考通道值TR6,即檢測P2.1端口通過電阻R6給電容C9充飽電的時長。
第一步,P2.0端口設置為輸出模式,同時P2.0端口置0,即置為低電平,并延時1毫秒時間,讓C9上的電荷通過100歐的小電阻R5從P2.0端口快速放掉;第二步,放電完成后,P2.0端口恢復為高阻輸入模式,為檢測C9是否已充飽電做準備;同時,P2.1端口設置為輸出模式,端口置1,即置為高電平,P2.1端口電流開始通過5.1K的電阻R6給電容C9充電;第三步,檢測判斷P2.0端口是否為1(高電平狀態(tài)),如果為0,表示電容C9尚未充飽電,則變量TR6的數(shù)值加上1,(TR6=TR6+1),然后重復第三步;如果檢測P2.0的結果為1,表示P2.1端口電流已通過電阻R6給電容C9充飽電,此時TR6的大小值就是R6給電容C9的充電時長。
(3)類似于上面的3.4.2方法,檢測記錄出第1至4通道的充電時長TWR1、TWR2、TWR3、TWR4。
(4)數(shù)據(jù)處理
①根據(jù)參考通道時長TR6,修正計算出各電位器充電時長TW。
R1、R2、R3、R4為100歐的保護電阻,先算出給C9充電時100歐電阻所消耗的時長T100,TR6是5100歐(5.1k)所消耗的時長,所以5100:TR6=100:T100,T100=100*TR6/5100,5.1k=5k+100歐,故阻值為5k時所需時間TR5K=TR6-T100。因第一通道是W1串聯(lián)R1,故TWR1=TW1+T100,得出TW1=TWR1-T100,同理,TW2=TWR2-T100,TW3=TWR3-T100,TW4=TWR4-T100。
②根據(jù)產(chǎn)品的精度要求,按比例換算出各電位器的模數(shù)轉(zhuǎn)換結果ADW。
本實例的A/D轉(zhuǎn)換精度要求為256級,從0~255間變化,即TR5K等效于255,故TR5K:TW1=255:ADW1,得出電位器W1的模數(shù)轉(zhuǎn)換結果數(shù)值ADW1=255*TW1/TR5K,同 理 ADW2=255*TW2/TR5K,ADW3=255*TW3/TR5K,ADW4=255*TW4/TR5K。
本文介紹一種經(jīng)過改良的單片機數(shù)模轉(zhuǎn)換技術,其特點是低成本,高精度和實用性,目前本方案已應用在遙控航模飛機、遙控汽車、遙控船、四軸飛行器等多種玩具產(chǎn)品中,數(shù)量超百萬套,產(chǎn)品已銷往世界各地,歷經(jīng)嚴寒酷暑考驗,性能穩(wěn)定,本方案生產(chǎn)的電子產(chǎn)品,也已通過美國的FCC、歐盟的CE、RTTE、日本的PSE認證。本方案的物美價廉,成功幫助所在電子廠在激烈的市場中保持競爭優(yōu)勢。