基于A/D芯片AD1674設(shè)計的數(shù)據(jù)采集電路
摘要:介紹了基于AD1671芯片設(shè)計的數(shù)據(jù)采集電路,該電路具有查詢、中斷和DMA三種數(shù)據(jù)傳輸功能,并且采用8253定時脈沖和端口寫兩種A/D啟動方式,適合于不同的應(yīng)用場合。
關(guān)鍵詞:A/D轉(zhuǎn)換 8253定時器 DMA方式
隨著科學(xué)技術(shù)的發(fā)展,計算機(jī)在測量與控制中的應(yīng)用日益廣泛。為了使外部世界的模擬信號與計算機(jī)接口,需要進(jìn)行模/數(shù)轉(zhuǎn)換,該轉(zhuǎn)換一般通過A/D芯片來完成。目前市場上出現(xiàn)了各種A/D芯片,且各種A/D芯片具有不同的控制方式和應(yīng)用條件。對于高速數(shù)據(jù)采集,最大采樣頻率取決于A/D的轉(zhuǎn)換時間以及數(shù)據(jù)的傳輸時間。提高最大采樣頻率可通過縮短A/D的轉(zhuǎn)換時間或提高數(shù)據(jù)的傳輸速度來實現(xiàn)。如果與PC機(jī)接口,數(shù)據(jù)的傳輸速度決定于PC機(jī)的主頻以及數(shù)據(jù)的傳輸方式,常用的有查詢和中斷方式,若采用DMA傳輸方式則可進(jìn)一步提高數(shù)據(jù)的傳輸速度。本文選取AD1674芯片,設(shè)計具有查詢、中斷和DMA三種數(shù)據(jù)傳輸方式的數(shù)據(jù)采集電路。該電路既可以采用定時器定時,通過8253定時器的控制設(shè)煊可變的采樣變(步進(jìn)間隔為1μs),獲得高準(zhǔn)確的采樣間隔;也可以采用軟件定時,通過端口寫啟動A/D來實現(xiàn)。在時序方面,該電路解決了A/D控制信號與計算機(jī)時序匹配問題,可能與高檔PC機(jī)進(jìn)行接口。
1 硬件設(shè)計
1.1 AD1674接口電路
文獻(xiàn)[1]詳細(xì)介紹了AD1674芯片的性能和控制信號的時序。在完全受控方式下,最好是用邏輯控制信號CE啟動數(shù)據(jù)讀或A/D轉(zhuǎn)換;在CE有效時,片選信號CS應(yīng)有效,并且控制信號R/C和A0已確定,只有滿足這種時序,AD1674才能正常工作。
1.2 A/D轉(zhuǎn)換及數(shù)據(jù)的讀時序
對A/D接口電路而言,只有PC機(jī)的時序與AD1674的要求時序匹配才能保證電路的正常工作。該電路的A/D轉(zhuǎn)換及數(shù)據(jù)的讀時序如圖1所示。
A在/D轉(zhuǎn)換時,8253的定時脈沖或端口寫脈沖QD經(jīng)過延時和調(diào)節(jié)定時寬度后,使A/D的使能控制CE開始啟動A/D轉(zhuǎn)換。同時QD寬度為1μs的低電平脈沖(在端口寫啟動方式下,1μs的低脈沖是由端口寫脈沖經(jīng)調(diào)節(jié)定時寬度后獲得)使R/C的轉(zhuǎn)換有效,A0及片選CS可在A/D轉(zhuǎn)換前設(shè)置為有效。當(dāng)讀取A/D轉(zhuǎn)換后的數(shù)據(jù)時,端口讀信號或DMA讀信號D直接使A/CD的使能控制CE啟動數(shù)據(jù)讀,此時R/C=1,R/C的讀有效,開始12位數(shù)據(jù)的讀取。當(dāng)A0=0時,讀取高八位數(shù)據(jù);當(dāng)A0=1時,讀取數(shù)據(jù)低四位,讀完后A0=0,準(zhǔn)備下一次A/D轉(zhuǎn)換??梢娫摃r序既能與PC機(jī)接口,又能使AD1674正常工作。
1.3 A/D轉(zhuǎn)換及數(shù)據(jù)讀取的實現(xiàn)電路
本電路的AD1674工作在完全受控方式。A/D轉(zhuǎn)換為12位,而轉(zhuǎn)換后數(shù)據(jù)分兩次讀取,即先讀數(shù)據(jù)的高八位,后讀數(shù)據(jù)的低四位。
1.3.1 A/D轉(zhuǎn)換的啟動方式
A/D轉(zhuǎn)換的啟動方式有兩種:8253定時器硬件啟動和寫端口軟件啟動。
8253定時器啟動方式應(yīng)用于對數(shù)據(jù)采集的時隔要求準(zhǔn)確的場合,該方式是利用8253的定時脈沖啟動A/D轉(zhuǎn)換,通過8253數(shù)據(jù)總線緩沖器(端口地址為&0X23F)輸出鑒別通道的計數(shù)初值,通過向6位鎖存器74LS174(端口地址為&0X23B)寫入控制字設(shè)定8253的控制字以及A/D片選控制位。6位鎖存器數(shù)據(jù)位定義說明如下:
A1A0=00:&0X23D口輸出的數(shù)據(jù)為計數(shù)器0的計數(shù)值。
A1A0=01:&0X23F口輸出的數(shù)據(jù)為計數(shù)器1的計數(shù)值。
A1A0=10:&0X23F口輸出的數(shù)據(jù)為計數(shù)器2的計數(shù)值。
A1A0=11:&0X23F口輸出的數(shù)據(jù)為計數(shù)器8253的方式字。
G0&G1=1:起動計數(shù)器0和計數(shù)器1;G0&G=0:禁止計數(shù)器0和計數(shù)器1。
CS=1:選中A/D芯片CS=0;不選中A/D芯片。
具體的實現(xiàn)電路如圖2所示。首先將8253定時通道0與通道1串聯(lián)起來定時,通道0的時鐘輸入CLK0的頻率是2MHz,工作在方式3(方波比率發(fā)生器)下,通道0的輸出OUT0為頻率1MHz的方波,作為通道1的輸入時鐘CLK1。通道1設(shè)定為方式2,即通道1的輸出OUT1從輸出開始一直維持高電平,計數(shù)回零后,輸出為低電平并自動重新裝入原計數(shù)值,低電平維持一個時鐘周期后,輸出恢復(fù)高電平并重新作減法計數(shù)。輸出OUT1分為兩路信號,一路通過與門U18A輸出,作為AD1674的R/C控制信號;另一路經(jīng)過單穩(wěn)觸發(fā)器U24延時和調(diào)節(jié)定時寬度后,再通過或門U15C輸出作為AD1674的CE控制信號。當(dāng)OUT1輸出寬度為1μs的低電平脈沖時,一方面使控制信號R/C的轉(zhuǎn)換有效,同時經(jīng)延時和調(diào)節(jié)定時寬度后,使A/D的使能控制CE開始啟動A/D轉(zhuǎn)換。因此在裝入計數(shù)初值以后,只要設(shè)置6位鎖存器U8的控制字,就可利用8253定時器啟動A/D。
寫啟動A/D方式應(yīng)用于軟件定時,即通過對端口(地址為&0X23D)寫來觸發(fā)A/D轉(zhuǎn)換。如圖2所示,端口寫信號一方面經(jīng)過單穩(wěn)觸發(fā)器U6A調(diào)節(jié)定時寬度(寬度為1μs)后,作為AD1674的R/C控制信號,同時經(jīng)過另一單穩(wěn)觸發(fā)器U24延時和調(diào)節(jié)定時寬度后,再通過或門U15C輸出作為AD1674的CE控制信號。
可見兩種啟動A/D轉(zhuǎn)換的過程相似。相比較而言,前者的采樣間隔是由8253定時脈沖的周期決定的,屬于可編程定時器方式定時,共特點(diǎn)是采樣間隔準(zhǔn)確;后者則由相鄰兩次寫端口(地址為&0X23D)的時間差決定采樣間隔,為軟件定時方式,特點(diǎn)是靈活方便。
1.3.2 A/D轉(zhuǎn)換數(shù)據(jù)的讀取方式
在數(shù)據(jù)采集系統(tǒng)中,計算機(jī)讀取A/D轉(zhuǎn)換數(shù)據(jù)的方式一般有三種,即查詢、中斷和DMA方式。其中查詢方式就是通過查詢標(biāo)志位來判斷A/D是否轉(zhuǎn)換完畢,如果A/D轉(zhuǎn)換完畢則讀入轉(zhuǎn)換的數(shù)據(jù)。這種方式下CPU主動查詢,通過CPU讀取A/D轉(zhuǎn)換的數(shù)據(jù),故實現(xiàn)的硬件電路簡單,但數(shù)據(jù)讀取速度慢,同時在WINDOWS的多任務(wù)執(zhí)行方式下,存在著A/D轉(zhuǎn)換數(shù)據(jù)不能及時讀入的問題。中斷方式是利用A/D轉(zhuǎn)換完畢的標(biāo)志位觸發(fā)一硬中斷,然后中斷管理器向CPU提出中斷申請。在中斷允許的情況下,執(zhí)行中斷服務(wù)程序讀入轉(zhuǎn)換的數(shù)據(jù)。這種方式實現(xiàn)的硬件電路也比較簡單,但中斷服務(wù)程序的介入,引起數(shù)據(jù)采集程序的斷點(diǎn)的不可預(yù)測性,這樣會導(dǎo)致數(shù)據(jù)采集程序的失控。DMA方式利用A/D轉(zhuǎn)換完畢的標(biāo)志位向DMA控制器提出DMA申請,當(dāng)DMA控制器從CPU取得總線控制權(quán)時,接口便與內(nèi)存之間直接地進(jìn)行數(shù)據(jù)交換(不經(jīng)過CPU)。這種方式下,由于不經(jīng)過CPU讀入數(shù)據(jù),故提高了數(shù)據(jù)傳輸速度。同時由于A/D轉(zhuǎn)換器主動申請數(shù)據(jù)傳輸,而DMA申請比外設(shè)中斷申請的優(yōu)先級高,A/D轉(zhuǎn)換數(shù)據(jù)能夠及時讀入,系統(tǒng)性能也得到了提高,但實現(xiàn)的硬件電路較前兩種方式復(fù)雜。
本電路設(shè)計有查詢、中斷和DMA三種數(shù)據(jù)傳輸方式。通過一撥碼盤開關(guān)來選擇不同的的傳輸方式。如圖3所示,當(dāng)A/D轉(zhuǎn)換完畢時,標(biāo)志位STS由高電平變?yōu)榈褪请娖?從而引起D觸發(fā)器U20A觸發(fā),U20A的輸出Q由低電平變成高電平。當(dāng)撥碼盤開關(guān)S1選擇為查詢方式時,該U20A的輸出Q通過一個三態(tài)門(端口地址為&0X23F)與數(shù)據(jù)線D6相連,提供計算機(jī)查詢;在中斷方式下,該U20A的輸出Q直接與硬中斷引腳IRQ2相連,當(dāng)Q由低電平變成高電平時,引起計算機(jī)中斷。在前兩種方式下,通過軟件編程,向一鎖存器U22的最低位寫入0或1,選擇讀取A/D轉(zhuǎn)換數(shù)據(jù)的高八位或低四位,且由專門的端口(地址為&0X23D)讀取A/D轉(zhuǎn)換的數(shù)據(jù)。實現(xiàn)的硬件電路簡單。而在DMA方式下,通過應(yīng)答信號DACK1尋址,并不由專門的端口讀取A/D轉(zhuǎn)換的數(shù)據(jù),故選擇A/D轉(zhuǎn)換數(shù)據(jù)的高八位或低四位的功能必須由硬件電路來實現(xiàn),比較而言,電路更復(fù)雜一些。
下面介紹DMA方式下的具體實現(xiàn)電路。DMA請求電路由兩個D觸發(fā)器組成,當(dāng)A/D轉(zhuǎn)換完畢時,U20A的輸出Q由低電平變成高電平,DRQ1=1,DMA通道1發(fā)出請求,DRQ1被認(rèn)可后進(jìn)行兩次DMA傳輸。在第一次DMA傳輸期間,觸發(fā)器U20B的輸出Q為低電平,A/D轉(zhuǎn)換數(shù)據(jù)的高八位傳輸?shù)街付▋?nèi)存單元。在第一次DMA傳輸結(jié)束時,DACK1由低電平變成高電平,觸發(fā)器U20B的輸出為高電平,但觸發(fā)器U20A的輸出Q仍然是高電平,該電平申請第二次DMA傳輸。在第二次DMA傳輸期間,觸發(fā)器U20B的輸出為高電平,A/D轉(zhuǎn)換數(shù)據(jù)的低四位傳輸?shù)街付ǖ膬?nèi)存單元。當(dāng)?shù)诙蜠MA傳輸結(jié)束時,DACK1由低電平變成高電平,使觸發(fā)U20B輸出低電平,同時觸發(fā)器U20A的輸出Q變?yōu)榈碗娖?DRQ1=0變?yōu)榈碗娖?DRQ1=0,DMA通道1的請求被撤銷,結(jié)束一次A/D轉(zhuǎn)換12位數(shù)據(jù)傳輸過程。
2 軟件設(shè)計
該接口電路支持各種帶有口指令操作的高級語言和8086/8088匯編語言。以下就以Turbo C為例對相應(yīng)的部分編程,經(jīng)供參考。
2.1 A/D編程
該編程適合于中斷或查詢方式下的編程,端口地址=0x238~0x23f。
outportb(0x23c,0x00); /*初始化清零*/
outportb(0x23a,0x00); /*選擇傳輸高8位數(shù)據(jù)并為A/D轉(zhuǎn)換作準(zhǔn)備*/
{
}; /*啟動A/D并檢查A/D是否轉(zhuǎn)換完畢*/
dh=inportb(0x23d); /*輸入高八位數(shù)據(jù)*/
outporth(0x23a,0x01); /*選擇傳輸?shù)退奈粩?shù)據(jù)*/
dl=inportb(0x23d); /*輸入低四位數(shù)據(jù)*/
outportb(0x23a,0x00); /*選擇傳輸高8位數(shù)據(jù)并為A/D轉(zhuǎn)換作準(zhǔn)備*/
dl=dl>>4;
dh1=dh;
dl=(dh1<<4)+dl;
dh=dh>>4; /*將高八位低四位數(shù)據(jù)轉(zhuǎn)化為高四位低八位數(shù)據(jù)*/
d=dh*256+dl; /*拼合12位數(shù)據(jù)*/
u=(d-2047)*10.0/4096; /*轉(zhuǎn)換電壓值*/
2.2 寫啟動和查詢方式的編程
outportb(0x23d,0x00); /*寫啟動A/D轉(zhuǎn)換*/
if(inporth(0x23e)&0x80);/*D7=1則A/D轉(zhuǎn)換完畢*/
2.3 8253定時器編程
outportb(0x23b,0x03); /*set 8253 timer into writing mode word state*/
outportb(0x23f,0x36); /*set 0 channel working with mode 3*/
outportb(0x23f,0x74); /*set 1 channel working with mode 2*/
outportb(0x23b,0x00); /*set to write data to 0 Channel mode */
outportb(0x23f,0x02); /*write low data to 0 channel*/
outportb(0x23f,0x00); /*write high data to 0 channel*/
outportb(0x23b,0x01); /*set to write data to 1 channel*/
outportb(0x23f,LC1); /*write low data to 1 channel*/
outportb(0x23f,HC1); /*write high data to 1 channel*/
outportb(0x23b,0x0c); /*啟動CH0,CH1工作*/
其中采樣頻率決寫入計數(shù)器1的計數(shù)值。
2.4 DMA方式下PC主機(jī)中8237A DMA控制器編程
8237A DMA控制器具有4個DMA通道,該接口電路使用通道1。
outportb(0x0x,0x05); /*mask DMA channel 1*/
outportb(0x0c,0x00); /*clear byet pointer flip*/
outportb(0x0b,0x55); /*write mode word.demand mode,address tincrease,autoinitialization,write trasfer and select 1*/
outportb(0x83,SEG); /*write page number*/
outportb(0x02,LA); /*write low 8 bit address*/
outportb(0x02,HA); /*write hige 8 bit address*/
outportb(0x03,LC); /*write low 8 bit count data*/
outportb(0x03,HC); /*write hige 8 bit count data*
outportb(0x03,0x01); /*clear mask bit of DMA channel*/
其中寫入11口的數(shù)值應(yīng)按照具體的工作方式來確定,寫入131口的頁地址SEG取20位絕對地址的最高4位的數(shù)值,而將低16位地址的數(shù)值寫入地址寄存器。寫基值字節(jié)計數(shù)寄存器的字節(jié)總數(shù)值應(yīng)為需要傳輸?shù)淖止?jié)數(shù)減1。
2.5 中斷服務(wù)程序的編寫以有中斷向量的裝入
void interrupt int9() /*中斷服務(wù)程序*/
{ disable();
ah5=inportb(0x23d); /*輸入高八位數(shù)據(jù)*/
outportb(0x23a,0x01); /*選擇傳輸?shù)退奈粩?shù)據(jù)*/
dl5=inportb(0x23d); /*輸入低四位數(shù)據(jù)*/
outportb(0x23a,0x00); /*選擇傳輸高8位數(shù)據(jù)并為A/D轉(zhuǎn)換作準(zhǔn)備*/
outportb(0x23c,0x00); /*A/D轉(zhuǎn)換完畢的標(biāo)志位清零*/
outportb(0x20,0x20);
enable();
}
void stall 1(void interrupt(*faddr)())
{
disable();
setvect(INT1,faddr); /*裝入中斷服務(wù)程序*/
enable();
}
本文介紹一種基于AD1674設(shè)計的接口電路,該電路具有查詢、中斷和DMA三種數(shù)據(jù)傳輸功能,同時采用8253定時脈沖或端口寫兩種A/D啟動方式。其中DMA方式實現(xiàn)了數(shù)據(jù)的快速傳輸,而兩種A/D啟動方式將會使采樣率的設(shè)定更加靈活。應(yīng)用本文原理設(shè)計的可插入通用PC機(jī)的數(shù)據(jù)采集板已用于我們的高頻多譜勒和到達(dá)角探測分析系統(tǒng)中,取得了滿意的效果。這些設(shè)計方法和原理在其它實際數(shù)據(jù)采集系統(tǒng)的設(shè)計過程中,也會具有重要的參考價值。