This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS1247: 使用ADS1247测温,有恒定误差,多次复位后偶发性正常

Part Number: ADS1247
Other Parts Discussed in Thread: ADS1248

您好,我使用四线制PT100测温,使用芯片ADS1247,使用100Ω标准电阻模拟PT100接入看测温是否准确,设置的恒流源电流为500uA,PGA增益为8,已经计算过共模输入范围是符合的,出现的问题是,有一个2.5℃恒定误差,多次复位会偶尔正常,复位20次左右会有一次正常值。

正常值是多次复位偶尔可以得到一次,表格中是正常值与异常值对比,复位采取对板卡断电又上电,后面我又尝试了只使用RESET引脚复位,还是同样的情况。

使用示波器看波形:波形完全正常

原理图和代码附上:

void task_ads1248_Reset()
{
RESET_OPEN();//复位拉低
Delay_ms(20);
RESET_CLOSE();//复位拉高
Delay_ms(20);


Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_IDAC0, 0x04); /* 设置恒流源IDACs的输出电流 *///0000 0100 电流为500微安
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_SYS0, 0x31);//0011 0001 系统控制寄存器,PGA增益为8,ADC的输出数据率为10SPS
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_MUX1, 0x20);//0010 0000 内部电压总是启动,REF0
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_IDAC1,0xf0);//0000 0000 恒流源输出通道,选择通道0
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_MUX0,0x11); //0001 0001 通道选择,Pos:AIN2 Neg:AIN1
}

float Get_adsTemp()//得到当前温度值
{
static u8 Flag = 0;
int32_t adc_raw;/* -8388608 至 8388607 *///2的23次方
float value_of_res; /* 阻值 */
// DRDY数据转换完成标志
if(ADS1248_DRDY_Flag == 1)
{


ADS1248_DRDY_Flag = 0;
adc_raw = Dev_Ads1248_Read_Data(); // read the value from the selected channel
printf("adc_raw:%x\r\n",adc_raw);
value_of_res=(float)adc_raw/8388608.f*2000.f/8.f;//参考电阻为2000Ω,PGA增益为8
printf("value_of_res:%f\r\n",value_of_res);
Temp=TEMP_ADS1248(value_of_res);
printf("Temp:%f\r\n",Temp);

}
return Temp;
}

  • 您好,

    您使用的100Ω电阻精度是多少?如果是1%精度的电阻,正好有大概1Ω的误差,会不会是100Ω电阻本身存在的误差造成的?

    所使用的100Ω电阻温漂参数是怎样的?一上电测量就有2.5℃的误差吗?有没有可能是电阻发热电阻阻值发生变化造成的?因为您描述“复位20次左右会有一次正常值”,我再想是不是复位20次,100Ω的电阻的温度就降下来了,所以会正常一次,随着恒定电流的持续通过,电阻再次发热变的不准确?

  • 您好,我们使用的100Ω电阻精度是5‰,我们是在使用过程中发现的问题,新一批的ADS1247芯片上电就有大概率产生这个误差,现在拿100Ω电阻进行测试,有时候一上电是正常,复位会有误差,我们也测试过只对ads1247芯片进行拉高拉低RESET引脚这种方式进行复位,效果是相同的,“复位20次左右会有一次正常值”这个有时也会多次复位全部都是正常值,但是多次复位是误差值的概率更大,20次是一个比较随机的数字。在使用过程中我们是用的PT100,误差值出现的概率和现在测试是相当的。我想我没有描述清楚一个关键点,如果某次复位之后是正常值,则测量值一直都是正常值,可以正常进行长时间连续测温;如果某次复位之后是异常值,则测量值一直都存在这个固定的误差;我们认为和100Ω电阻的本身误差无关。

  • 并且我们使用同一批ADS1247芯片,全部都会有2-5℃之间的误差,提问中是选择了一片的数据,偶然发现多次复位偶发性数据正常,所以进行了多次测试。

  • 复位后应该有寄存器配置,每次复位寄存器配置后您是否回读所有的寄存器值,看是否一样?

    另外,您是否执行了校准操作?

  • 每次复位后回读查看过所有15个寄存器的值,正常与异常时值完全一样,现在的代码是未执行校准,尝试过进行校准,校准时的现象和未校准相同,同样出现偶发性正常;在读数正常与异常时,我们都进行测量,使用6位半测量基准电阻两端电压正常,RTD两端电压正常,通过电压比值计算出来的RTD电阻值也为100Ω。

  • 我想向您确认下,每个芯片的误差是固定的是吗?同一批ADS1247芯片的误差范围在2-5℃之间?我想知道2-5℃换算为电阻是多少?或者说对应的输出Output Code是多少?我再考虑是否可能是ADC的输入失调误差等参数造成的。

    输出肯定会存在误差的,因为ADC有一些精度参数会引入误差,比如 输入失调电压、温漂、INL、CMRR、PSRR等。

  • 是的,每个芯片的误差是固定的,换算成电阻误差阻值为0.8~2.3Ω,比如我在上面测试的数据,理论值Output Code=333333(十六进制),实际测量正常值:333673(十六进制),实际测量异常值:33b2ae(十六进制)。

    有恒定误差其实倒也不是大问题,我们可以进行校准,关键问题是某次复位之后芯片又正常,这给使用带来了很大的困扰。

    另外在芯片正常值与异常值时使用6位半实际测量RTD(100Ω)两端电压为49.969mV,参考电阻2K两端电压为1.000V,内部恒流源选择500uA,计算实际值被测电阻为99.849Ω,所以我们认为问题出现在芯片的使用过程或者芯片本身问题。

  • 您是使用的类似下面参考设计中的比率测量是吗? 如果是这样的话,输出code仅与 增益、RTD和REF有关,如果这三个参数复位前后没有变化的话,唯一可以考虑的就是在读出输出code时DOUT线上有干扰,您可以抓取读取异常时SPI输出波形吗?看上面是否有异常?

    https://www.ti.com.cn/cn/lit/an/sbaa336a/sbaa336a.pdf

    另外,复位前后供电电压的纹波质量是否有改变?

    也建议您确认下所使用 ADS1247的购货渠道,最终来源是否为TI?

  • 是的,采用的是您给出的比例式测量,DOUT的波形在上面的图片中有给出,正常与异常的SPI输出波形都有给出,DOUT波形都正常,复位前后我们使用6位半测量的供电电压,前后值都相同,电压的波形没有变化,购货渠道最终来源是TI

  • 您好,可以详细介绍一下芯片的校准过程么,是否为直接发送三条校准指令0x60,0x61,0x62后再配置寄存器,我从论坛上翻阅了许多帖子,也没有找到比较靠谱的结论。另外,我们新测试了5片芯片,其中4块与上面我提出的问题是相同的,其中一片,多次复位也不会出现正常情况,一直有0.9Ω的恒定误差。希望您能提供一下芯片具体的校准过程

  • 复位前后我们使用6位半测量的供电电压,前后值都相同,

    万用表测量的是有效值,建议您使用示波器测量纹波。

    在读数正常与异常时,我们都进行测量,使用6位半测量基准电阻两端电压正常,RTD两端电压正常,

    也建议您使用示波器测量基准电阻和RTD电阻两端电压,再对比下正常与异常时电压波形是否一样?注意测量ADC管脚处的电压。

    33b2ae(十六进制)减去333333(十六进制)=32635(十进制)

    1LSB=1/GAIN/2^23=1/8/2^23

    1LSB*32635=486.3uV,这个误差还不是特别的大。我看了ADS1247的DC精度参数,只有增益误差大一些,但是也没有给出10SPS、PGA=8下的增益误差。另外,同一芯片的DC精度参数复位前后也不应该改变。如果基准电阻和RTD电阻两端电压无异常,那只能考虑是供电电压纹波有变化的问题。

  • SYSOCAL和 SYSGCAL 校准,需提前将输入置入合适的范围:

    另外,我们新测试了5片芯片,其中4块与上面我提出的问题是相同的,其中一片,多次复位也不会出现正常情况,一直有0.9Ω的恒定误差。

    这样看来像是芯片的问题。

  • 您好,我们用示波器测试了芯片所有引脚的电压波形,在测量VREFOUT时,发现波纹,经过排查发现VREFOUT外接的滤波电容值不在数据手册的范围内,电容值必须在1uf~47uf之间,我们采用的是100nf,导致内部基准电压有噪声,我们推测内部基准电压的噪声会导致恒流源的输出不稳定导致误差,不知道是不是这样的问题。我们更换了电容,目前问题已经解决,非常感谢您在解决问题时提供的思路,这个电容问题还请分析一下是不是我们推测的这样。

  • 我们推测内部基准电压的噪声会导致恒流源的输出不稳定导致误差,不知道是不是这样的问题。

    如果您使用比率测量的话,按理说那输出code就与恒流源无关。但现在是内部基准电压仅与恒流源有关,那只能考虑是恒流源的纹波在模拟输入端产生了差分干扰,导致输出code误差偏大。

  • 非常感谢在故障排查过程中提供的思路