微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1248读取的ADC值波动很大

ADS1248读取的ADC值波动很大

时间:10-02 整理:3721RD 点击:

使用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之间的参考电压不稳定,增大电容后,解决了~~

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top