《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模拟设计 > 业界动态 > 基于A/D芯片AD1674设计的数据采集电路

基于A/D芯片AD1674设计的数据采集电路

2008-12-18
作者:袁志刚 宁百齐

  摘 要: 介紹了基于AD1674芯片設(shè)計(jì)的數(shù)據(jù)采集電路,該電路具有查詢(xún)、中斷和DMA三種數(shù)據(jù)傳輸功能,并且采用8253定時(shí)脈沖和端口寫(xiě)兩種A/D" title="A/D">A/D啟動(dòng)方式,適合于不同的應(yīng)用場(chǎng)合。

  關(guān)鍵詞: A/D轉(zhuǎn)換? 8253定時(shí)器? DMA方式

?

  隨著科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)在測(cè)量與控制中的應(yīng)用日益廣泛。為了使外部世界的模擬信號(hào)與計(jì)算機(jī)接口,需要進(jìn)行模/數(shù)轉(zhuǎn)換,該轉(zhuǎn)換一般通過(guò)A/D芯片來(lái)完成。目前市場(chǎng)上出現(xiàn)了各種A/D芯片,且各種A/D芯片具有不同的控制方式和應(yīng)用條件。對(duì)于高速數(shù)據(jù)采集,最大采樣頻率取決于A/D的轉(zhuǎn)換時(shí)間以及數(shù)據(jù)的傳輸時(shí)間。提高最大采樣頻率可通過(guò)縮短A/D的轉(zhuǎn)換時(shí)間或提高數(shù)據(jù)的傳輸速度來(lái)實(shí)現(xiàn)。如果與PC機(jī)接口,數(shù)據(jù)的傳輸速度決定于PC機(jī)的主頻以及數(shù)據(jù)的傳輸方式" title="傳輸方式">傳輸方式,常用的有查詢(xún)和中斷方式,若采用DMA傳輸方式則可進(jìn)一步提高數(shù)據(jù)的傳輸速度。本文選取AD1674芯片,設(shè)計(jì)具有查詢(xún)、中斷和DMA三種數(shù)據(jù)傳輸方式的數(shù)據(jù)采集電路。該電路既可以采用定時(shí)器定時(shí),通過(guò)8253定時(shí)器的控制設(shè)定可變的采樣率(步進(jìn)間隔為1μs),獲得高準(zhǔn)確的采樣間隔;也可以采用軟件定時(shí),通過(guò)端口寫(xiě)啟動(dòng)A/D來(lái)實(shí)現(xiàn)。在時(shí)序方面,該電路解決了A/D控制信號(hào)" title="控制信號(hào)">控制信號(hào)與計(jì)算機(jī)時(shí)序的匹配問(wèn)題,可以與高檔PC機(jī)進(jìn)行接口。

1 硬件設(shè)計(jì)

1.1 AD1674接口電路

??? 文獻(xiàn)[1]詳細(xì)介紹了AD1674芯片的性能和控制信號(hào)的時(shí)序。在完全受控方式下,最好是用邏輯控制信號(hào)CE啟動(dòng)數(shù)據(jù)讀或A/D轉(zhuǎn)換;在CE有效時(shí),片選信號(hào)應(yīng)有效,并且控制信號(hào)R/和A0已確定,只有滿(mǎn)足這種時(shí)序,AD1674才能正常工作。

1.2 A/D轉(zhuǎn)換及數(shù)據(jù)的讀時(shí)序

  對(duì)A/D接口電路" title="接口電路">接口電路而言,只有PC機(jī)的時(shí)序與AD1674的要求時(shí)序匹配才能保證電路的正常工作。該電路的A/D轉(zhuǎn)換及數(shù)據(jù)的讀時(shí)序如圖1所示。

?

?

  在A/D轉(zhuǎn)換時(shí),8253的定時(shí)脈沖或端口寫(xiě)脈沖QD經(jīng)過(guò)延時(shí)和調(diào)節(jié)定時(shí)寬度后,使A/D的使能控制CE開(kāi)始啟動(dòng)A/D轉(zhuǎn)換。同時(shí)QD寬度為1μs的低電平脈沖(在端口寫(xiě)啟動(dòng)方式下,1μs的低脈沖是由端口寫(xiě)脈沖經(jīng)調(diào)節(jié)定時(shí)寬度后獲得)使R/的轉(zhuǎn)換有效,A0及片選可在A/D轉(zhuǎn)換前設(shè)置為有效。當(dāng)讀取A/D轉(zhuǎn)換后的數(shù)據(jù)時(shí),端口讀信號(hào)或DMA讀信號(hào)D直接使A/D的使能控制CE啟動(dòng)數(shù)據(jù)讀,此時(shí)R/=1,R/C的讀有效,開(kāi)始12位數(shù)據(jù)的讀取。當(dāng)A0=0時(shí),讀取高八位數(shù)據(jù);當(dāng)A0=1時(shí),讀取數(shù)據(jù)的低四位,讀完后A0=0,準(zhǔn)備下一次A/D轉(zhuǎn)換。可見(jiàn)該時(shí)序既能與PC機(jī)接口,又能使AD1674正常工作。

1.3 A/D轉(zhuǎn)換及數(shù)據(jù)讀取的實(shí)現(xiàn)電路

  本電路的AD1674工作在完全受控方式。A/D轉(zhuǎn)換為12位,而轉(zhuǎn)換后數(shù)據(jù)分兩次讀取,即先讀數(shù)據(jù)的高八位,后讀數(shù)據(jù)的低四位。

1.3.1 A/D轉(zhuǎn)換的啟動(dòng)方式

????A/D轉(zhuǎn)換的啟動(dòng)方式有兩種:8253定時(shí)器硬件啟動(dòng)和寫(xiě)端口軟件啟動(dòng)。

8253定時(shí)器啟動(dòng)方式應(yīng)用于對(duì)數(shù)據(jù)采集的間隔要求準(zhǔn)確的場(chǎng)合,該方式是利用8253的定時(shí)脈沖啟動(dòng)A/D轉(zhuǎn)換,通過(guò)8253數(shù)據(jù)總線(xiàn)緩沖器(端口地址為&0X23F)輸出各通道的計(jì)數(shù)初值,通過(guò)向6位鎖存器74LS174(端口地址為&0X23B)寫(xiě)入控制字設(shè)定8253的控制字以及A/D片選控制位。6位鎖存器數(shù)據(jù)位定義說(shuō)明如下:

?

  A1A0=00:&0X23F口輸出的數(shù)據(jù)為計(jì)數(shù)器0的計(jì)數(shù)值。

  A1A0=01:&0X23F口輸出的數(shù)據(jù)為計(jì)數(shù)器1的計(jì)數(shù)值。

  A1A0=10:&0X23F口輸出的數(shù)據(jù)為計(jì)數(shù)器2的計(jì)數(shù)值。

  A1A0=11:&0X23F口輸出的數(shù)據(jù)為計(jì)數(shù)器8253的方式字。

  G0&G1=1:起動(dòng)計(jì)數(shù)器0和計(jì)數(shù)器1; G0&G=0:禁止計(jì)數(shù)器0和計(jì)數(shù)器1。

  CS=1:選中A/D芯片CS=0:不選中A/D芯片。

  具體的實(shí)現(xiàn)電路如圖2所示。首先將8253定時(shí)通道0與通道1串聯(lián)起來(lái)定時(shí),通道0的時(shí)鐘輸入CLK0的頻率是2MHz,工作在方式3(方波比率發(fā)生器)下,通道0的輸出OUT0為頻率1MHz的方波,作為通道1的輸入時(shí)鐘CLK1。通道1設(shè)定為方式2,即通道1的輸出OUT1從輸出開(kāi)始一直維持高電平" title="高電平">高電平,計(jì)數(shù)回零后,輸出為低電平并自動(dòng)重新裝入原計(jì)數(shù)值,低電平維持一個(gè)時(shí)鐘周期后,輸出又恢復(fù)高電平并重新作減法計(jì)數(shù)。輸出OUT1分為兩路信號(hào),一路通過(guò)與門(mén)U18A輸出,作為AD1674的R/控制信號(hào);另一路經(jīng)過(guò)單穩(wěn)觸發(fā)器U24延時(shí)和調(diào)節(jié)定時(shí)寬度后,再通過(guò)或門(mén)U15C輸出作為AD1674的CE控制信號(hào)。當(dāng)OUT1輸出寬度為1μs的低電平脈沖時(shí),一方面使控制信號(hào)R/的轉(zhuǎn)換有效,同時(shí)經(jīng)延時(shí)和調(diào)節(jié)定時(shí)寬度后,使A/D的使能控制CE開(kāi)始啟動(dòng)A/D轉(zhuǎn)換。因此在裝入計(jì)數(shù)初值以后,只要設(shè)置6位鎖存器U8的控制字,就可利用8253定時(shí)器啟動(dòng)A/D。

  寫(xiě)啟動(dòng)A/D方式應(yīng)用于軟件定時(shí),即通過(guò)對(duì)端口(地址為&0X23D)寫(xiě)來(lái)觸發(fā)A/D轉(zhuǎn)換。如圖2所示,端口寫(xiě)信號(hào)一方面經(jīng)過(guò)單穩(wěn)觸發(fā)器U6A調(diào)節(jié)定時(shí)寬度(寬度為1μs)后,作為AD1674的R/控制信號(hào),同時(shí)經(jīng)過(guò)另一單穩(wěn)觸發(fā)器U24延時(shí)和調(diào)節(jié)定時(shí)寬度后,再通過(guò)或門(mén)U15C輸出作為AD1674的CE控制信號(hào)。

?

?

  可見(jiàn)兩種啟動(dòng)A/D轉(zhuǎn)換的過(guò)程相似。相比較而言,前者的采樣間隔是由8253定時(shí)脈沖的周期決定的,屬于可編程定時(shí)器方式定時(shí),其特點(diǎn)是采樣間隔準(zhǔn)確;后者則由相鄰兩次寫(xiě)端口(地址為&0X23D)的時(shí)間差決定采樣間隔,為軟件定時(shí)方式,特點(diǎn)是靈活方便。

1.3.2 A/D轉(zhuǎn)換數(shù)據(jù)的讀取方式

  在數(shù)據(jù)采集系統(tǒng)中,計(jì)算機(jī)讀取A/D轉(zhuǎn)換數(shù)據(jù)的方式一般有三種,即查詢(xún)、中斷和DMA方式。其中查詢(xún)方式就是通過(guò)查詢(xún)標(biāo)志位來(lái)判斷A/D是否轉(zhuǎn)換完畢,如果A/D轉(zhuǎn)換完畢則讀入轉(zhuǎn)換的數(shù)據(jù)。這種方式下CPU主動(dòng)查詢(xún),通過(guò)CPU讀取A/D轉(zhuǎn)換的數(shù)據(jù),故實(shí)現(xiàn)的硬件電路簡(jiǎn)單,但數(shù)據(jù)讀取速度慢,同時(shí)在WINDOWS的多任務(wù)執(zhí)行方式下,存在著A/D轉(zhuǎn)換數(shù)據(jù)不能及時(shí)讀入的問(wèn)題。中斷方式是利用A/D轉(zhuǎn)換完畢的標(biāo)志位觸發(fā)一硬中斷,然后中斷管理器向CPU提出中斷申請(qǐng)。在中斷允許的情況下,執(zhí)行中斷服務(wù)程序讀入轉(zhuǎn)換的數(shù)據(jù)。這種方式實(shí)現(xiàn)的硬件電路也比較簡(jiǎn)單,但中斷服務(wù)程序的介入,引起數(shù)據(jù)采集程序的斷點(diǎn)的不可預(yù)測(cè)性,這樣會(huì)導(dǎo)致數(shù)據(jù)采集程序的失控。DMA方式利用A/D轉(zhuǎn)換完畢的標(biāo)志位向DMA控制器提出DMA申請(qǐng),當(dāng)DMA控制器從CPU取得總線(xiàn)控制權(quán)時(shí),接口便與內(nèi)存之間直接進(jìn)行數(shù)據(jù)交換(不經(jīng)過(guò)CPU)。這種方式下,由于不經(jīng)過(guò)CPU讀入數(shù)據(jù),故提高了數(shù)據(jù)傳輸速度。同時(shí)由于A/D轉(zhuǎn)換器主動(dòng)申請(qǐng)數(shù)據(jù)傳輸,而DMA申請(qǐng)比外設(shè)中斷申請(qǐng)的優(yōu)先級(jí)高,A/D轉(zhuǎn)換數(shù)據(jù)能夠及時(shí)讀入,系統(tǒng)的性能也得到了提高,但實(shí)現(xiàn)的硬件電路較前兩種方式復(fù)雜。

  本電路設(shè)計(jì)具有查詢(xún)、中斷和DMA三種數(shù)據(jù)傳輸方式。通過(guò)一撥碼盤(pán)開(kāi)關(guān)來(lái)選擇不同的傳輸方式。如圖3所示,當(dāng)A/D轉(zhuǎn)換完畢時(shí),標(biāo)志位STS由高電平變?yōu)榈碗娖?,從而引起D觸發(fā)器U20A觸發(fā),U20A的輸出Q由低電平變成高電平。當(dāng)撥碼盤(pán)開(kāi)關(guān)S1選擇為查詢(xún)方式時(shí),該U20A的輸出Q通過(guò)一個(gè)三態(tài)門(mén)(端口地址為&0X23F)與數(shù)據(jù)線(xiàn)D7相連,提供計(jì)算機(jī)查詢(xún);在中斷方式下,該U20A的輸出Q直接與硬中斷引腳IRQ2相連,當(dāng)Q由低電平變成高電平時(shí),引起計(jì)算機(jī)中斷。在前兩種方式下,通過(guò)軟件編程,向一鎖存器U22的最低位寫(xiě)入0或1,選擇讀取A/D轉(zhuǎn)換數(shù)據(jù)的高八位或低四位,且由專(zhuān)門(mén)的端口(地址為&0X23D)讀取A/D轉(zhuǎn)換的數(shù)據(jù)。實(shí)現(xiàn)的硬件電路簡(jiǎn)單。而在DMA方式下,通過(guò)應(yīng)答信號(hào)尋址,并不由專(zhuān)門(mén)的端口讀取A/D轉(zhuǎn)換的數(shù)據(jù),故選擇A/D轉(zhuǎn)換數(shù)據(jù)的高八位或低四位的功能必須由硬件電路來(lái)實(shí)現(xiàn),比較而言,電路更復(fù)雜一些。

????

?

  下面介紹DMA方式下的具體實(shí)現(xiàn)電路。DMA請(qǐng)求電路由兩個(gè)D觸發(fā)器組成,當(dāng)A/D轉(zhuǎn)換完畢時(shí),U20A的輸出Q由低電平變成高電平,DRQ1=1,DMA通道1發(fā)出請(qǐng)求,DRQ1被認(rèn)可后進(jìn)行兩次DMA傳輸。在第一次DMA傳輸期間,觸發(fā)器U20B的輸出Q為低電平,A/D轉(zhuǎn)換數(shù)據(jù)的高八位傳輸?shù)街付ǖ膬?nèi)存單元。在第一次DMA傳輸結(jié)束時(shí),由低電平變成高電平,觸發(fā)器U20B的輸出為高電平,但觸發(fā)器U20A的輸出Q仍然是高電平,該電平申請(qǐng)第二次DMA傳輸。在第二次DMA傳輸期間,觸發(fā)器U20B的輸出為高電平,A/D轉(zhuǎn)換數(shù)據(jù)的低四位傳輸?shù)街付ǖ膬?nèi)存單元。當(dāng)?shù)诙蜠MA傳輸結(jié)束時(shí),DACK1由低電平變成高電平,使觸發(fā)器U20B輸出低電平,同時(shí)觸發(fā)器U20A的輸出Q變?yōu)榈碗娖?,DRQ1=0,DMA通道1的請(qǐng)求被撤銷(xiāo),結(jié)束一次A/D轉(zhuǎn)換12位數(shù)據(jù)傳輸過(guò)程。

2 軟件設(shè)計(jì)

  該接口電路支持各種帶有口指令操作的高級(jí)語(yǔ)言和8086/8088匯編語(yǔ)言。以下就以Turbo C為例對(duì)相應(yīng)的部分編程,以供參考。

2.1 A/D編程

  該編程適合于中斷或查詢(xún)方式下的編程,端口地址=0x238~0x23f。

  outportb(0x23c,0x00);?? ?????? /*初始化清零*/

  outportb(0x23a,0x00);? ?    /*選擇傳輸高8位數(shù)據(jù)

????????????????????????????????????????并為A/D轉(zhuǎn)換作準(zhǔn)備*/

    {?

??????????????????  };??????????  /*啟動(dòng)A/D并檢查A/D是否轉(zhuǎn)換完畢*/

  dh=inportb(0x23d);? ????    /*輸入高八位數(shù)據(jù)*/

  outportb(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 寫(xiě)啟動(dòng)和查詢(xún)方式的編程

??? outportb(0x23d,0x00);???????? /*寫(xiě)啟動(dòng)A/D轉(zhuǎn)換*/

??? if (inportb(0x23e)&0x80);????? /*D7=1則A/D轉(zhuǎn)換完畢*/

2.3 8253定時(shí)器編程

  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)?     /*啟動(dòng)CH0,CH1工作*/

????其中采樣頻率決定寫(xiě)入計(jì)數(shù)器1的計(jì)數(shù)值。

2.4 DMA方式下PC主機(jī)中8237A DMA控制器編程

  8237A DMA控制器具有4個(gè)DMA通道,該接口電路使用通道1。

  outportb(0x0a,0x05);??    /*mask DMA channel 1*/

  outportb(0x0c,0x00);??    /*clear byte 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(0x0a,0x01);    /*clear mask bit of DMA channel*/

???? 其中寫(xiě)入11口的數(shù)值應(yīng)按照具體的工作方式來(lái)確定,寫(xiě)入131口的頁(yè)地址SEG取20位絕對(duì)地址的最高4位的數(shù)值,而將低16位地址的數(shù)值寫(xiě)入地址寄存器。寫(xiě)基值字節(jié)計(jì)數(shù)寄存器的字節(jié)總數(shù)值應(yīng)為需要傳輸?shù)淖止?jié)數(shù)減1。

2.5 中斷服務(wù)程序的編寫(xiě)以及中斷向量的裝入

  void interrupt int9()?? ? ??  /*中斷服務(wù)程序*/

    { disable();

    ah5=inportb(0x23d);?    /*輸入高八位數(shù)據(jù)*/

    outportb(0x23a,0x01);   /*選擇傳輸?shù)退奈粩?shù)據(jù)*/

  ??? al5=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 stall1(void interrupt(*faddr)())

?????  {

???   disable();

???   setvect(INT1,faddr);    /*裝入中斷服務(wù)程序*/

???   enable();

??? }

  本文介紹一種基于AD1674設(shè)計(jì)的接口電路,該電路具有查詢(xún)、中斷和DMA三種數(shù)據(jù)傳輸功能,同時(shí)采用8253定時(shí)脈沖或端口寫(xiě)兩種A/D啟動(dòng)方式。其中DMA方式實(shí)現(xiàn)了數(shù)據(jù)的快速傳輸,而兩種A/D啟動(dòng)方式將會(huì)使采樣率的設(shè)定更加靈活。應(yīng)用本文原理設(shè)計(jì)的可插入通用PC機(jī)的數(shù)據(jù)采集板已用于我們的高頻多普勒和到達(dá)角探測(cè)分析系統(tǒng)中,取得了滿(mǎn)意的效果。這些設(shè)計(jì)方法和原理在其它實(shí)際數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)過(guò)程中,也會(huì)具有重要的參考價(jià)值。

?

參考文獻(xiàn)

1 董琰婷,張 杰.模數(shù)轉(zhuǎn)換器AD1674接口電路的改進(jìn).電子技術(shù)應(yīng)用,1998;24(4):62~63

2 楊紹國(guó). 微機(jī)原理,接口與網(wǎng)絡(luò)實(shí)用技術(shù).成都:電子科技大學(xué)出版社,1996

3 劉樂(lè)善.微型計(jì)算機(jī)接口技術(shù)原理及應(yīng)用.武漢:華中理工大學(xué)出版社,1996

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話(huà)通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話(huà):010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容