This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ads7825采样线性度不好???

Other Parts Discussed in Thread: ADS7825

在使用ads7825的串行采样时,用信号源输入信号,发现单个电压点的重复性可以,跳动在2-3个mv,但是在输入不同的电压是,发现在不同的电压点上采样有些准有些不准,感觉是在波动。

例如:输入0v,采样结果为0.004v

             输入0.2v,采样结果为0.2v,输入-0.2v,采样结果为-0.12v左右

            输入0.4v,采样结果为0.328/v,输入-0.4v,采样结果为-0.4v左右

            感觉大的线性度是对的,但是总是有个70mv左右的曲线波动,而且是对称的正负电压总是有个70mv的误差,这是怎么回事啊?

  是我的采样程序有问题还是电路有问题呢?

 

  • 你好,请先上传原理图以便分析。

  • 老是发不出图来

    发成附件看看

    原理图.doc
  • 你好,因为ADS7825是一个SAR ADC,所以需要一个RC低通滤波限带同时降低采样导致的噪声,可以试试499欧和820p。可以参考http://www.ti.com/lit/an/slaa571/slaa571.pdf ,同时你的PCB布局是否按照手册所述的建议?

    还有,你的输入电压是怎么产生的?电阻分压么?因为这款AD输入阻抗较低,只有40k。所以如果前端电阻过大会导致误差。

  • 我的实际使用时的电压是传感器的电压经过仪表放大器后进行采样,我曾经尝试再加了一个跟随电路,发现采样值变了,但线性还是不好。

    我目前调试都是用的信号源输入采样信号。没有电阻分压

  • 请详述你对AD的操作和时序控制,以便大家参考,谢谢。

  • 我把具体的采样结果现象给你们看看:

    每组数据为:信号源输入电压 ad采样出的电压

    -2 -2.003 ,-1.8 -1.803 ,-1.6 -1.681, -1.4 -1.402, -1.2 -1.202, -1 -1.08 ,-0.8 -0.88 ,-0.6 -0.601 ,-0.4 -0.401 ,-0.2 -0.279 ,0 -0.074, 0.2 0.199 ,0.4 0.321 ,0.6 0.522, 0.8 0.8 ,1 1 ,1.2 1.122, 1.4 1.323, 1.6 1.602 ,1.8 1.724, 2 1.924

    我的程序是:

     CLK_AD=0;
     BUSY_AD=1;
     SYNC=1;
        RC=1;
     VMOTOR=0;
        for(ii=0;ii<200;ii++)   //ADS7825采样200个数
     {
     adh=0X00;//高8位初值
         adl=0X00;//低8位初值
      delay(30);
         RC=0;
      delay(30);
         RC=1;//启动AD转换
         
          //////////
      while(!BUSY_AD);//当BUSY_AD跳回高电平,表示转换结束
      delay(30);//延迟,对脉冲整形
      CLK_AD=0;//
      delay(30);
      CLK_AD=1;
     
         delay(30);
         CLK_AD=0; 
      while(!SYNC);

    /////////////////////////////////////////////////////////////////////////
      
         for(i=0;i<=7;i++)
      {
          delay(30);         
          CLK_AD=0;        
       adh=adh | DATA_AD;
       adh=adh<<1;
             delay(30);
       CLK_AD=1;
            }
      for(i=0;i<=7;i++)
      {
       delay(30);
          CLK_AD=0;
       adl=adl | DATA_AD;
       adl=adl<<1;
       delay(30);
       CLK_AD=1;
            }
    //////////////////////////////////////////////////////////////////////////////////////////
         T[step11].ch[0]=adh;
            T[step11].ch[1]=adl;

    最后两行通过联合体把数据转换了

    请各位帮忙分析下