新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 12位A/D轉換器ADS7804與51單片機的接口及程序設計

        12位A/D轉換器ADS7804與51單片機的接口及程序設計

        作者: 時間:2006-05-07 來源:網絡 收藏

        摘要:是美國BURR-BROWN公司推出的一種新型12位A/D轉換器。文中介紹了它的特性與功能,給出了一種簡潔而新穎的與51方法,同時給出了用編寫的數據采集的應用程序。

        1 基本特點

        在計算機控制系統及各類用(或微處理器)構成的智能儀器儀表中,外部的各種模擬信號必須通過A/D轉換器變換為數字信號后才能送入計算機。與8位和16位的A/D轉換器相比,12位A/D轉換器以其較高的性能價格比而在儀器儀表中得到廣泛的應用。

        芯片采用28腳0.3英寸PDIP(塑料雙列直插式)封裝,兩列管腳間距為0.3英寸,比一般DIP28封裝窄一倍,所以俗稱瘦型DIP;采用單5V電源供電;芯片內部含有采樣保持、電壓基準和時鐘等電路,可極大簡化用戶的電路設計和硬件開鎖,并可提高系統的穩定性。

        ADS7804采用CMOS工藝制造,轉換速度快、功耗低(最大功耗為100mW)。

        該A/D轉換器采用逐次逼近式工作原理,單通道輸入,模擬輸入電壓的范圍為±10V,采樣速率為100kHz。

        2 引腳及功能

        ADS7804共有28個引腳,圖1為基引腳圖。這些引腳大體上可以劃分為3類。

        a.電源類

        數字電源VDIG和模擬電源VANA通常一起接到5V電源上。數字地DGND和模擬地AGND1、AGND2通常共地。REF為參考電壓端,通常對地接2.2μF鉭電容,芯片內部可產生2.5V基準電壓。CAP為參考電壓所需電容,對地接2.2μF鉭電容。

        b.模數信號類

        VIN為輸入的模擬信號。D11~D0為數字量并行輸出口,DZ(19~22腳)是為了使管腳與16位A/D轉換器ADS7805兼容而設的,可懸空。

        c.控制信號類

        CS(輸入)為片選信號,R/C(輸入)為讀取結果/模數轉換控制信號,BUSY(輸出)用于指示轉換是否完成,BYTE(輸入)信號用來控制從總線讀出的數據是轉換結果的高字節還是低字節。

        3 啟動A/D轉換和讀取轉換結果

        ADS7804啟動轉換和讀取轉換結果的時序比較特點,參見圖2。

        首先將R/C腳電平變低;然后在CS腳輸入一個脈沖并在其下降沿啟動A/D轉換,此脈沖的寬度要求在40ns~6μs之間;這時BUSY腳電平拉低表示正在進行轉換;在經過大約8μs以后,轉換完成,BUSY腳電平相應變高;再把R/C腳電平拉高,這樣,CS腳脈沖的下降沿即把轉換結果輸出到數據總線上。

        因為轉換結果為12位,所以對8位而言,必須分兩次讀入,這個功能由BYTE腳實現。當BYTE腳為高電平時,數據總線上輸出高字節,反之,輸出低字節。

        ADS7804轉換得到的數字結果是以補碼形式給出的,現給出幾組有特定含義的值,表1所列即為ADS7804的模擬電壓與其補碼形式的數字輸出關系,-10V~9.99512V為量程,4.88mV為電壓分辨率。

        表1 模擬電壓和數字輸出的關系

        模擬輸入初碼形式的數字輸出
        二進制十六進制
        9.99512V0111 1111 11117FF
        4.88mV0000 0000 0001001
        0V0000 0000 0000000
        -4.88mV1111 1111 1111FFF
        -10V1000 0000 0000800

        4 與51單片機的

        因為ADS7804的CS信號脈沖寬度要求為40ns~6μs之間,而對于單片機而言,只要對外部設備進行讀操作,即會產生RD脈沖,其寬度為6個振蕩周期,如采用12MHz的晶振,其脈沖寬度為500ns,所以將ADS7804的CS腳接單片機的RD信號是再合適不過了。

        至于R/C、BUSY和BYTE信號,只需連接到普通的鎖存功能的端口即可,如單片機的PI口、并行口擴展芯片8155或8255等的端口。

        圖3是一個ADS7804與51單片機的典型電路。

        5 程序設計

        Franklin C51交叉編譯器是專為51系列單片機設計的一種高效的編譯器,使用它可以縮短開發周期,降低開發成本,而且開發出的系統易于維護,可靠性高,可移植性好。

        下面介紹用C語言編寫的單點和定長數據采集子程序,假設所用的晶振頻率為12MHz。

        單點采樣子程序ADS7804()用來返回一個有符號整數形式的轉換結果。

        定長采樣子程序DAQ()根據入口參數interval(單位為μs)給定的采樣間隔采樣N點,并采用查詢51單片機內置定時器的方式來控制采樣時序,N點采樣結果存儲在定位于外部存儲器的數組array中。需要注意的是,賦給計數寄存器TH和TL的值是定時器從開始計數到溢出所用的時間,這個時間再加上清TF和裝載計數初值所需的時間(共5個機器周期,對于12MHz晶振即為5μs)才是所要的采樣間隔,這一點在程序設計中必須注意。

        源程序如下:

        # includereg51.h>

        # includeabsacc.h>

        # define N 128 /*定采樣長度,如128點*/sbit BYTE=F1^0;

        sbit RC=P1^1;

        sbit BUSY=P1^2; /*定義特殊位*/

        int XDATA array(N); /*在外部存儲器內定義長度為N的有符號整數數組*/

        int ADS7804(void)

        { uint ul,uh;int u;

        RC=0; /*R/C低電平,進入轉換模式*/

        ul=XBYTE[0xffff]; /*產生讀脈沖,啟動A/D轉換*/

        while (BUSY= =0); /*等待轉換完成*/

        RC=1;BYTE=0; /*進入讀模式,選擇低字節*/

        ul=XBYTE[0xffff]; /*讀轉換結果低8位*/

        BYTE=1; /*選擇高字節*/

        uh=XBYTE[0xffff]0x0f;/*讀轉換結果高4位*/

        u=uh*256+ul; /*得到12位轉換結果*/

        if(u>=0x0800)

        u=u 0xf000; /*如果為負值,則符號擴展*/

        return(u); /*返回轉換結果*/

        }

        uoid DAQ(uint interval)

        { uchar th,tl;

        interval=interval-5;/*減去TF0清零和裝載計數初值的時間5μs*/

        th=255-(interval/256);

        tl=255-(interval%256); /*計算計數初值*/

        TMOD=0x01; /*定時器0,方式1 */

        TH0=th; TL0=tl;/*裝載計數初值*/

        TR0=1;/*啟動定時*/

        for(I=0;iN;i++)

        { do{}whilt(!TF0);/*查詢等待TF0復位*/

        TF0=0; /*清溢出標志*/

        TH0=th;TL0=tl; /*裝載計數初值*/

        Array[i]=ADS7804(); /*采樣、存儲*/

        }

        TR0=0; /*停止定時*/

        }

        6 結束語

        ADS7804為12位的A/D轉換器,它不僅分辨率高、轉換速度快,而且接口方便,電路簡單、應用靈活,因而具有廣泛的應用前景。筆者在DLRS-1型檢波器低頻接收靈敏度特性測量儀中使用了ADS7804,取得了很好的效果。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乐业县| 昆山市| 江口县| 布尔津县| 淮北市| 隆尧县| 万州区| 兴和县| 甘孜县| 长武县| 苗栗市| 青河县| 成安县| 邵阳县| 胶州市| 巴东县| 济源市| 无为县| 新余市| 鄂尔多斯市| 合江县| 深圳市| 定陶县| 崇礼县| 长垣县| 青浦区| 和田市| 嵊泗县| 博野县| 仁寿县| 温州市| 上林县| 邢台县| 宣恩县| 华坪县| 隆林| 乐亭县| 南汇区| 盘山县| 松阳县| 遂川县|