2.2 項目二:A-D轉換器及其在計算機控制系統中的應用
2.2.1 任務1:ADC0809及其接口電路應用
1.ADC0809芯片介紹
ADC0809為8位逐位逼近式A-D轉換器,分辨率為1/28≈0.39%,模擬電壓轉換范圍為0~5V,標準轉換時間為100μs,采用28腳雙立直插式封裝,其內部結構及引腳如圖2-8所示。

圖2-8 ADC0809內部結構及引腳
ADC式在逐位逼近式A-D轉換原理基礎上,增加了一個8路模擬開關、一個用來選擇通道的地址鎖存與譯碼電路和一個三態輸出鎖存緩沖器,其引腳功能如下:
VIN0~VIN7:8路模擬量輸入端。允許8路模擬量分時輸入,共用一個A-D轉換器。
ALE:地址鎖存允許信號,輸入線,高電平有效。上升沿時鎖存3位通道選擇信號。
A、B、C:3位地址線,即模擬量通線道選擇線。ALE為高電平時,被選通道和地址的關系見表2-1。
表2-1 被選通道和地址的關系

START:A-D轉換啟動信號,輸入線,高電平有效。上升沿時將轉換器內部清零,下降沿時啟動A-D轉換。
EOC:轉換結束信號,輸出線,高電平有效。平時EOC為高電平,A-D轉換期間為低電平,A-D轉換結束后又變為高電平。EOC可用作向主機申請中斷的信號,或供主機查詢A-D轉換是否結束的信號。
OE:輸出允許信號,輸出線,高電平有效。該信號用來打開三態輸出鎖存緩沖器,將A-D轉換得到的8位數字量送到數據總線上。
DO0~DO7:8位數字量輸出。DO0為最低位,DO7為最高位。由于有三態輸出鎖存,可與主機數據總線相連。
CLOCK:外部時鐘脈沖輸入端。當脈沖頻率為640kHz時,A-D轉換時間為100μs。
VR+、VR-:基準電源正端、負端。取決于被轉換的模擬電壓范圍,通常,VR+=5V(DC),VR-=0V(DC)。
VCC:工作電源,5V(DC)。
GND:電源地。
了解ADC0809的內部轉換時序非常重要,這是設計硬件和軟件時的主要依據。如圖2-9所示,其轉換過程如下:首先ALE的上升沿將地址代碼鎖存、譯碼后選通模擬開關中的某一路,使該路模擬量進入到A-D轉換器中。同時START的上升沿將轉換器內部清零,下降沿啟動A-D轉換,即在時鐘的作用下,逐位逼近過程開始,轉換結束信號EOC即變為低電平。當轉換結束后,EOC恢復高電平,此時,如果對輸出允許信號OE輸入一高電平命令,則可讀出數據。

圖2-9 ADC00809的轉換時序
上述過程說明,判斷A-D轉換器是否完成一次轉換,可以依據轉換結束信號EOC電平的高低,或者根據輸入時鐘頻率計算出轉換芯片的轉換時間。因此,讀取A-D轉換數可以采用程序查詢、定時采樣、中斷采樣和CPU等待等多種方式。
另外,ADC0809這種芯片輸出端具有可控的緩沖鎖存門,易于直接與主機進行接口。在有一類芯片內部沒有緩沖鎖存門,不能直接與主機連接。這樣,在A-D轉換器與主機之間的數據線連接上也出現了直接連接、通過8255或鎖存器間接連接的幾種情形。
2.ADC0809接口電路
ADC0809接口電路主要是解決如何分時采集多路模擬量輸入信號的,即主機如何啟動A-D轉換,如何判斷A-D完成一次模-數轉換,如何讀入并存轉換結果的。下面僅介紹兩種典型的接口電路。
(1)采用程序查詢方式讀A-D轉換數
圖2-10為采用程序查詢方式讀A-D轉換數的接口電路,由PC總線、ADC0809以及74LS138譯碼器、74LS02非與門與74LS126三態緩沖器組成。圖中,啟動轉換的板址PA=01000000,每一路口地址分別為000~111,故8路轉換地址為40H~47H。

圖2-10 采用程序查詢方式讀A-D轉換數的接口電路
接口程序如下:

先說明啟動轉換過程:首先主機執行一條啟動轉換第1路的輸出指令,把AL中的數據送到地址為PA的接口電路中,此時AL中的內容無關緊要,而地址PA=40H使74LS138譯碼器的輸出一個低電平,連同OUT輸出指令造成的
低電平,從而使非與門74LS02(3)產生脈沖信號到引腳ALE和START,ALE的上升沿將通道地址代碼000鎖存并進行譯碼,選通模擬開關中的第1路VIN0,使該路模擬量進入8位A-D轉換器中;同時,START的上升沿使ADC0809中的逐位逼近清零,下降沿啟動A-D轉換,即在時鐘的作用下,逐位逼近A-D轉換過程開始。
接著,主機查詢轉換結束信號EOC的狀態,通過執行輸入指令,把地址為PB的轉換接口電路的數據讀入AL中,此時地址PB=01001000(48H),使74LS138譯碼器的輸出一個低電平,連同IN輸入指令造成的
低電平,從而使非與門74LS02(1)產生脈沖信號并選通74LS126三態緩沖器,使EOC電平狀態出現在數據線D0上。然后將讀入的8位數據進行帶位循環右移,以判斷EOC的電平狀態。如果EOC為“0”,則表示A-D轉換正在進行,程序再跳回REOC,反復檢查;如果EOC為“1”,則表示A-D轉換結束。
然后,主機執行一條輸入指令,把接口地址為P A的轉換數據讀入AL中,輸出一個低電平,連同IN輸入指令造成
低電平,從而使非與門74LS02(2)產生脈沖信號,即產生輸出允許信號到OE,使ADC0809內部的三態輸出鎖存緩存器釋放轉換數據到數據線上,并被讀入到AL中。
接下來,把A-D轉換數據存入寄存器BX所指的數據區首地址0000H中,數據區地址加1,為第2路A-D轉換數據的存放做準備;接口地址加1,準備接通第2路模擬量信號;計數器減1,不為0則返回START,繼續進行下一路的A-D轉換。如此循環,直到完成8路A-D轉換。
(2)采用定時方式讀A-D轉換數
采用定時方式讀A-D轉換數的接口電路如圖2-11所示,它與查詢方式不同之處僅僅在于啟動A-D轉換后,無需查詢EOC引腳狀態而只需等待轉換時間,然后讀取A-D轉換數。因此,硬件電路可以取消74LS126三態緩沖器及其控制電路,軟件上也相應地去掉查詢EOC電平的REOC程序段,而換之以調用定時子程序(CALL DELAY)即可。

圖2-11 采用定時方式讀A-D轉換數的接口電路
這里的定時時間應略大于ADC0809的實際轉換時間,圖2-10中ADC0809的CLOCK引腳(輸入時鐘頻率)為640kHz,因此轉換時間為8×8個時間周期,相當于100μs。
顯然,定時方式比查詢方式簡單,但前提必須預先精確地知道A-D轉換芯片完成一次A-D轉換所需的時間。
這兩種方法的共同點是硬件、軟件接口簡單,但在轉換期間獨占了CPU時間,好在這種逐位逼近式A-D轉換的時間只在微秒數量級。當選用雙積分式A-D轉換器時,因其轉換時間在毫秒級,因此采用中斷法讀A-D轉換數的方式更為適宜。因此,在設計數據采集系統時,究竟采用何種接口方式要根據A-D轉換器芯片而定。8位A-D轉換器的分辨率約為0.0039,轉換精度在0.4%以下,這對一些精度要求比較高的控制系統是不夠的,因此要采用更多位的A-D轉換器,如10位、12位、14位等A-D轉換器。下面以AD574A為例介紹12位A-D轉換器及其接口電路。