ad1674應用電路
數據采集程序的斷點的不可預測性,這樣會導致數據采集程序的失控。DMA 方式利用A/D 轉換完畢的
標志位向DMA 控制器提出DMA 申請,當DMA 控制器從CPU 取得總線控制權時,接口便與內存之間直接地進行數據交換(不經過CPU)。這種方式下,由于不經過CPU 讀入數據,故提高了數據傳輸速度。同時由于A/D 轉換器主動申請數據傳輸,而DMA 申請比外設中斷申請的優先級高,A/D 轉換數據能夠及時讀入,系統性能也得到了提高,但實現的硬件電路較前兩種方式復雜。
本電路設計有查詢、中斷和DMA 三種數據傳輸方式。通過一撥碼盤開關來選擇不同的的傳輸方式。如圖3 所示,當A/D 轉換完畢時,標志位STS 由高電平變為低是電平,從而引起D 觸發器U20A 觸發,U20A 的輸出Q 由低電平變成高電平。當撥碼盤開關S1 選擇為查詢方式時,該U20A 的輸出Q 通過一個三態門(端口地址為0X23F)與數據線D6 相連,提供計算機查詢;在中斷方式下,該U20A 的輸出Q 直接與硬中斷引腳IRQ2 相連,當Q 由低電平變成高電平時,引起計算機中斷。在前兩種方式下,通過軟件編程,向一鎖存器U22 的最低位寫入0 或1,選擇讀取A/D 轉換數據的高八位或低四位,且由專門的端口(地址為0X23D)讀取A/D 轉換的數據。實現的硬件電路簡單。而在DMA 方式下,通過
應答信號DACK1 尋址,并不由專門的端口讀取A/D 轉換的數據,故選擇A/D 轉換數據的高八位或低四
位的功能必須由硬件電路來實現,比較而言,電路更復雜一些。
下面介紹DMA 方式下的具體實現電路。DMA 請求電路由兩個D 觸發器組成,當A/D 轉換完畢時,U20A 的輸出Q 由低電平變成高電平,DRQ1=1,DMA 通道1 發出請求,DRQ1 被認可后進行兩次DMA傳輸。在第一次DMA 傳輸期間,觸發器U20B 的輸出Q 為低電平,A/D 轉換數據的高八位傳輸到指定內存單元。在第一次DMA 傳輸結束時,DACK1 由低電平變成高電平,觸發器U20B 的輸出為高電平,但觸發器U20A 的輸出Q 仍然是高電平,該電平申請第二次DMA 傳輸。在第二次DMA 傳輸期間,觸發器U20B 的輸出為高電平,A/D 轉換數據的低四位傳輸到指定的內存單元。當第二次DMA 傳輸結束時,DACK1 由低電平變成高電平,使觸發U20B 輸出低電平,同時觸發器U20A 的輸出Q 變為低電平,DRQ1=0 變為低電平,DRQ1=0,DMA 通道1 的請求被撤銷,結束一次A/D 轉換12 位數據傳輸過程。
2 軟件設計
該接口電路支持各種帶有口指令操作的高級語言和8086/8088 匯編語言。以下就以Turbo C 為例對
相應的部分編程,經供參考。
2.1 A/D 編程
該編程適合于中斷或查詢方式下的編程,端口地址=0x238~0x23f。
outportb(0x23c,0x00); /*初始化清零*/
outportb(0x23a,0x00); /*選擇傳輸高8 位數據并為A/D 轉換作準備*/
{
}; /*啟動A/D 并檢查A/D 是否轉換完畢*/
dh=inportb(0x23d); /*輸入高八位數據*/
outporth(0x23a,0x01); /*選擇傳輸低四位數據*/
dl=inportb(0x23d); /*輸入低四位數據*/
outportb(0x23a,0x00); /*選擇傳輸高8 位數據并為A/D 轉換作準備*/
dl=dl>>4;
dh1=dh;
dl=(dh14)+dl;
dh=dh>>4; /*將高八位低四位數據轉化為高四位低八位數據*/
d=dh*256+dl; /*拼合12 位數據*/
u=(d-2047)*10.0/4096; /*轉換電壓值*/
2.2 寫啟動和查詢方式的編程
outportb(0x23d,0x00); /*寫啟動A/D 轉換*/
if(inporth(0x23e)0x80);/*D7=1 則A/D 轉換完畢*/
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 工作*/
其中采樣頻率決寫入計數器1 的計數值。
2.4 DMA 方式下PC 主機中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 口的數值應按照具體的工作方式來確定,寫入131 口的頁地址SEG 取20 位絕對地址的最高4 位的數值,而將低16 位地址的數值寫入地址寄存器。寫基值字節計數寄存器的字節總數值應為需要傳輸的字節數減1。
2.5 中斷服務程序的編寫以有中斷向量的裝入
void interrupt int9() /*中斷服務程序*/
{ disable();
ah5=inportb(0x23d); /*輸入高八位數據*/
outportb(0x23a,0x01); /*選擇傳輸低四位數據*/
dl5=inportb(0x23d); /*輸入低四位數據*/
outportb(0x23a,0x00); /*選擇傳輸高8 位數據并為A/D 轉換作準備*/
outportb(0x23c,0x00); /*A/D 轉換完畢的標志位清零*/
outportb(0x20,0x20);
enable();
}
void stall 1(void interrupt(*faddr)())
{
disable();
setvect(INT1,faddr); /*裝入中斷服務程序*/
enable();
}
本文介紹一種基于AD1674 設計的接口電路,該電路具有查詢、中斷和DMA 三種數據傳輸功能,同時采用8253 定時脈沖或端口寫兩種A/D 啟動方式。其中DMA 方式實現了數據的快速傳輸,而兩種A/D 啟動方式將會使采樣率的設定更加靈活。應用本文原理設計的可插入通用PC 機的數據采集板已用于我們的高頻多譜勒和到達角探測分析系統中,取得了滿意的效果。這些設計方法和原理在其它實際數據采集系統的設計過程中,也會具有重要的參考價值。
圖6 為某新型國產機載武器系統的數
據采集處理部分的電路原理框圖。來自保
傳感器的十六路模擬信號經過多路開關切
換后送至高精密運放進行緩沖放大,同時
還要保持信號的采樣精度。AD1674T 被接
在±10V 雙極模擬電壓輸入模式,使用的是
內部基準源和時鐘。從開關選通模擬信號
到A/D 轉換以及數據輸出均由ADSP2100
微處理器進行邏輯控制,每個這樣的變換
周期均為64μs,因而完成1
評論