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.

[参考译文] ADS1115:0x1FFF时环绕的输出代码

Guru**** 2574125 points
Other Parts Discussed in Thread: ADS1115

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/623747/ads1115-output-codes-wrapping-around-at-0x1fff

部件号:ADS1115

我正在使用ADS1115测量两个不同电流感应电阻器中的电压。  为了保持低耗散,电阻器很小,我使用的是+/-0.256V全刻度范围和差分感应。  

我看到的基本问题是,当差分电压达到+64mV (代码0x1FFF)时,输出代码似乎环绕到0x0000。  例如,~65mV给出0x009A。

我制作了一个简化的电路来向PCB施加小电压,这样我就不必通过感应电阻器产生更大的电流。  同一PCB上的相同代码(电阻器更改除外)表现出相同的行为。

在测试电路中,我在C179之间对R134短路,以从电路中拆下第二个感应电阻器。  通过改变电位计RV,我可以施加40-80mV的电压。  我还更改了数值,以便我可以得到低于40mV的电压。  如上所述,当我将RS (也是C178)上的电压从0提高时,代码会按预期增加。  当它们通过大约64mV时,它们似乎会重置为0x0000并再次开始增加。

  • 40mV => 0x13F7 (或转换为电压时约40mV):良好
  • 55mV => 0x1BDF (55mV):良好
  • 65mV => 0x009A (1.2mV):不好
  • 73mV => 0x045C (8.7mV):不好

看起来它是在绕线,或者某个东西正在将最高的3位归零。

更多详细信息:

当我开始转换时,我使用配置值0x8B03,差分AIN0-AIN1,+/-256mV满刻度,单次激发模式,8 SPS, 比较器关闭。

我等待200毫秒,然后读取值。  我正在查看我读取的原始字节,所以我很确定驱动程序中不存在数据转换问题。  此外,我还可以读回各种配置中的配置寄存器,并从更重要的位中获得所期望的内容。  我这样做是因为我想,“如果驱动程序中隐藏的内容是按位将字节与0x1FFF等效,从而删除较高的位,该怎么办?”  我以这种方式测试了单端AIN3配置,以便设置BITS CONFIG[14:12],并成功地将其读回。

这款处理器是一款Atmel SAMD20处理器,它使用Atmel软件框架的单一特性,但是I2C总线上还有其他一些设备似乎正在工作,所以我很难认为那里有什么问题。  此外,我确实获得了Vin < 64mV的有效读数。

在测试电路中,AIN1以上为接地;在实际电路中,由于轨迹电阻,AIN1略高于接地。  但电流是单向的,因此在两个电路中为0.256V > AIN0 >= AIN1 >= 0V。  从设备数据表中可以看出,共模输入范围可以包括接地,所以我在那里看不到任何问题。  

测试电路正在检查直流电值。  PCB的其他部分可能会发出一些噪音,但我看不到大量噪音。  我在采样几乎相同的输出代码后获得样本。

我尝试了其他有效的配置位,数据表中说这些位也会导致+/-256mV FSR,但没有效果。

虽然我的应用不需要它,但在测试电路上,我尝试反转AIN0和AIN1,以使差分电压为负。  这似乎也不能正常工作。  -7mV给出0x1C00 (转换时为+56mV),-62mV给出0x0117 (+2mV),-65mV给出0x1C80 (几乎与-7mV的情况相同)。  

多个主板显示此问题。  我的同事明天将尝试使用ADS1115原型板和Raspberry Pi,看看他是否可以这样复制。

我肯定是错过了一些明显的东西,但我不知道它是什么。  芯片的配置非常简单,似乎易于使用。  欢迎您提出任何建议。

此致,

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


    感谢您的详细评述。 我已经通读了你的帖子,但我真的没有发现任何错误。 看起来上面的四位报告了错误的数据。

    通常,我会要求您测量输入电压,以确保它与您想象的完全一致。 但是,您的设置相当简单,我认为这不会出错。 当然,我也会这样做。

    您正在测试交换输入以获得负值是一个好的测试。 除了最重要的半字节(似乎始终为负值的1)之外,该值返回正确。

    如果您有机会,我会尝试不同的输入范围,看看是否以相同的方式出现这种情况。 将范围设置为±4.096V,并在类似范围内改变输入

    您可以尝试两件重要的事情。 在这种情况下,我认为重要的是要实际观察从设备中出来的I2C事务。 从SAMD20读取时可能存在问题。 您最后应该尝试的是用新设备替换设备。 虽然我不知道会导致此问题的任何损坏机制,但这并不是在可能性范围之外。


    吴若瑟
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们弄明白了,我很尴尬地报告这是I2C总线上的地址冲突。 我以为我们在设计时就解决了这个问题,但显然我们购买了错误版本的Microchip MCP9800温度传感器,它的地址与带接地地址线的ADS1115相同。 将传感器从板上拔下,它工作正常:正输入,负输入,同时应用两个差分输入等

    回想起来,我很惊讶它能起作用。 我想如果我们先研究温度传感器代码,可能会不那么混乱。

    感谢您的建议。