花生漫画

关于使用AD7705的一些心得(原创)

0
阅读(13890)

       AD7705为16位高精度模数转换器,AD7705是十六位分辨率的A/ D 转换器,2 通道全差分模拟输入,使用+ 5V 单电源,主要应用于低频测量。三线数字接口,可以通过串行输入接口由软件配置芯片的增益值、输入信号极性和数据更新速率,非常灵活方便。具有自校准和系统校准功能 ,能够消除器件本身和系统的增益以及偏移误差。是用于开发智能系统、微控制器系统和基于DSP系统的理想产品。下面是关于AD7705初始化的一个小程序,简单的说一下该芯片:

void ad7705_ini()   
{   
 reset_AD7705();   
 write_AD7705_byte(0x20);//写通信寄存器,选择通道1,将下一次操作设为写时钟寄存器    
 write_AD7705_byte(0x01);//写时钟寄存器,不分频,更新频率25Hz    
 write_AD7705_byte(0x10);//写通信寄存器,选择通道1    
 write_AD7705_byte(0x7e);//写设置寄存器4,单极性,非缓冲模式,清除滤波器同步,启动对1通道的自校准    
}   
void write_AD7705_byte(unsigned char wr_dat)   
{   
 unsigned char i;   
 for(i=0; i<8;i++)   
 {   
  ad7705_clk=0;   
  _nop_();   
  _nop_();   
  _nop_();   
  ad7705_din=(bit)(wr_dat&0x80);   
  _nop_();   
  _nop_();   
  _nop_();   
  ad7705_clk=1;   
  _nop_();   
  _nop_();   
  _nop_();   
  wr_dat=wr_dat<<1;   
  }   
}   
unsigned int read_AD7705_word()   
{   
 unsigned int read_dat=0;   
 unsigned char i;   
 for(i=0;i<16;i++)   
 {   
  read_dat=read_dat<<1;   
   ad7705_clk=0;   
   _nop_();   
   _nop_();   
   _nop_();   
   if(ad7705_dout)read_dat++;   
   _nop_();   
   _nop_();   
   _nop_();   
   ad7705_clk=1;   
   _nop_();   
   _nop_();   
   _nop_();   
 }   
  return read_dat;   
}   
void reset_AD7705()   
{   
  unsigned char i;   
  ad7705_din=1;   
  for( i=0; i<36; i++ )   
  {   
    ad7705_clk=0;   
  _nop_();   
  _nop_();   
  _nop_();   
    ad7705_clk=1;   
  _nop_();   
  _nop_();   
  _nop_();   
  }   
  //Delay(5);    
}   

:1)上面是部分代码,其实该芯片的使用关键在于几个寄存器的置位,AD7705包含了8个片内寄存器,这些寄存器通过器件的串行口访问,所有的操作都是通过对寄存器的操作。第一个是通信寄存器,器件复位后,通信寄存器处于等待状态,通过通信寄存器写操作,决定下一次操作是写还是读,同时决定这一次读操作或写操作发生在那个寄存器上。也就是说所有的寄存器(包括通信寄存器本身和输出数据寄存器)进行读操作之前,必须首先写通信寄存器,然后才能读选定的寄存器。

       2)采用非缓冲模式时,AD7705模拟输入前端的电阻电容的变化对AD转换精度影响很大。若系统工作时的信号源、温度环境、器件参数变化很大,导致AD7705模拟输入前端电路的参数跟系统校准时的参数不一致,误差会非常大。缓冲模式能解决这种问题,当使能缓冲模式时,AD7705会在模拟输入端和AD转换器之间接入一个缓冲器Buffer,这样AD7705就能适应模拟输入前端信号源的大阻抗、器件参数(电阻电容)的变化、温度环境的变化等各种与系统校准时的不一致情况(即器件工作条件的变化)。所以,AD7705的校准和正常工作最好都要在缓冲模式下进行。