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.

[参考译文] ADS1015:从 ADC 读取数据时出现问题。

Guru**** 2390755 points
Other Parts Discussed in Thread: ADS1015

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1378113/ads1015-issue-reading-data-from-adc

器件型号:ADS1015

工具与软件:

我的 ADC 有问题。 我能够看到器件、但返回的值为25。 我将增益设置为1 (4.096V)、通道0上的输入电压为3.26v (使用万用表进行验证)、但输出为 ADC 值25或0.025v。 所有4通道输出错误的值。  

我注意到有很多下冲、但我不确定这是否只是示波器引线或探头放置的误差。 我注意到有一个? 结束时发出通知。  

如有任何帮助、将不胜感激。

谢谢!

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

    尊敬的 DBC:

    我将对此进行更深入的了解、并在明天之前与您联系。

    此致、

    天使

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

    我有一些更新的示波器数据。 我添加了通道0应进行读取的热敏电阻、并通过 DMM 验证了电压是0.68v、这对于~室温是正确的。  

    我的代码每5秒请求通道0的当前值。 在许多样本中、只有几个看起来是正确的。 我已经标记了接近于正确的输出。  

    上面的图像与下面的相同、但放大了。 ^μ A


    这是完整传输。 ^μ A

    这里是我的代码输出、其中标记了接近的输出。  

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

    我已将该主题更新为包含更多信息。 请告诉我:)

    谢谢!

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

    我将代码更改为使用平均值计算、每秒128个样本、然后每5秒输出平均值、这有助于消除任何噪声问题。

    它只是不停地输出128个、对温度的任何变化没有响应(即使输入电压在变化、由 MM 进行了验证

    真的不知道除了可能用新的 ADC 替换 ADC 之外还有什么其他尝试。 当我将 FSR 更改为不同的值时、输出会发生变化、因此 ADC 会工作到某个点、但我想知道输入是否因下冲/过冲而损坏?

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

    您好、DBC

    如果过冲/下冲超过器件的建议运行条件、器件可能会损坏、但它认为此处的问题是数据解释不正确。

    首先、您提到您要将器件设置为4.096V FSR、但从示波器捕获结果来看、您要写入配置寄存器的是+/-6.144V 的 FSR。 您也要将该器件设置为启动单次转换、但也要将其设置为在连续转换模式下运行。 我建议将该器件设置为单次模式。  

    您正在发出配置设置后立即发出读取转换结果命令。 您可能需要在发出读取转换寄存器命令之前添加更长的延迟、因为当您发出寄存器读取命令时、转换结果可能无法就绪。

    此外、请确保正确解读数据、由于器件是12位器件、但数据是通过两个8位帧读取的、因此应忽略最后4位(始终为零)。

    此致、

    天使

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

    在进行更多的故障排除之后、我认为您可能是对的。 我大部分时间都能够获得正确的输出、但有时必须重新启动器件才能使其保持稳定、当输入值快速变化时、输出就会变得非常不稳定。  

    这些示波器捕获是否看起来存在信号完整性问题?

    感谢您的答复!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是我的代码:
    #include <Arduino.h>
    #include <Wire.h>
    const int ADS1015_ADDRESS = 0x48; // Default I2C address for ADS1015
    const int CONFIG_REGISTER = 0x01;
    const int CONVERSION_REGISTER = 0x00;
    const float GAIN = 4.096;
    const double INPUT_BIAS_V = 0.075;
    void setup() {
      Serial.begin(9600);
      Wire.begin();
    }
    void loop() {
      Wire.beginTransmission(ADS1015_ADDRESS);
      Wire.write(CONFIG_REGISTER);
      Wire.write(0xC3); // MSB: single-shot mode, ±4.096V, single-ended channel 0
      Wire.write(0x83); // LSB: 1600 SPS, disable comparator
      Wire.endTransmission();
     
      delay(15);
      Wire.beginTransmission(ADS1015_ADDRESS);
      Wire.write(CONVERSION_REGISTER);
      Wire.endTransmission();
      Wire.requestFrom(ADS1015_ADDRESS, 2);
      int16_t result = 0;
      if (Wire.available() == 2) {
        result = (Wire.read() << 8) | Wire.read();
      }
     
      float voltage = result * GAIN / 2048;
      voltage -= INPUT_BIAS_V;
      Serial.print("ADC Value: ");
      Serial.print(result);
      Serial.print("\tVoltage: ");
      Serial.println(voltage, 4);
      delay(1000);
    }
    
    这将返回:ADC 值:448 Voltage:0.8210
    通道0上测得的电压为0.698V。 通道具有0.075V 的偏置。 我的最新捕获与此代码片段返回"[W:48][NUL]"所以我认为我的示波器在解码它时遇到了困难?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 DBC:

    您可能 只是看到示波器引线或探头放置出现了一些错误 、而不存在信号完整性问题。

    您是否能够提供与您所指读数相对应的数字通信的示波器(或逻辑分析仪、如果可能)捕获?:

    正在返回:ADC 值:448 电压:0.8210

    这将有助于澄清您是否正确解释了来自 ADC 的数据。

    此致、

    天使

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

    很抱歉到处反弹、但我已经在我们的通信之间进行了故障排除。

    所以我想我发现了这个问题。 我写了一个简单的程序:

    指向0x01配置寄存器、

    写入0xC5

    写入0x83

    很短的延迟

    读取0x01寄存器(返回0x181)

    所以似乎没有采用配置? 这将解释我的怪异读数。  

    以下是从上面代码捕获的代码:

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

    尊敬的 DBC:

    让我看看,我会在下周早些时候回到你.

    此致!

    天使

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

    我对此表示赞赏。  

    我忘记了上述捕获中的延迟、但之后、我尝试在第一次读取后立即添加延迟、因此:

    指向0x01配置寄存器

    写入0xC5

    写入0x83

    读取

    很短的延迟

    读取

    两次读取均使用相同的0x181返回。  

    我换了一个新的 ADC、但仍然得到相同的结果、因此可能是 通信问题或某些问题导致两个 ADC 都无法正常工作。 我不想在知道发生了什么之前尝试另一个。  

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

    我终于找到了。  

    同一 I2C 总线上还有一个导致问题的 DAC121。  

    我将 ADC 地址设置为0x48、将 DAC 地址设置为0x09。 我在 DAC 数据表中检查了"请勿使用"地址、但并未说明在使用0x09地址时无法使用0x48。  

    您知道为什么会出现这个问题吗?

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

    尊敬的 DBC:

    很高兴听到问题消失了。 我不太熟悉 DAC121、但您可以为该器件发布新的 E2E 问题、DAC 团队将能够帮助指出该器件是否存在潜在问题。

    因此、从 I2C 总线上移除 DAC121后、ADS1015现在可以按预期工作、您可以正确检索 ADC 读数。

    此致、

    天使

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

    是的、只要我取消安装 DAC IC、一切就会正常运行。  

    如果我不明白、我会这么做。  

    谢谢!