TI中文支持网
TI专业的中文技术问题搜集分享网站

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位恢复原值
}
希望各位大神可以指点迷津!!
user151383853:

读取的ADC值依然是0x7FFFFF。 是代表 ADC 模拟通道信号超出最大允许范围了, 检查一下信号吧

Wei Sun5:

回复 user151383853:

谢谢您的回复,原因已经找到

赞(0)
未经允许不得转载:TI中文支持网 » ADS1248读取的ADC值波动很大
分享到: 更多 (0)