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.

[参考译文] INA219:一旦达到16.4V,电压读数将变为负值

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1088367/ina219-voltage-reading-goes-negative-once-16-4v-is-reached

部件号:INA219

我们正在调试SEN0291的固件,并且在32V范围内存在缩放问题。

在达到16.4V之前,我们会获得准确的读数,在这种情况下,传感器会提供-1.6319万 mV。

我们已验证在寄存器中选择了32V范围。

为了进行故障排除,我们更改为16V,并注意到即使电压超过1.6万mV,传感器也会在1.6万mV时发出信号。
数字电源连接到瓦特表上的IN+和GND。 未连接负载。
无论是否有负载,或者是否连接到IN和GND,都可以看到这种情况。
我们使用的是来自DF Robot的重力:I2C数字瓦特计传感器: https://wiki.dfrobot.com/Gravity%3A%20I2C%20Digital%20Wattmeter%20SKU%3A%20SEN0291
谢谢!
Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    忘记添加:

    将电源更改为16.4V时,总线电压读数为-1.6319万

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

    您好Ryan:

    感谢您使用TI论坛。

    在出现故障的情况下,您能否向我发送一份设备中所有原始寄存器值的列表? (并告诉我在这种情况下验证的电压是多少)。 这样我就可以更好地分析情况。

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

    以下是输出:

    配置寄存器值(二进制):11.1101万10011111</s>1001.1111万
    BRNG设置为32V。

    我正在与一位远程固件工程师合作,因此我无法查看末尾的寄存器值。我正在进行测试,而固件工程师正在检查这些值。

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

    在转换之前,您是否还可以发送总线电压寄存器的原始寄存器值,并告诉我您当时在总线上预期看到的值?

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

    这是他更改固件后的读数。

    他说它会"在电压变为-ve时转储寄存器值。 在正常情况下,它还会转储总线电压寄存器值。"

    e2e.ti.com/.../wattmetertest.txt

    当我把电源设置为16.5V时,它变为负电

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

    您好Ryan:

    我已经弄清楚了问题是什么。  

    问题是,正在使用的代码将读取值视为16位2的补码编号,但需要将值直接转换为,而不使用2的补码。  我注意到这是因为在得到负数时总线的“原始”值是“0xFFFF8112”,但这是一个32位数,而我们只使用16位数。  固件看到16位数的第一位是1,将其视为负数,然后将其转换为32位数(保持负数)。 但是,由于这些不是2的补码数字,它应该只在前面加上0就将其转换为32位数字,而只剩下0x8112 (转换为16.52V)。  因此,您将看到大于16.38V的任何总线寄存器读取的“负数”。   

    解决方案是查找总线电压寄存器中读取的代码,并确保不将其视为16位2的补码(或签名)编号。 在许多程序语言中,这就像将数据类型更改为 "未签名"一样简单,例如使用"uint16_t"而不是"Int16_t"。

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

    谢谢Mitch!

    我会让我们的固件工程师进行此更改,并报告结果。

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

    好的,听起来不错!

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

    再次感谢Mitch,这解决了问题。 非常感谢!