将 24 位 2 的补充(MSB 优先)值转换为电压

Convert 24 bit 2's Compliment (MSB first) value to a voltage

本文关键字:优先 转换 电压 MSB      更新时间:2023-10-16

我有一个ADC(AD7767),用于测量差分信号。来自ADC的数据是2的互补MSB第一个24位值。我想把这个值转换成电压。所使用的参考电压为5伏。我使用的是Arduino IDE。到目前为止,我基本上是这样的:

const long minValue = 0x800000;
const long maxValue = 0x7FFFFF;
signed long result = 0;
....
long voltage = (result * 0x5) / maxValue;
Serial.println(voltage);

这将打印值0。

价值是什么:

result = 1010101101010101

0x5:aka Vref

(result * 0x5) = 110101100010101001
(result * 0x5) / maxValue = 0

Yu正试图将一个分数存储到一个long中。结果将始终为零。您需要将其中一个操作数强制转换为double,并将结果存储在double中。

问题出在您使用的long类型中。它是整数1,当结果小于1时,结果为0。使用浮点数:

(结果*0x5)=110101100010101001=219305

最大值=0x7FFFFF=8388607

结果=219305/8388607=0.026[伏特]