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

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

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

  摘 要: 介紹了基于AD1674芯片設計的數據采集電路,該電路具有查詢、中斷和DMA三種數據傳輸功能,并且采用8253定時脈沖和端口寫兩種A/D" title="A/D">A/D啟動方式,適合于不同的應用場合。

  關鍵詞: A/D轉換? 8253定時器? DMA方式

?

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

1 硬件設計

1.1 AD1674接口電路

??? 文獻[1]詳細介紹了AD1674芯片的性能和控制信號的時序。在完全受控方式下,最好是用邏輯控制信號CE啟動數據讀或A/D轉換;在CE有效時,片選信號應有效,并且控制信號R/和A0已確定,只有滿足這種時序,AD1674才能正常工作。

1.2 A/D轉換及數據的讀時序

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

?

?

  在A/D轉換時,8253的定時脈沖或端口寫脈沖QD經過延時和調節定時寬度后,使A/D的使能控制CE開始啟動A/D轉換。同時QD寬度為1μs的低電平脈沖(在端口寫啟動方式下,1μs的低脈沖是由端口寫脈沖經調節定時寬度后獲得)使R/的轉換有效,A0及片選可在A/D轉換前設置為有效。當讀取A/D轉換后的數據時,端口讀信號或DMA讀信號D直接使A/D的使能控制CE啟動數據讀,此時R/=1,R/C的讀有效,開始12位數據的讀取。當A0=0時,讀取高八位數據;當A0=1時,讀取數據的低四位,讀完后A0=0,準備下一次A/D轉換。可見該時序既能與PC機接口,又能使AD1674正常工作。

1.3 A/D轉換及數據讀取的實現電路

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

1.3.1 A/D轉換的啟動方式

????A/D轉換的啟動方式有兩種:8253定時器硬件啟動和寫端口軟件啟動。

8253定時器啟動方式應用于對數據采集的間隔要求準確的場合,該方式是利用8253的定時脈沖啟動A/D轉換,通過8253數據總線緩沖器(端口地址為&0X23F)輸出各通道的計數初值,通過向6位鎖存器74LS174(端口地址為&0X23B)寫入控制字設定8253的控制字以及A/D片選控制位。6位鎖存器數據位定義說明如下:

?

  A1A0=00:&0X23F口輸出的數據為計數器0的計數值。

  A1A0=01:&0X23F口輸出的數據為計數器1的計數值。

  A1A0=10:&0X23F口輸出的數據為計數器2的計數值。

  A1A0=11:&0X23F口輸出的數據為計數器8253的方式字。

  G0&G1=1:起動計數器0和計數器1; G0&G=0:禁止計數器0和計數器1。

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

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

  寫啟動A/D方式應用于軟件定時,即通過對端口(地址為&0X23D)寫來觸發A/D轉換。如圖2所示,端口寫信號一方面經過單穩觸發器U6A調節定時寬度(寬度為1μs)后,作為AD1674的R/控制信號,同時經過另一單穩觸發器U24延時和調節定時寬度后,再通過或門U15C輸出作為AD1674的CE控制信號。

?

?

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

1.3.2 A/D轉換數據的讀取方式

  在數據采集系統中,計算機讀取A/D轉換數據的方式一般有三種,即查詢、中斷和DMA方式。其中查詢方式就是通過查詢標志位來判斷A/D是否轉換完畢,如果A/D轉換完畢則讀入轉換的數據。這種方式下CPU主動查詢,通過CPU讀取A/D轉換的數據,故實現的硬件電路簡單,但數據讀取速度慢,同時在WINDOWS的多任務執行方式下,存在著A/D轉換數據不能及時讀入的問題。中斷方式是利用A/D轉換完畢的標志位觸發一硬中斷,然后中斷管理器向CPU提出中斷申請。在中斷允許的情況下,執行中斷服務程序讀入轉換的數據。這種方式實現的硬件電路也比較簡單,但中斷服務程序的介入,引起數據采集程序的斷點的不可預測性,這樣會導致數據采集程序的失控。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)與數據線D7相連,提供計算機查詢;在中斷方式下,該U20A的輸出Q直接與硬中斷引腳IRQ2相連,當Q由低電平變成高電平時,引起計算機中斷。在前兩種方式下,通過軟件編程,向一鎖存器U22的最低位寫入0或1,選擇讀取A/D轉換數據的高八位或低四位,且由專門的端口(地址為&0X23D)讀取A/D轉換的數據。實現的硬件電路簡單。而在DMA方式下,通過應答信號尋址,并不由專門的端口讀取A/D轉換的數據,故選擇A/D轉換數據的高八位或低四位的功能必須由硬件電路來實現,比較而言,電路更復雜一些。

????

?

  下面介紹DMA方式下的具體實現電路。DMA請求電路由兩個D觸發器組成,當A/D轉換完畢時,U20A的輸出Q由低電平變成高電平,DRQ1=1,DMA通道1發出請求,DRQ1被認可后進行兩次DMA傳輸。在第一次DMA傳輸期間,觸發器U20B的輸出Q為低電平,A/D轉換數據的高八位傳輸到指定的內存單元。在第一次DMA傳輸結束時,由低電平變成高電平,觸發器U20B的輸出為高電平,但觸發器U20A的輸出Q仍然是高電平,該電平申請第二次DMA傳輸。在第二次DMA傳輸期間,觸發器U20B的輸出為高電平,A/D轉換數據的低四位傳輸到指定的內存單元。當第二次DMA傳輸結束時,DACK1由低電平變成高電平,使觸發器U20B輸出低電平,同時觸發器U20A的輸出Q變為低電平,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);? ????    /*輸入高八位數據*/

  outportb(0x23a,0x01);???????? ?/*選擇傳輸低四位數據*/

  dl=inportb(0x23d); ??? ??????  /*輸入低四位數據*/

  outportb(0x23a,0x00);??????? ?/*選擇傳輸高8位數據并為A/D轉換作準備*/

  dl=dl>>4;

  dh1=dh;

  dl=(dh1<<4)+dl;

  dh=dh>>4;??????????? ?????????? /*將高八位低四位數據

?????????????????????????????????? ??? 轉化為高四位低八位數據*/

  d=dh*256+dl;???????????????? ?? /*拼合12位數據*/

  u=(d-2047)*10.0/4096;?????????? /*轉換電壓值*/

2.2 寫啟動和查詢方式的編程

??? outportb(0x23d,0x00);???????? /*寫啟動A/D轉換*/

??? if (inportb(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(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*/

???? 其中寫入11口的數值應按照具體的工作方式來確定,寫入131口的頁地址SEG取20位絕對地址的最高4位的數值,而將低16位地址的數值寫入地址寄存器。寫基值字節計數寄存器的字節總數值應為需要傳輸的字節數減1。

2.5 中斷服務程序的編寫以及中斷向量的裝入

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

    { disable();

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

    outportb(0x23a,0x01);   /*選擇傳輸低四位數據*/

  ??? al5=inportb(0x23d);?    /*輸入低四位數據*/

  ??? outportb(0x23a,0x00);   /*選擇傳輸高8位數據并為A/D轉換作準備*/

???   outportb(0x23c,0x00);   /*A/D轉換完畢的標志位清零*/

???   outportb(0x20,0x20);

???   enable();

????????}

????void stall1(void interrupt(*faddr)())

?????  {

???   disable();

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

???   enable();

??? }

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

?

參考文獻

1 董琰婷,張 杰.模數轉換器AD1674接口電路的改進.電子技術應用,1998;24(4):62~63

2 楊紹國. 微機原理,接口與網絡實用技術.成都:電子科技大學出版社,1996

3 劉樂善.微型計算機接口技術原理及應用.武漢:華中理工大學出版社,1996

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 国产成人精品自拍| 亚洲a中文字幕| 日韩欧美视频第二区| 最新国产精品久久| 日韩精品福利片午夜免费观看| 欧美日韩一区二区在线免费观看| 两个人的视频www国产精品| 91久久国产综合久久91精品网站| 精品人妻少妇一区二区| 免费看又黄又无码的网站| 色综合天天狠天天透天天伊人 | 97成人在线观看视频| 国产综合免费视频| 久久久97精品| 日韩欧美视频网站| 日韩欧美第二区在线观看| 97色伦亚洲国产| 国产无套内射久久久国产| 久久久成人的性感天堂| 久久精品亚洲热| 美日韩精品免费视频| 欧美日韩在线观看一区| 美女999久久久精品视频| 欧美成人在线影院| 欧美日本国产在线| 日本亚洲精品在线观看| 亚洲a级在线播放观看| 亚洲一区中文字幕| 无码中文字幕色专区| 色综合天天狠天天透天天伊人| 日韩视频欧美视频| 97久久国产亚洲精品超碰热| 不卡一区二区三区视频| 国产精品96久久久久久| 97精品国产97久久久久久粉红| 亚洲五月六月| 日本一区视频在线观看免费| 日本一区二区三区在线播放| 日韩精品资源| 久久天堂国产精品| 精品国产综合久久|