让找料更便捷
电子元器件
采购信息平台
生意随身带
随时随地找货
一站式电子元器件
采购平台
半导体行业观察第一站
标签:
摘要: 摘要 介绍一种高分辨率的双路A/D转换器AD7711,能满足双路A/D采样要求。内容包括AD7711的特点,内部寄存器结构和外部接口,并详细阐述了数据采集系统中AD7711与单片机AT89S8252的接口技术,包括硬件接口电路和软件程序设计及其注意事项。 关键词 A/D转换器AD7711 单片机AT89S
摘要 介绍一种高分辨率的双路A/D转换器AD7711,能满足双路A/D采样要求。内容包括AD7711的特点,内部寄存器结构和外部接口,并详细阐述了数据采集系统中AD7711与单片机AT89S8252的接口技术,包括硬件接口电路和软件程序设计及其注意事项。
AD7711是美国AD公司推出的一种高分辨率的双路模数转换器件,采用sigma-delta技术实现24位无丢失码操作,具有抗干扰能力强、受噪声环境影响小的优点,因而成为工业和过程控制应用中的理想选择。
1. AD7711的特点如下:
电荷平衡式A/D转换器,24 位分辨率,0.0015%非线性度;
两路可编程输入,增益可设置为1~128,一路差分输入,一路单端对地输入;
带有可编程低通滤波器;
带有RTD激励电流源;
可读/写校验参数;
双向微控制器串行接口;
内部/外部参考点选择,单/双电源操作,带有掉电模式的低电压。
AD7711是理想的用于低频测量应用的A/D,直接接受来自传感器的低电平信号并输出串行数字。输入信号适用于基于模拟模式的可编程前置增益,输入为差分模拟输入通道和单端对地模拟输入通道,这部分能提供两个电流源用于作为三线和四线RTD配置的激励,简化了RTD测量温度的电路设计,可执行各种信号状态并转换为单或双通道系统。输出模式可通过片内控制寄存器编程实现片内数字滤波器滤波。A/D的增益设置、信号极性、输入通道选择和RTD电流控制都能用双向串口软件设置AD7711片内的24位可读/写控制寄存器实现。AD7711所含的自我校验、系统校验、背景标定选择也允许用户读/写片内校验寄存器,并且软件可编程掉电模式。
2. AD7711的内部结构及引脚介绍(如图1所示)
AD7711包括一个sigma-delta ADC、数字滤波器、可编程放大器、时钟发生器、24位控制/数据/校准寄存器、200uA恒流源。
2.1 AD7711的引脚介绍:
SCLK为串行时钟的输入/输出端,可用MODE脚的状态来控制。当MODE=1时,芯片工作在内部时钟方式,此时SCLK脚输出的是串行时钟信号,当RFS或TFS变低时,SCLK被激活;而当RFS或TFS中的一个为高或器件完成一个输出字的传送后,SCLK转为高阻态。当MODE=0时,芯片工作在外部时钟方式,此时输入的串行时钟可用作数据传送的移位脉冲。
SDATA为串行数据的输出/输入端,输入时,CPU将把数据字写入到器件的控制寄存器,输出时,CPU将读取控制寄存器、校准寄存器、数据寄存器内的数据;在读操作期间,RFS变低之后串行数据有效;而在写操作期间,在TFS变低之后上升沿载入有效数据。
RTD1和RTD2为恒流源输出端,可用作RTD的激励电流,通过对控制寄存器的编程来控制通/断。
A0为寄存器地址选择端,A0置低时选控制寄存器,置高时选数据或自校准寄存器;
RFS/、TFS/分别为输入或输出帧同步端;
MCLK IN和MCLK OUT为主时钟频率的连接端;
SYNC/为数字滤波器的复位端;
AIN1(+)和AIN1(-)为差分模拟信号的输入端;
AIN2为单端对地模拟信号的输入端;
DRDY/为A/D转换完成端;
REF IN+和REF IN-为外加参考电压输入端;
REF OUT为参考电压输出端。
2.2 AD7711的控制寄存器
AD7711的工作状态可通过程序向器件内部写入控制字来设定,输入控制字时,必须连续写入24 位数据,若写入的数据不足,这些数据就不会被加载到控制寄存器。具体格式为:
MSB为MD2,LSB为FS0。
MD2、MD1、MD0用于确定AD7711的工作方式;
G2、G1、G0用来确定输入通道的增益,000~111分别对应1~128;
CH可确定输入通道号,0为AIN1,1为AIN2;
PD=0为掉电模式选择,PD=1为正常模式;
RO决定激励电流源的开/断,0为断,1为开;
WL为字长选择定义位,0时字长为16位,1时字长为24位;
BO为电流控制位,0时关断内部电流源,1时允许该电流流出;
B/U=0时双极性输入,B/U=1时单极性输入。
另外,AD7711在芯片内部集成了一个三阶数字滤波器。由FS12~FS0编程决定第一个凹点频率,器件的转换率。适合于数据采集速率较慢的场合。
3. 数采系统中AD7711的模拟通道输入接口
在我们所设计的数据采集系统中,采集温度传感器输送的4路RTD信号和压力、可燃起浓度、流量、转速传感器输送的4路4~20mA的电流信号,这八路模拟信号经两个多路转换开关ADG609后分别与AD7711的两路模拟输入通道连接(如图2)。其中AD7711的电源连接、主时钟连接和参考电压连接均可参考图2所示。
AD7711的模拟电源与数字电源采用单5V电源供电,将AVDD端和DVDD端连在一起,分别经两个并联的电容与模拟地连接。AD7711采用外部时钟模式,其主时钟频率为10MHz,由MCLK1和MCLK0引脚输入。由RTD1和RTD2引脚提供的两个200uA连续激励电流源通过对控制寄存器的RO位编程实现开/关。在如图2所示RTD应用中,一个用来为RTD提供激励电流源,另一个为精密采样电阻提供恒流源构成基准参考电压。RTD输入差分模拟输入通道,4~20mA电流信号输入单端对地模拟输入通道。
4. 数采系统中AD7711与单片机AT89S8252的硬件接口电路
用AT89S8252单片机的串口和P1口实现与AD7711接口的具体电路如图2所示。该电路中通信串口工作在方式0,即该串口用作同步移位寄存器,由RXD(P3.0)端实现数据的输入、输出,串口移位时钟由TXD(P3.1)端输出。通信的波特率恒定为FOSC/12,其中FOSC为单片机晶振,FOSC为 l0MHz。由于AD7711的数据串行输出格式与8252单片机的串行格式相反,所以本设计中在单片机的时钟输出端与AD7711的串口时钟端之间接一反相器,且软件设计时数据位顺序要倒相。
图2中P1口的三条口线分别与AD7711的RFS/、TFS/、DRDY/相连,A0与单片机的外部扩展存储器PSD311的PA7口线相连,其中P1.3为输入口,用于读取DRDY/的状态,其余为输出口用于控制AD7711的读/写过程。将AD7711的MODE接地,使器件工作在外部时钟方式,主时钟由10MHz的石英晶体产生。
5. 用AD7711与单片机AT89S8252实现数据采集的软件设计
5.1 数采系统中的A/D转换分为两步:
第一步,向AD7711芯片写控制字;第二步,读取AD7711的模数转换结果。
5.1.1 发送数据时,即向AD7711写控制字,首先设置PA7即A0为低电平表明读写控制寄存器,软件清除TI标志位准备发送第一个控制字,设置P1.1即TFS/为低电平,发送控制字的前8位数据至缓冲区,TFS/下降沿使内部产生的SCLK时钟输出,时钟信号的上升沿使串行数据上载入AD7711芯片。通过判断TI标志位等待串行口数据发送结束,设置P1.1为高使AD7711停止接收数据。软件清除TI标志位准备发送第二个控制字,同前面所述连续发送三个控制字(24位数据)至AD7711的控制寄存器。控制字发送完成后设置PA7为高电平,结束对控制寄存器的读写操作。
5.1.2 接收数据时,首先判断DRDY/的引脚电平,若为低电平,则表明已有有效的转换数据在AD7711芯片的数据输出寄存器中,这样单片机置位REN=1,此时,接收数据开始,当接收到8位数据时,中断标志位RI置位,一次串行接收结束,单片机自动停止发送移位脉冲,该8位数据从串行口缓冲器读入内存,并使用软件清除RI标志,单片机又开始发送移位脉冲,直到又收到8位数据,则另一次串行接收结束。这样,这次接收的8位数据与刚才接收的低8位数据组合成为16位数据,即一次A/D转换的结果。
5.2 我们所设计的数采系统中软件编程过程中涉及到对多路转换开关ADG609的通道选择和因其所作的延时程序处理。部分程序清单如下(以RTD采集为例):
void write_7711_con(unsigned char sel_cal_mode,unsigned char conword1)
{
unsigned char data con_para_rtd[3]; //storage control word (write to 7711)
con_para_rtd[0] = arrange_byte(sel_cal_mode); //设置AD7711校验模式
con_para_rtd[1] = arrange_byte(conword1); //设置增益等参数
con_para_rtd[2] = arrange_byte(con_word2); // arrange_byte()使各数据位顺序倒相
SCON = 0x02; //串口波特率 =fosc/12
*psdpa_data = *psdpa_data & 0x7f; //设置 pa.7(a0) 为低,读写控制寄存器
TI = 0; //清除单片机串口发送标志,准备发送第一个控制字
P11 = 0; //设置 TFS(p1.1)为低,可以向AD7711发送串行数据,下降沿有效
SBUF = con_para_rtd[0]; //写串口缓冲区数据至AD7711发送第一个控制字
while (!TI); //等待串行口发送完成
P11 = 1; //设置 TFS(p1.1)为高,AD7711停止接收串行数据
TI = 0; //清除单片机串口发送标志,准备发送第二个控制字
P11 = 0; //下降沿有效
SBUF = con_para_rtd[1]; //发送第二个控制字
while (!TI); //等待串行口发送完成
P11 = 1; //设置 TFS(p1.1)为高,AD7711停止接收串行数据
TI = 0; //清除单片机串口发送标志,准备发送第三个控制字
P11 = 0; //下降沿有效
SBUF =con_para_rtd[2]; //发送第三个控制字
while (!TI); //等待串行口发送完成
P11 = 1; //设置 TFS(p1.1)为高,AD7711停止接收串行数据
*psdpa_data = *psdpa_data | 0x82; //设置 pa.7(a0) 为高,读写控制寄存器结束,可以读写数据
}
void rtd (void)
{
unsigned char xdata rtd_temp_result[8]; //storage resistance come form rtd_data_result
*psdpa_data = *psdpa_data & 0xfe; //设AINEN2为低使ain adg609为不能
*psdpa_data = *psdpa_data & 0xfd; //设AINEN1为低使rtd adg609为不能
select_rtd_ch(channel_switch[0]); //选择rtd通道
delay(13000); //延时 200ms
write_7711_con(con_word01,con_word1); //初始化7711,通道1,自校准,开激励
电流滤波器的第一凹陷频率为40Hz
WMCON = WMCON | WDTRST; //看门狗定时器复位
delay(16500); //延时 250ms
WMCON = WMCON | WDTRST;
while(P13);
for (main_k=0;main_k< rtd_count;main_k++) //读取四路RTD模数转换结果
{
select_rtd_ch(channel_switch[main_k]); //选择rtd通道
WMCON = WMCON | WDTRST;
write_7711_con(con_word0,con_i_on); //开激励电流
WMCON = WMCON | WDTRST;
delay(16500);
WMCON = WMCON | WDTRST;
SCON = 0x01; //使接收并设置接收中断
P12 = 1; //设RFS为高,不能读
P11 = 1; //设TFS为高,不能写
WMCON = WMCON | WDTRST;
delay(12000); //延时 170ms
WMCON = WMCON | WDTRST;
*psdpa_data = *psdpa_data | 0x80; //设A0为高读7711数据寄存器
while (P13); //若DRDY/为低则向下运行否则循环
RI = 0; //清除接收标志,串口开始接收
REN = 1; //设置接收使能
P12 = 0; //设RFS为低
while (!RI); //循环至8位接收完成
rtd_temp_result[2*main_k] = SBUF; //将缓冲器中数据送至指定地址
P12 = 1; //通知AD7711停止发送数据
RI = 0; //清接收标志,串口开始接收
P12 = 0; //设RFS为低
while (!RI); //循环至8位接收完成 rtd_temp_result[2*main_k+1] = SBUF; //将缓冲器中数据送至指定地址
P12 = 1; //设RFS为高停止读操作
rtd_temp_result[2*main_k+1] = arrange_byte(rtd_temp_result[2*main_k+1]);
rtd_temp_result[2*main_k] = arrange_byte(rtd_temp_result[2*main_k]);
rtd_data_result[main_k] = *(int *)(rtd_temp_result+2*main_k);//合并两个字节为一个字
WMCON = WMCON | WDTRST;
}
}
6. 注意事项
6.1 模拟信号输入端的无源滤波电路C1、C2和C3是对长线模拟信号传输干扰采取的抑制措施。
6.2 软件延时是对多路转换开关通道切换时产生的干扰脉冲的抑制措施。
6.3 复位看门狗为单片机AT89S8252片内可编程看门狗。
6.4 AD7711与单片机AT89S8252的时钟信号相反。
6.5 给AD7711的控制寄存器写入控制字时,字长必须是24位,否则不能被上载入控制寄存器。
型号 | 厂商 | 价格 |
---|---|---|
EPCOS | 爱普科斯 | / |
STM32F103RCT6 | ST | ¥461.23 |
STM32F103C8T6 | ST | ¥84 |
STM32F103VET6 | ST | ¥426.57 |
STM32F103RET6 | ST | ¥780.82 |
STM8S003F3P6 | ST | ¥10.62 |
STM32F103VCT6 | ST | ¥275.84 |
STM32F103CBT6 | ST | ¥130.66 |
STM32F030C8T6 | ST | ¥18.11 |
N76E003AT20 | NUVOTON | ¥9.67 |