高精度ADVF32與51系列單片機(jī)接口介紹
由于當(dāng)前12位以上的A/D轉(zhuǎn)換器價(jià)格昂貴,人們正在尋找新的途徑來(lái)取代它,而V/F變換器便是一種較好的選擇。由于V/F變換器具有高精度、高線性度的特點(diǎn),如美國(guó)模擬器件公司的ADVFC32(國(guó)產(chǎn)型號(hào)為5GVFC32),在滿度頻率為10 kHz時(shí)的非線性誤差僅為0.005 %FSR,而AD650可達(dá)0.002%FSR,而且外電路簡(jiǎn)單。因此用V/F變換器可以制成精度高,價(jià)格低廉的高性能A/D轉(zhuǎn)換器,其分辨率可達(dá)16位以上。在速度要求不太高的場(chǎng)合是很適用的,如用于稱重、壓力等各種傳感器信號(hào)的高精度數(shù)據(jù)測(cè)量系統(tǒng)中??梢灶A(yù)見,以V/F變換器制成的高精度A/D轉(zhuǎn)換電路在不久的將來(lái)將成為微計(jì)算機(jī)的一種具有競(jìng)爭(zhēng)性的接口電路。
用V/F變換器作A/D轉(zhuǎn)換時(shí),通常由一些硬件電路如振蕩器、二分頻器、計(jì)數(shù)器和門電路等組成,而由計(jì)數(shù)器計(jì)得的計(jì)數(shù)值,即A/D轉(zhuǎn)換結(jié)果,再通過接口電路送入微計(jì)算機(jī)進(jìn)行處理,較為復(fù)雜和不便;或者采用F/BCD變換電路,將V/F變換器輸出的頻率信號(hào)變?yōu)锽CD碼,再通過接口電路送入微計(jì)算機(jī),也較為復(fù)雜,而且還要對(duì)BCD碼進(jìn)行變換。這些方法成本都較高。
現(xiàn)介紹一種以單片機(jī)直接與V/F變換器接口進(jìn)行A/D轉(zhuǎn)換的方法,無(wú)需額外的硬件電路,完全利用單片機(jī)內(nèi)部的硬件資源,簡(jiǎn)單方便,成本最低,大大地提高了V/F變換器作為A/D轉(zhuǎn)換電路的可行性。
當(dāng)前,單片機(jī)特別是INTEL公司的51系列單片機(jī)已在智能儀器儀表和過程控制等方面得到廣泛應(yīng)用,已取代280,因此A/D轉(zhuǎn)換電路與單片機(jī)的接口方法也是人們所關(guān)注的。本文主要介紹V/F變換器ADVFC32作高分辨率A/D轉(zhuǎn)換時(shí)與51系列單片機(jī)(如8031等)接口的硬件和軟件。
一、硬件接口電路
ADVFC32與51系列單片機(jī)的硬件接口電路如圖1所示。圖中是輸入電壓信號(hào)為正時(shí)的情況。在輸入信號(hào)為負(fù)時(shí),只要把電阻R1、R3接地,從第14腳直接輸入即可。AD650的電路與ADVFC32的外電路相似。關(guān)于這兩種芯片的引腳排列及內(nèi)部結(jié)構(gòu)等請(qǐng)參考有關(guān)手冊(cè)。
由圖1可見,接口電路非常簡(jiǎn)單,只要把V/F變換器輸出的頻率信號(hào)直接送到單片機(jī)8031的定時(shí)器1的計(jì)數(shù)輸入端T即可。其設(shè)計(jì)思想為:從傳感器來(lái)的mV級(jí)電壓信號(hào)經(jīng)運(yùn)算放大器放大到0~10 V的電壓后,加到ADVFC32的輸入端,從頻率輸出端,OUT輸出的頻率信號(hào)加到單片機(jī)8031定時(shí)器1的計(jì)數(shù)輸入端Tl上。在單片機(jī)內(nèi)部由定時(shí)器作計(jì)數(shù)器時(shí),由定時(shí)器1對(duì)輸入脈沖計(jì)數(shù)。定時(shí)器O的定時(shí)時(shí)間由要求的A/D轉(zhuǎn)換分辨率設(shè)定。因?yàn)槎〞r(shí)器O在工作方式1時(shí)為16位定時(shí)器,所以最長(zhǎng)的定時(shí)時(shí)間為:
式中:foc為單片機(jī)晶體振蕩器的振蕩頻率,如foc=12 MHz,則
如要求的定時(shí)時(shí)間超過這一數(shù)值,定時(shí)器產(chǎn)生溢出中斷,可用單片機(jī)內(nèi)部RAM的存儲(chǔ)單元作軟件計(jì)數(shù),則可延長(zhǎng)定時(shí)時(shí)間。
8031的定時(shí)器1作計(jì)數(shù)器使用時(shí),可計(jì)數(shù)的外部脈沖最高頻率為單片機(jī)晶體振蕩器振蕩頻率的1/24,即
等于ADVFC32的最高允許工作頻率,故單片機(jī)8031的內(nèi)部定時(shí)器TO和Tl滿足對(duì)定時(shí)和計(jì)數(shù)的要求。
另外,單片機(jī)的定時(shí)器在作計(jì)數(shù)器使用時(shí),要求外部輸入脈沖的寬度至少為一個(gè)機(jī)器周期的時(shí)間。8031的一個(gè)機(jī)器周期等于12個(gè)振蕩周期,即V/F變換器輸出信號(hào)的脈沖寬度應(yīng)
而ADVFC32的輸出脈沖寬度為(0. 1~0. 15/ FMax)μs,其中fmax為滿度時(shí)輸出頻率。如fmax=100 kHz,則輸出脈沖寬度為:
滿足對(duì)脈沖寬度的要求。如fmax再提高,則脈沖寬度變小,需將脈沖展寬,如接一個(gè)555定時(shí)器等,然后再接到單片機(jī)上。
一次A/D轉(zhuǎn)換所須計(jì)數(shù)的脈沖數(shù)和定時(shí)器的定時(shí)時(shí)間是由所要求的分辨率決定的。
設(shè)分辨率為12位,則脈沖數(shù)=212 =4 096個(gè)。ADVFC32的最高工作頻率fmax有三種:
10 kHz、100 kHz和500 kHz?,F(xiàn)取fmax=100 kHz,則其脈沖周期
類似地,對(duì)于其他分辨率,由計(jì)算得出:
●分辨率為13位,脈沖數(shù)=8 192,定時(shí)時(shí)間=81. 92 ms;
●分辨率為14位,脈沖數(shù)=16 384,定時(shí)時(shí)間=163. 84 ms;
●分辨率為15位,脈沖數(shù)=32 768,定時(shí)時(shí)間=327. 68 ms;
●分辨率為16位,脈沖數(shù)=65 536,定時(shí)時(shí)間=655. 36 ms;
●分辨率為16.6位,脈沖數(shù)=100 000,定時(shí)時(shí)間=1s。
所以在fmax=100 kHz時(shí),如定時(shí)時(shí)間為1s,則其A/D轉(zhuǎn)換的分辨率超過16位。但實(shí)際上對(duì)分辨率的選取應(yīng)按實(shí)際的需要而定,過高的分辨率將使A/D轉(zhuǎn)換的速度下降。
為便于計(jì)算,現(xiàn)以最大脈沖數(shù)=20 000為例進(jìn)行設(shè)計(jì),則定時(shí)時(shí)間=200 ms,根據(jù)式2X-20 000,可求出分辨率為
即分辨率大于14位,滿足一般對(duì)高分辨率的要求。定時(shí)時(shí)間為200 ms,可轉(zhuǎn)換4~5次每秒,相當(dāng)于雙積分式A/D轉(zhuǎn)換器的轉(zhuǎn)換時(shí)間,亦不算太長(zhǎng)。
定時(shí)器O的初值計(jì)算如下:
設(shè)定時(shí)器0工作在方式1,為16位定時(shí)器。
①機(jī)器周期=12Toc=12×l/fc=12×1/(12×106)=1 μs
②16位定時(shí)器的最長(zhǎng)定時(shí)時(shí)間為216×機(jī)器周期-65 536×1μS= 65. 536 ms
現(xiàn)取整數(shù)值,設(shè)定時(shí)器0的定時(shí)時(shí)間=50 ms,則定時(shí)器O溢出4次即為200 ms,在定時(shí)器0溢出中斷程序中,由軟件計(jì)數(shù)4次即可。
③定時(shí)器O在定時(shí)時(shí)是對(duì)機(jī)器周期進(jìn)行計(jì)數(shù),定時(shí)50 ms的機(jī)器周期數(shù)=50 ms/1μs=5 000。
④定時(shí)器0可計(jì)的最大機(jī)器周期數(shù)= 216=65 536,故定時(shí)器O的初值=65 536 - 50 000=15 536-3CBOH
設(shè)定時(shí)器1也工作在方式1,為計(jì)數(shù)器狀態(tài),是16位計(jì)數(shù)器,最多可計(jì)216= 65 536個(gè)脈沖,而外部輸入的最大脈沖數(shù)=20 000<65 536,無(wú)溢出,故定時(shí)器1不必開中斷。
二、A/D轉(zhuǎn)換軟件
根據(jù)上述分析,得出A/D轉(zhuǎn)換的流程圖如下圖所示。在程序中,定時(shí)器1的低8位TL1和高8位TH1的值即為A/D轉(zhuǎn)換的結(jié)果,為二進(jìn)制數(shù),分別進(jìn)入單片機(jī)8031的內(nèi)部RAM單元31H和32H中暫存;然后即可對(duì)此結(jié)果進(jìn)行數(shù)據(jù)處理,如標(biāo)度變換等;或輸出顯示。本程序?yàn)橐淮蜛/D轉(zhuǎn)換的程序,如需多次A/D轉(zhuǎn)換,只須稍加修改,使其重復(fù)運(yùn)行,并將轉(zhuǎn)換結(jié)果存入不同的RAM單元,然后再加以處理即可。在程序中以內(nèi)部RAM的30H單元作為定時(shí)器0溢出次數(shù)的計(jì)數(shù)緩沖器,定時(shí)器O每溢出一次,30H的內(nèi)容溢出中斷服務(wù)程序便加1.當(dāng)30H的內(nèi)容為4時(shí),轉(zhuǎn)換結(jié)束。
此外,在中斷服務(wù)程序中要給定時(shí)器O重置初值,并且修正在重置初值前定時(shí)器已運(yùn)行的.7個(gè)機(jī)器周期。因?yàn)樵谥袛喾?wù)程序中沒用到累加器及其他寄存器,所以不必進(jìn)行保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)等操作。
A/D轉(zhuǎn)換的程序如下:
A/D轉(zhuǎn)換主程序
用單片機(jī)實(shí)現(xiàn)編碼器VD5026的工作時(shí)序