您好!
我在将24位二进制补码数据转换为模拟(电压)值时遇到问题。
我首先使用下一个函数将二进制补码转换为十进制值:
int32_t _binTwosCommentToSignedDecimal (uint32_t 数据、int 有效位)
{
int32_t power = 1;//pow (2、有效位-1);
int32_t sum = 0;
int i;
int data_bit;
uint32_t temp_data = 0;
uint32_t MSB_BIT = 1<<(有效位-1);
//位反转:1000 0111 --> 1110 0001
(i=0;<significantBits; ++i)
{
temp_data = temp_data +((data<>(有效位1-I));
如果(i!=0)功率= POWER*2;//pow (2、有效位-1);
}
(i=0;<significantBits; ++i)
{
DATA_BIT =(TEMP_DATA &(1< >I;
如果(i=0 && data_bit!=0)
{
SUM = POWER *-1;
}
其他
{
sum +=(data_bit-0)* power;//the -0 is needed
}
功率/= 2;
}
回款总额;
}
然后、使用 ADS1299数据表 9.5.1数据格式中提供的一个代码(LSB)的大小、我打算将这个十进制值转换为电压:
电压= DecimalValue x (2 x Vref /增益)/(2^24)
其中:
增益= 24 (在 CHnSET 寄存器中记录的增益)
VREF = 4.5V (我正在使用内部基准、CONFIG3寄存器中的 NPD_REFBUF 域)
我使用已知阻抗中的 Keithley 电流源生成已知信号。
当我将信号转换为电压时、结果是预期结果的两倍。 当我转换删除 LSB 大小公式中的2x 时、结果是正确的。
使用内部测试信号和使用短路输入配置测量噪声时、问题也是如此。 在这两种情况下、转换后的信号都比预期的信号高两倍。
您能帮我确定我在转换中遇到的问题吗? 还是数据表中有任何错误?
此致、
Inigo