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.

[参考译文] ADS8887:ADC 读取期间出现低分辨率问题

Guru**** 1151810 points
Other Parts Discussed in Thread: ADS8887, REF5045, OPA333, REF6045, OPA197
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/790639/ads8887-low-resolution-problem-during-adc-read

器件型号:ADS8887
主题中讨论的其他器件: REF5045OPA333REF6045OPA197

您好!

 我和我的同事都在为 ADS8887 18位 ADC 组件(ADS8887IDRCR)而苦恼。 我们需要读取具有0.1mV 误差容差的电压值。因此、我们选择了该组件、但遗憾的是、我们仅实现了7-8位分辨率的 ADC 结果、即使我们应用 了数据表中演示的相同信号(手动)(4线制操作) 我将共享我的主代码、原始数据和示波器结果。

每一条反馈和 建议都会非常有帮助。

下面是一些原始数据示例=>    0.0伏->75760

                                                                         0.1伏->75776  

                                            0.5伏->79856
                                                                        1.0伏->84976
                                                                        2.4伏->98288
                                                                        3.8伏->112624

图中显示了我们收到的原始 ADC 值

(PS:这些值甚至不会改变一个整数)

下面是示波器屏幕快照=>

主代码////////////////////////////////////////////////////////////////////////////


#define CS 47   //PL2 (DIN)
#define SCK 52  //PB1
#define MISO 50 //PB3
#define M0SI 51 //PB2
#define CONVST 45 //PL4

字节 val;
void setup(){

 引脚模式(39、输出);        //ADC CH1电源使能
 digitalWrite (39、HIGH);
 Serial.begin(115200);

 DDRB = DDRB | B00000010;    //SCK 为输出
 DDRL = DDRL | 00010100;    //DIN 和 CONVST 为输出

 DDRB = DDRB 和 B11110111;
 


 PORTL = PORTL & B11101011;//CS 和 CONVST 为低电平
 PORTB = PORTB & B11111001; //SCK 低电平


 
 }
 unsigned long miso_;
 unsigned long clk=0、clk2=0;    //这两个参数用于延迟操作
 
void loop(){
 
 延迟(10);
 PORTL = PORTL | B00000100;       /CS 高电平
 delayMicroseconds (1);
 PORTL = PORTL | B00010000;       //CONVST 高电平
 MISO = 0;
 delayMicroseconds (1);
 for (int i=0;i<50;i++)             // 5周期 boyunca SCK
 {
   
   PORTB = PORTB | B00000010; //SCK 高电平
   
   while (micros-clk <1)
   {
     CLK=micros ();                //or 和 Operation 需要不同的时间、因此我们使它们相等
   }

   PORTB = PORTB 和 B11111101; // SCK 低电平
 }
 

 delayMicroseconds (10);
 PORTL = PORTL & B11111011;    //CS 低电平
  //delayMicroseconds (100);
 字节 val = 0;
 MISO = 0;
 
  for (int i=0;i<18;i++)            
 {
    PORTB = PORTB | B00000010;    //SCK 高电平
     delayMicroseconds (1);
    
    Val =(字节) PINB & B00001000;     //  读取 DOUT 引脚
    Val = val >> 3;                   //将其移动到 LSB
    Val = val & B00000001;
 
    MISO =(MISO <<1)| val;                    //将值1位左移以获得下一位
    /*
   serial.print(i);
   serial.print ("=");
   serial.println (val);
   *
   /*
   while (micros-clk2 <1)
   {
     clk2=micros();                       
   }
   *
   PORTB = PORTB 和 B11111101;    //SCK 为低电平
   delayMicroseconds (1);
  
 }
 
 PORTL = PORTL & B11101111;                 // CONVST 低电平


delayMicroseconds (50);                   
serial.println (miso_);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bycay、

    欢迎来到 TI e2e 社区!

    请提供显示输入驱动器和参考电路的原理图。

    我假设您使用的是5V 基准。 请记住、ADS8887的输出代码采用二进制补码格式、以支持+/-Vref 的输入差分范围(在您的情况下、我假设为+/-5V)。

    此外、为了满足数据表要求、SCLK 占空比需要为45%至55%。 您的时钟看起来大于90%。

    此致、
    Keith N.
    精密 ADC 应用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回答、

                  我已将 SCLK 占空比设置在45%至55%之间、但它没有产生影响。(如 下图所示)

         

     我们使用由 REF5045组件提供的4.5伏基准。 ADS8887、OP-AMP 电路和参考电路如下图所示。

    感谢您抽出宝贵的时间和考虑。

    Burçay 圆顶

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bycay、

    基准缓冲器 OPA333可能是您看到的主要噪声源。 该放大器无法直接驱动 ADS8887的基准输入、ADS8887包含需要高速动态电流的开关电容器。 实际上、内部 REF5045驱动器的性能可能会优于您配置的 OPA333。 如果您只需要支持10ksps、则可以在数据表图61所示的电路配置中使用 OPA333、但需要添加外部 RC 滤波器。

    基准的另一个选项是使用 REF6045。 此基准包括一个高速缓冲器、此缓冲器设计用于直接驱动 SAR ADC 基准输入。

    对于模拟输入、它们还需要一个 RC 滤波器。 我没有使用过 OPA197、但您应该能够获得良好的结果。 有关输入驱动器建议、请参阅数据表中的图58。