我们正在调试SEN0291的固件,并且在32V范围内存在缩放问题。
在达到16.4V之前,我们会获得准确的读数,在这种情况下,传感器会提供-1.6319万 mV。
我们已验证在寄存器中选择了32V范围。
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.
我们正在调试SEN0291的固件,并且在32V范围内存在缩放问题。
在达到16.4V之前,我们会获得准确的读数,在这种情况下,传感器会提供-1.6319万 mV。
我们已验证在寄存器中选择了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"。