12位A/D转换器ADS7804与51单片机的接口及程序设计

2006-05-07 15:49:29来源: 国外电子元器件

ADS7804是美国BURR-BROWN公司推出的一种新型12位A/D转换器。文中介绍了它的特性与功能,给出了一种简洁而新颖的与51单片机接口方法,同时给出了用C语言编写的数据采集的应用程序。

1 基本特点

在计算机控制系统及各类用单片机(或微处理器)构成的智能仪器仪表中,外部的各种拟信号必须通过A/D转换器变换为数字信号后才能送入计算机。与8位和16位的A/D转换器相比,12位A/D转换器以其较高的性能价格比而在仪器仪表中得到广泛的应用。

ADS7804芯片采用28脚0.3英寸PDIP(塑料双列直插式)封装,两列管脚间距为0.3英寸,比一般DIP28封装窄一倍,所以俗称瘦型DIP;ADS7804采用单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.99512V 0111 1111 1111 7FF
4.88mV 0000 0000 0001 001
0V 0000 0000 0000 000
-4.88mV 1111 1111 1111 FFF
-10V 1000 0000 0000 800

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 C语言程序设计

Franklin C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,使用它可以缩短开发周期,降低开发成本,而且开发出的系统易于维护,可靠性高,可移植性好。

下面介绍用C语言编写的单点和定长数据采集子程序,假设所用的晶振频率为12MHz。

单点采样子程序ADS7804()用来返回一个有符号整数形式的转换结果。

定长采样子程序DAQ()根据入口参数interval(单位为μs)给定的采样间隔采样N点,并采用查询51单片机内置定时器的方式来控制采样时序,N点采样结果存储在定位于外部存储器的数组array中。需要注意的是,赋给计数寄存器TH和TL的值是定时器从开始计数到溢出所用的时间,这个时间再加上清TF和装载计数初值所需的时间(共5个机器周期,对于12MHz晶振即为5μs)才是所要的采样间隔,这一点在程序设计中必须注意。

源程序如下:

# include

# include

# 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;i

{ do{}whilt(!TF0);/*查询等待TF0复位*/

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

TH0=th;TL0=tl; /*装载计数初值*/

Array[i]=ADS7804(); /*采样、存储*/

}

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

}

6 结束语

ADS7804为12位的A/D转换器,它不仅分辨率高、转换速度快,而且接口方便,电路简单、应用灵活,因而具有广泛的应用前景。笔者在DLRS-1型检波器低频接收灵敏度特性测量仪中使用了ADS7804,取得了很好的效果。

关键字:  数转换  单片机  接口  C语言  ADS7804

编辑:赵思潇 引用地址:http://www.eeworld.com.cn/mndz/sjzh/200605/4731.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
数转换
单片机
接口
C语言
ADS7804

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved