2
2
2
2
第 18 卷第 3 期
2003 年 9 月
成 都 信 息 工 程 学 院 学 报
JOURNAL OF CHENGDU UNIVERSITY OF INFORMATION TECHNOLOGY
Vol. 18 No. 3
Sep . 2003
文章编号 : 1671
1742 (2003) 03
0281
06
十六位模数转换器 AD7705 及其应用
敖振浪 , 李源鸿 , 谭鉴荣
(广东省气象技术装备中心 , 广东 广州 510080)
摘要 :AD7705 是 AD 公司最近推出的十六位模数转换器 。我们主要介绍了它的功能和特点 ,给出了基于
AD7705 实际应用的硬件 、软件设计方法 ,以及部分程序源代码 ,总结了实际应用中必须注意的几个技术问题 。
关 键 词 : AD7705 模数转换器 ; 应用 ; 设计
中图分类号 :TP335 + . 1 文献标识码 :A
1 AD7705 简介
AD7705 是十六位分辨率的 A/ D 转换器 ,2 通道全差分模拟输入 ,使用 + 5V 单电源 ,主要应用于低频测量 。
它利用了Σ- △转换技术实现了 16 位无 G失代码性能 ,三线数字接口 ,可以通过串行输入接口由软件配置芯片
的增益值 、输入信号极性和数据更新速率 ,非常灵活方便 。具有自校准和系统校准功能 ,能够消除器件本身和系
统的增益以及偏移误差 。是用于开发智能系统 、微控制器系统和基于 DSP 系统的理想产品 。
1. 1 主要特点
2 个全差分输入通道的 ADC ,十六位无丢失代码 ,0. 003 %非线性 ; 可编程增益 :1~128 ; 三线串行接口 ; 具有
模拟输入端缓冲器 ; 工作电压 : 2. 7~3. 3V 或 4. 75~5. 25V ; 低功耗 ,3V 电压时 , 最大功耗为 1mW ; 等待电流的
最大值为 8μA ; 16 脚 DIP、SOIC 和 TSSOP 封装 。
1. 2 片内寄存器操作
AD7705 包含了 8 个片内寄存器 ,这些寄存器通过器件的串行口访问 ,所有的操作都是通过对寄存器的操作 。
第一个是通信寄存器 ,器件复位后 ,通信寄存器处于等待状态 ,通过通信寄存器写操作 ,决定下一次操作是写还是
读 ,同时决定这一次读操作或写操作发生在那个寄存器上 。也就是说所有的寄存器 (包括通信寄存器本身和输出
数据寄存器) 进行读操作之前 ,必须首先写通信寄存器 ,然后才能读选定的寄存器 。下面简单介绍寄存器的功能 。
通信寄存器
0/ DRDY-
RS2
RS1
RS0
R/ W -
STBY
CH1
CH0
0/ DRDY- : 写操作时此位必须为 0 ,读操作时表示数据寄存器数据是否准备好 。RS2 ,RS1 ,RS0 : 寄存器选择
位 。
R/ W - :读写选择 。“0”表示下一次是写操作 。“1”表示下一次是读操作 。
STBY:等待模式 ,写入“0”器件处于正常工作模式 。
CH1 ,CH0 :通道选择 ,00 选择通道 1 ,01 选择通道 2 。
设置寄存器
MD1
MD0
G2
G1
G0
B - / U
BUF
FSYN
MD1 ,MD0 :工作模式选择位 ,00 为正常工作模式 ,01 为自校准 ,10 为零刻度系统校准 ,11 为满刻度系统校
准 。
收稿日期 : 2002
11
29 ; 修订日期 :2003
02
18
282
成 都 信 息 工 程 学 院 学 报 第 18 卷
G2 ,G1 ,G0 :增益选择位 ,00~08 分别对应增益值 1~128 。
B - / U :单极性/ 双极性择位 ,“0”表示双极性 。
BUF :输入缓冲控制位 ,“0”表示无缓冲 。
FSYN : 滤波器同步 。
时钟寄存器
ZERO
ZERO
ZERO
CLKDIS
CLKDIV
CLK
FS1
FS0
ZERO : 必须为 0 ,否则 ,会导致器件的非指定操作 。
CLKDIS :主时钟禁止位 ,“1”禁止时钟在 MCLK OUT 引脚输出 。
CLKDIV :时钟分频位 。
CLK:时钟位 。时钟频率为 2. 4576MHz 时 ,该位设置为“1”, 时钟频率为 1MHz 时 ,该位设置为“0”。
FS1 ,FS0 :滤波器选择位 ,与 CLK一起决定器件的输出更新率 。如表 1 。
表 1 FS1 、FS0 与 CLK决定的器件输出更新率
CLK *
0
0
0
0
1
1
1
1
FS1
0
0
1
1
0
0
1
1
FS0
0
1
0
1
0
1
0
1
输出更新率
20Hz
25Hz
100Hz
200Hz
50Hz
60Hz
250Hz
500Hz
注 : 假定 MCLK IN 脚的时钟频率正确 ,CLKDIV 位的设置也是适当的。
数据寄存器 :这是一个十六位只读寄存器 ,它包含了最新的转换结果 。
测试寄存器 :用于测试期间器件 ,用户一般不用 。
零标度校准寄存器和满标度校准寄存器 :都是 24 位 ,用户一般不用 。
2 应用设计
AD7705 主要在单片机小系统中应用 。本应用实例是一个低频数据采集电路 ,采用了 89C51 单片机 ,下面详
细介绍电路设计和软件设计方法 。
2. 1 与单片机的接口
首先介绍 AD7705 与单片机的连接方法 ,因为它采用串行接口 ,使得与大多数单片机很容易连接 。AD7705 与
8xC51 单片机的接口电路如图 1 所示 。
在一般的简单系统中 ,常常只有 1 片 AD7705 或其它共用口线的器件 ,故 CS- 通常接低电平 ,节省了单片机的
输出输入控制线 ,这样就可以配置成三线连接方式 。三线连接方式下决定数据寄存器是否被更新也即是确定数
图 1 AD7705 与 8XC51 单片机的接口电路
第 3 期 敖振浪等 :十六位模数转换器 AD7705 及其应用
382
据寄存器是否可以被读 ,只有通过监控通信寄存器 DRDY- 位来判断 ,这种做法的代价是时间开销较多 ,它并不适
用于时效性要求比较强的系统 。比较好的办法是监控硬件 DRDY- 引脚的状态 ,以决定数据寄存器是否被更新 ,
硬件 DRDY- 引脚的输出与通信寄存器 DRDY- 位同步 ,DRDY- 引脚一旦变成低电平 ,表明数据寄存器数据已经更
新 ,可以读取 。所以 DRDY- 输出引脚接至 CPU 的 INT0 或 INT1 就可以实现中断或者查询方式的监控 。但不管是
查询方式还是中断方式 ,都需要增加一根数据线 。在本设计中采用了硬件 DRDY- 引脚查询的方法 。
串行口包含 5 个信号 ,即 SCLK、DIN、DOUT、DRDY- 和 CS -
,通常直接连接到 8xC51 对应的引脚 P3. 0 、P3. 1 、
P3. 2 、P3. 3 ,DIN 线用来向片内寄存器传输数据 ,而 DOUT 线用来访问寄存器里的数据 。SCLK是串行时钟输入 ,所
有的数据传输都和 SCLK 信号有关 ,对于与单片机的接口 ,为确保芯片数据转换可靠 ,在两次相邻的数据传输之
间 ,应将本 SCLK置为高电平 。DRDY- 线作为状态信号 ,表示数据什么时候准备好以便从寄存器读取数据 。数据
寄存器中有新的数据字的时候 ,DRDY- 脚变为低电平 。如果在数据寄存器数据更新之前 ,若 DRDY- 脚变为高电
平 ,提示这时候不要读数据 ,避免在数据寄存器更新的过程中读出不可靠的数据 。
AD770 的读写操作严格按照时序进行 ,图 2 给出 AD7705 读和写时序 。
2. 2 实际应用电路设计
图 2 AD7705 读、写时序
我们设计的是一个气象探测仪器的实际应用电路 ,专门用于温度和湿度的模数转换 。因为实时性要求不太
高 ,因此数据读取采用了查询方法 ,这种方法对一般的应用是可以满足要求的 。在图 3 电路中 ,CLCK、DIN、DOUT
和 DRDY- 引脚直接连接 80C52 的 P1. 0 - P1. 3 引脚 。由 CC3 和 RC5 组成的复位电路 ,通电时 ,输入引脚 RESET-
处于低电平 ,复位所有的逻辑 、数据滤波器和模拟调试器 ,将所有的片内寄存器设置到其默认状态 。使用芯片
REF195 产生 + 5V 基准电压供给 AD7705 作为参考电压 ,同时作为温度传感器的激励电流源 。注意基准电压输出
端应该并联 10μ和 1000p 去耦电容 CC4 和 CC8 ,因为微小的噪声电平都会影响转换精度 。实际上 ,由于 AD7705
的功耗很小 (最大 1. 1mA) ,所以在设计中作者将 AD7705 的电源输入端 VDD 直接连接到 REF195 基准电压输出端
第 6 脚上 ,从而大大减少了电源干扰造成的转换误差 。第一通道的输入端加入去耦电路 ,3 个 1000p 的去耦电容
CC5 、CC6 、CC7 和两个 10k 电阻 ,因为引入了大电容去耦电路 ,因此需要 AD7705 工作于缓冲模式 。通道 2 作为供
电电压的监测 。
从图 3 可以看出 ,AD7705 输入基准电压等于 + 5V ,被 y 输入端 input2 输入电压负端接地 ,正端最大输入幅度
+ 0. 3V ,故增益可以选择 8 或者 16 。input1 是从 + 12V 电源分压得到 2. 0V 左右 ,可以选择增益 2 。注意输入信号
482
成 都 信 息 工 程 学 院 学 报 第 18 卷
幅度与增益关系 ,通道增益太大放大结果会超过基准电压 + 5V ,造成转换结果错误 。
AD7705 内部只有一套模数转换电路 ,通道 1 和通道 2 的选择通过软件设置进行切换 ,实际应用中往往需要
对不同通道采取不同的增益 ,动态地对 AD7705 进行增益 、通道设置 ,很灵活方便地达到这一目的 。
2. 3 软件设计
图 3 气象探测仪电路图
使用 AD7705 之前 ,首先要对所有寄存器进行设置 ,才能保证器件正常工作 。在实际使用中 ,首先选择模拟
输入模式 (单极性还是双极性) 、是否需要缓冲 、时钟分频和输出更新速率 ;根据外部输入信号的幅度来决定设置
器件的增益值 ,本实例里通道 1 和通道 2 输入信号都是单极性 ,但幅度不同 ,所以循环选择通道 ,选择相应参数 ,
应用中选择输入通道单极性 、初始增益等于 8 、数据更新速率为 250Hz。根据实际确定所有参数以后 ,对 AD7705
芯片进行设置 ,参数设置方法比较独特 ,在设置参数之前 ,首先对通信寄存器进行一次写操作 ,来决定下一个是什
么样的寄存器和什么样的操作内容 ,再进行下一步的参数写入 ,读者可参考下面的 AD7705 初始化程序 InitADC (
) 。
模拟输入电路前端加入了一个简单的 R、C 滤波器 ,会在输入电压中引起增益误差 ,必须对器件进行校准 ,因
为每次系统校准可以对系统的增益 、偏移误差 、以及器件本身的内部误差进行补偿 ,所以参数设置完毕以后 ,应该
对器件进行一次系统校准 ,写入设置寄存器位 MD1 和 MD0 分别为 0 和 1 完成系统自校准 ,自校准后自动返回正
常模数转换工作模式 。实际中各路输入信号幅度往往不完全相同 ,因此每转换一路就需要一次参数设置和系统
校准 。还需注意的是 ,在非缓冲模式下使用时 ,系统校准还可以消除模拟输入端由电源阻抗引起的任何误差 。
下面是用 C51 语言编写的初始化程序 :
void InitADC(void)
{ unsigned char i ;
ADC - CLK= 1 ;ADC - DIN = 1 ;
for (i = 0 ;i < 40 ;i + + ) {ADC - CLK= 0 ;ADC - CLK= 1 ;} / / 防止接口迷失 ,通信寄存器返回到等待写状态
WriteToReg - ADC - Init (0x20) ; / / 通道 1 ,下一个写时钟寄存器
WriteToReg - ADC - Init (0x06) ; / / 写时钟寄存器设置更新速率为 250Hz
WriteToReg - ADC - Init (0x10) ; / / 通道 1 ,下一个写设置寄存器
WriteToReg - ADC - Init (0x5c) ; / / 写设置寄存器 ,设置成单极性 、无缓冲 、增益为 8、滤波器工作 、自校准
Delay - 1ms(50) ; / / 延时
}
第 3 期 敖振浪等 :十六位模数转换器 AD7705 及其应用
582
unsigned int WriteToReg - ADC(unsigned int byteword)
{ unsigned int AD16bit ,Token ;
unsigned char i ;
ADC - CLK= 1 ; ADC - CS = 0 ; / * 开始 * /
Token = 0x80 ; AD16bit = byteword ;
for (i = 0 ;i < 8 ;i + + )
{ if (AD16bit & Token) ADC - DIN = 1 ; / * 输入数据位 * /
else ADC - DIN = 0 ;
ADC - CLK= 1 ; ADC - CLK= 0 ; ADC - CLK= 1 ;
Token = Token > > 1 ;
}
ADC - CLK= 1 ; ADC - DIN = 1 ; / * 结束 * /
return(TRUE) ;
}
初始化以后 ,CPU 就可以从模数转换器中读数据 ,读取数据之前必须确定数据寄存器的状态 ,有两种不同的
方式查询 ,第一种是查询 DRDY- 引脚 ,如果 DRDY- 引脚处于低电平 ,这表示数据已经转换完成 ,可以读取 。第二
种是查询通信寄存器中的 DRDY- 位 ,如果是“0”表示数据可以读取 。本例使用前者 。读数据流程图如图 4 所
示 ,读数据的频率为大约每分钟 60 次 ,远小于数据寄存器更新速率 ,确保了避免在数据寄存器更新的过程中读出
不可靠的数据 。
为了便于读者理解 ,给出读数据寄存器的函数原代码如下 :
图 4 读数据流程图
unsigned int ReadADC - 16BitValue (unsigned char channel)
{ unsigned int AD16bit ,Token ;
unsigned char i ;
WriteToReg - ADC(0x38| channel) ; / / 设置读当前通道数据
while (ADC - DRDY= = 1) { ;} / / 等待数据准备好
ADC - CLK= 1 ; ADC - CS = 0 ;
AD16bit = 0x00 ;
for (i = 0 ;i < 16 ;i + + )
{ AD16bit = AD16bit < < 1 ;
ADC - CLK= 0 ;
if (ADC - DOUT = = 1) AD16bit = AD16bit| 0x01 ; / / 读取数据位
ADC - CLK= 1 ;
682
成 都 信 息 工 程 学 院 学 报 第 18 卷
}
ADC - CLK= 1 ; ADC - DIN = 1 ;
return (AD16bit) ;
}
3 系统设计时值得注意的问题
AD7705 功能独特 ,具有分辨率高 、接口简单等特点 ,实际应用有时会遇到一些问题 ,只要注意是完全可以避
免的 ,作者提供几点实际应用经验供参考 :
(1) 在实际应用中 ,由于强电磁场 、系统中的闪烁信号干扰或者软件错误 ,不可避免会造成接口迷失 ,一旦接
口迷失 ,就无法对 AD7705 进行正常操作 ,数据也无法从中正常读出 。因此 ,在系统软件设计中应当定时复位系
统接口 ,使通信寄存器回到等待写状态 ,这一过程可以通过向 DIN 输入端写入至少 32 个串行时钟周期的逻辑“1”
以复位串行接口 。同时也应当注意 ,由于接口出现迷失 ,写入任何寄存器的信息都是不可预料的 ,所以接口复位
后建议将所有的寄存器重新设置一次 。
(2) 输出数据可以从串行口上随机地或周期性地读出 ,读出速率应不超过预设的输出寄存器更新速率 。读数
据的例程里面不应该加入太多的其它操作 ,确保在下一次输出数据更新之前读操作已经完成 ,这样才能避免连续
两次从数据寄存器读到同样的数据 (没有被更新数据) 。
(3) 在设计 AD7705 印刷板电路必须讲究布线技巧 ,布线的好坏直接影响数据转换精度 ,甚至会引起芯片工
作失常 。经验表明 ,AD7705 应该布设在一个相对独立和集中的区域 ,器件面用覆铜作接地平面 , 起到屏蔽作用 。
数字区和模拟区尽可能在底面分开布线 ,模拟接地与数字接地应只在一个点连接在一起 ,以避免出现接地环路 ,
并用屏蔽网格技术加以屏蔽 ,最后要以星型结构接入系统公共接地点 。所有电源都要加电容去耦电路 ,电容器尽
可能靠近芯片的电源输入端 。
参考文献 :
[1 ] 邬宽明. 80C51 系列微控制器系统原理 、功能集成与应用[M] . 北京 :北京航空航天大学出版社 ,1995.
[2 ] 徐爱钧 ,彭秀华. 单片机高级语言 C51 应用程序设计[M] . 北京 :电子工业出版社 ,1998.
16 bits converter AD7705 and its application
AO Zhen
lang , LI Yuan
hong , TAN Jian
rong
(Center of Meteorological and Technological Equipment of Guangdong Province , Guangzhou 510080 , China)
Abstract : The AD7705 is a 16 bits A/ D which is introduced by the ANALOG DEVICES Company. Its functions and charac
teristics are introduced. The hardware based on the AD7705 , the design method of the software and some procedure source
codes have been presented. Several technological problems should be paid attention to in the practical application.
Key words : AD7705 A/ D ; application ; design