周渡海,何此昂
(1.北京建筑工程學(xué)院 電信學(xué)院,北京100044;2.華中科技大學(xué) 電氣學(xué)院)
在某些特定的場合(主要是在數(shù)字電子應(yīng)用方面),需要一個模擬信號輸入來進(jìn)行一些基本模擬量的測量,或者是提供可控的方式使用外部電位器。像這樣的需求,由一個內(nèi)置A/D(模/數(shù))轉(zhuǎn)換器的單片機就能很好地實現(xiàn);當(dāng)然,也可以使用一些經(jīng)濟(jì)的外部器件,由一個標(biāo)準(zhǔn)的數(shù)字Ⅰ/O口來實現(xiàn)簡單的A/D轉(zhuǎn)換功能。本文以Holtek系列單片機為對象,介紹使用標(biāo)準(zhǔn)的施密特輸入口或CMOSⅠ/O作為基本A/D轉(zhuǎn)換口的使用方法,為對A/D轉(zhuǎn)換精度要求不高的應(yīng)用提供了一種低成本的A/D轉(zhuǎn)換實用方案。
Ⅰ/O口A/D轉(zhuǎn)換的原理是:對某一電容充電達(dá)到某個固定的電壓值,然后以恒定電流進(jìn)行放電,通過測量放電時間來獲得當(dāng)前輸入信號的強弱。通過設(shè)置Ⅰ/O口為輸出高電平可以迅速地對電容進(jìn)行充電,在輸出口與電容之間建議串接一個100Ω的小電阻來限流,防止大電流損壞。電容充電的表達(dá)公式如下:
式中:VC是電容電壓,VO是Ⅰ/O口輸出電壓(與單片機實際工作電壓有關(guān))。將輸出口置高開始對電容充電后僅需短時間的延時,充電電壓即可達(dá)到VO的98%(這里需要的時間大約為39μs)。充電過程完成后,即可將控制口設(shè)置為輸入狀態(tài)。這是因為其輸入狀態(tài)為高阻態(tài),此時電容就只能通過三極管的發(fā)射極對地以恒定的電流放電。電流大小與發(fā)射極上串聯(lián)的電阻有關(guān),改變放電電流的大小即可改變放電斜率。
電流大小與電容電量之間的關(guān)系式如下:
式中:C是元件的電容,單位是F;dV/dt是電容上的電壓變化率,單位是V/s;I是流過電容的電流,單位為A。如圖1所示,如果流經(jīng)電容的電流是恒定的,那么充電時電容電壓上升的速率也是恒定的。也就是說,對電容的充放電曲線的斜率是由電容參數(shù)值和充放電電流值決定的,電壓的變化率dV/dt等于1/C。
圖1 電量與充放電時間關(guān)系圖
在放電時,如果電容與一個CMOS輸入端相連接,那么隨著電容電壓幅度的減小,當(dāng)其幅度降低到CMOS輸入的開關(guān)極限值時,CMOS輸入端將從高電平變?yōu)榈碗娖健J褂脙?nèi)部定時器/計數(shù)器從放電周期開始對輸入端進(jìn)行監(jiān)測。當(dāng)輸入端出現(xiàn)下降沿時,如果定時器/計數(shù)器停止計數(shù),則定時器寄存器的剩余值是與放電電流成比例的。放電電流大小是由發(fā)射極的兩個電阻決定的,其中一個電阻是電位器。
圖2 硬件設(shè)計圖
硬件電路由極少的標(biāo)準(zhǔn)元器件組成,如圖2所示。用一個紅色的LED(D1)提供一個大約1.8V的參考電壓,同時具有上電指示的功能(也可使用不同顏色的LED或串聯(lián)幾個低功耗的二極管,如1N4148)。LED的正向電壓與Q1(2N2222)基極到射極之間的電壓相減,便得出串聯(lián)電阻R1和R2上的電壓,從而在Q1的發(fā)射極產(chǎn)生一個恒流源。這將在Q1的集電極產(chǎn)生一個恒定的電流,該電流即為放電電流。三極管的集電極電流同基極電流的關(guān)系,是由三極管的放大倍數(shù)值決定的,與外部電路的精確度無關(guān)。幾乎所有的NPN型三極管都可以應(yīng)用到該電路中。單片機的Ⅰ/O引腳經(jīng)一個100Ω的電阻與電容C1連接,當(dāng)充電時,這個電阻對電容具有限流保護(hù)作用。在放電期間,Ⅰ/O口具有高輸入阻抗,所以不會影響A/D轉(zhuǎn)換的精確度。R1的作用是當(dāng)R2電位計在最小值時,確保三極管Q1工作在非飽和區(qū),并維持電流源工作。如果R1為1.2kΩ,那么提供的電流源的值大約為1mA,選取較小的電阻值以便于計算。選取R2為10kΩ的目的是,當(dāng)其在較大值時可降低功耗,并且可以防止外界干擾。
使用Holtek公司的HT48F06E的Flash Ⅰ/O型單片機來設(shè)計Ⅰ/O口A/D輸入方式。事實上任何一款帶有施密特觸發(fā)、CMOS Ⅰ/O結(jié)構(gòu)的Holtek單片機都可以使用。注意,NMOS型Ⅰ/O引腳不適合于該應(yīng)用。如果電容放電電壓的下降沿下降得相對比較緩慢,非施密特型的CMOS輸入也不適用于該應(yīng)用,因為緩慢的下降沿輸入在電壓降到門限電壓時不能產(chǎn)生一個明確的邏輯轉(zhuǎn)換。檢查電路將會發(fā)現(xiàn),電容電壓從Vdd開始放電到輸入引腳的門限電壓Vth之間的時間,可由電壓的變化量除以電壓的變化率求得。方程式如下:
式中:Vth是輸入引腳的門限電壓值,C是電容值,I是恒定的放電電流值。I可由三極管Q1發(fā)射極的電壓Ve除以R2與R3之和得出,代入方程式可得出:
式中:Ve是發(fā)射極電壓值,它可由LED的正向電壓減去三極管的Vbe得出。
A/D轉(zhuǎn)換編碼很簡單,它是由連續(xù)地對電容充放電來實現(xiàn)的。對電容充電,通過設(shè)置Ⅰ/O為輸出,并設(shè)置一個較長的固定時間周期以確保電容滿充。一個100nF的電容和一個100Ω的電阻可以達(dá)到10μs的固定時間周期,它可以作為一個計算合適充電時間的標(biāo)準(zhǔn)。對電容充電的合適時間應(yīng)不小于10倍的RC充電時間常數(shù)。當(dāng)Ⅰ/O口由低輸出變?yōu)楦咻斎霠顟B(tài),放電過程即可開始,同時定時計數(shù)器也開始計時。該系統(tǒng)使用3.58MHz的晶振,如果設(shè)置定時器預(yù)分頻器的值為16,將得到一個約4.47 μs的時鐘周期。此時,TMR寄存器的溢出周期為(255×4.47μs)=1.14ms。若該溢出周期遠(yuǎn)小于電容由滿充到輸入門限電壓值的放電時間,A/D轉(zhuǎn)換值將會是大于8位二進(jìn)制的數(shù)據(jù)。如果增加預(yù)分頻器值到64,將會得到一個足夠長的時鐘周期,允許A/D轉(zhuǎn)換值在8位(即255)以內(nèi)。軟件設(shè)計流程如圖3所示。
圖3 軟件設(shè)計流程
由于Holtek單片機的指令和處理方式與很多公司(如Atmel、TⅠ、NXP等)的微處理器類似,所以 Holtek單片機程序可以很方便移植到各類單片機中。
編者注:源代碼見本刊網(wǎng)站 www.mesnet.com.cn。
圖4為使用泰克公司示波器測試的電容兩端的電壓波形。可以清楚地看到電容充電整個過程的指數(shù)上升曲線。上升時間比預(yù)計值長,這可能是由于單片機CMOS輸出口的電壓驅(qū)動能力沒有理想中的好。這一點在充電周期起始階段、充電電流值比較大時,表現(xiàn)得尤為明顯。注意,電流源將不斷地從CMOS輸出口吸收電流,這對上升時間產(chǎn)生一些影響,可通過在電容充電時加一個較長延時來解決。這條曲線表明,在這個范例中,允許電容充電時間的編程值明顯長于所必需的時間,并且可以縮短整個A/D轉(zhuǎn)換的時間。至于比較重要的放電斜率,盡管沒有測量,但看起來線性度非常好。施密特觸發(fā)Ⅰ/O輸入口的轉(zhuǎn)換也很明顯,而且沒有檢測到干擾信號。另外,由高到低變化的門限電壓值為1.62V,這個值依賴于處理過程,而且隨著選擇的芯片不同而有所變化,它對A/D轉(zhuǎn)換值有著重要的影響。
圖4 實際測試波形
由于該應(yīng)用范例只是提供一個A/D轉(zhuǎn)換的基本形式,因此不適用于精確的測量,只適用于轉(zhuǎn)換精度有限的領(lǐng)域。絕對誤差的主要來源在于所使用電容的實際值和輸入電壓的門限值。盡管使用的電容為0.1μF,但它的容限可能會大。如果采用軟件校準(zhǔn)對絕對誤差進(jìn)行補償,那么將獲得一個合理的精確度。另外,還存在一些小誤差,其中一個就是電容放電時,由于三極管Vce電壓值不斷變化引起的放電電流的微弱變化。其他誤差可能是由不很理想的電源電壓引入的。注意:要確保沒有上拉電阻與Ⅰ/O引腳相連,否則將會產(chǎn)生誤差,影響到放電斜率的線性度,尤其在放電電流較小的情況下。
本文介紹如何用一個標(biāo)準(zhǔn)邏輯Ⅰ/O引腳與內(nèi)部定時器/計數(shù)器,以及一些低成本的器件來實現(xiàn)A/D轉(zhuǎn)換功能。雖然不是針對高精度的A/D轉(zhuǎn)換應(yīng)用,但這個構(gòu)思實際上可以實施于低分辨率、低成本的A/D轉(zhuǎn)換功能。在示波器曲線上隨意測量放電斜率,雖然測量方式比較簡單,但可以看到很好的線性度。目前,只使用了一個Ⅰ/O引腳,但很容易應(yīng)用于多通道模擬輸入。本文使用一個電位計提供模擬信號輸入,也可以用一個固定電阻來代替,并使用一個緩沖電壓源與三極管的基極連接,從而來提供模擬信號的輸入。雖然這個電壓源可以用來控制放電電流,但是對三極管保持導(dǎo)通并工作在線性區(qū)域的輸入電壓范圍加大了限制。使用外部中斷作為模擬測量輸入腳,可以實現(xiàn)更高效率的程序代碼,在A/D轉(zhuǎn)換過程中程序可以繼續(xù)執(zhí)行其他的任務(wù)。
本文介紹的方法可以廣泛地應(yīng)用于低成本的溫度檢測場合,諸如室外溫度計、電熱水器溫度檢測、空調(diào)溫度監(jiān)測等場合,具有一定的實用價值。
[1]何此昂,等.Freescale 08系列單片機開發(fā)與應(yīng)用實例[M].北京:北京航空航天大學(xué)出版社,2009.