單片機(jī)內(nèi)部模擬比較器的應(yīng)用
需要注意的是,由于單片機(jī)采用端口查詢的方式來(lái)檢測(cè)比較器的輸出結(jié)果,MCS51系列單片機(jī)端口查詢命令需要占用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)滿足下式:
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)初始化主程序:
評(píng)論