ADS1248读取的ADC值波动很大
使用STM32F103的SPI3与ADS1248通讯,可以下发、读取寄存器的值。
但是连接上四线制温度传感器后,采用Burnout Current source检测温度传感器的是否连接,读取ADC的数值跳变、甚至出现负值。
将MUX1设置为0x37,使用内部时钟、使用内部参考源、参考源一直开启、system monitor选择DVDD测量,然后调用读取ADC值的函数,得到的仍然是0x7FFFFF;之后把system monitor选择为AVDD、temperature diode,读取的ADC值依然是0x7FFFFF。
硬件电路之间的连接是参照TI官方文档上的接线图,万用表测量没有断路。
读取寄存器的函数为:
u8 ADS1248_ReadREG(u8 regName, u8 byteToRead)
{
SPI3_ReadWriteByte(ADS_RREG | regName);
if(byteToRead == 1)
{
SPI3_ReadWriteByte(0x00);
}
else if(byteToRead == 2)
{
SPI3_ReadWriteByte(0x01);
SPI3_ReadWriteByte(0xFF);
}
return SPI3_ReadWriteByte(0xFF);
}
读取ADC值的函数为
s32 ADS1248_ReadADC(void)
{
u8 temp[3];
s32 adcVal = 0;
while(ADS1248_READY_PIN()) //DRDY引脚高电平表示数据没准备好
{
}
SPI3_ReadWriteByte(ADS_RDATA);
temp[0] = SPI3_ReadWriteByte(0xFF);
temp[1] = SPI3_ReadWriteByte(0xFF);
temp[2] = SPI3_ReadWriteByte(0xFF);
adcVal = (s32)(temp[0] << 24) + (temp[1] << 16) + (temp[2] << 8); // 左移8位,放大256倍识别正负号
return (adcVal >> 8); // 右移8位恢复原值
}
希望各位大神可以指点迷津!
读取的ADC值依然是0x7FFFFF。 是代表 ADC 模拟通道信号超出最大允许范围了, 检查一下信号吧
谢谢各位,原因已经找到,是VREFout与VREFCOM之间的参考电压不稳定,增大电容后,解决了~~
谢谢您的回复,原因已经找到