电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • 扫码下载手机洽洽

    随时找料

    即刻洽谈

    点击下载PC版
  • 华强电子网公众号

    电子元器件

    采购信息平台

  • 华强电子网移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

AD7711与单片机AT89S8252的接口技术

来源:-- 作者:-- 浏览:630

标签:

摘要: 摘要 介绍一种高分辨率的双路A/D转换器AD7711,能满足双路A/D采样要求。内容包括AD7711的特点,内部寄存器结构和外部接口,并详细阐述了数据采集系统中AD7711与单片机AT89S8252的接口技术,包括硬件接口电路和软件程序设计及其注意事项。 关键词 A/D转换器AD7711 单片机AT89S


摘要     介绍一种高分辨率的双路A/D转换器AD7711,能满足双路A/D采样要求。内容包括AD7711的特点,内部寄存器结构和外部接口,并详细阐述了数据采集系统中AD7711与单片机AT89S8252的接口技术,包括硬件接口电路和软件程序设计及其注意事项。

 

关键词  A/D转换器AD7711  单片机AT89S8252   多路转换开关ADG609

         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