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使用三线制PT100,测温精度以及AD校准问题

Other Parts Discussed in Thread: ADS1247, MSP430G2553, ADS1232

最近使用ADS1247做PT100温度检测,设计测温范围为-20~220左右

电流源选取250uA,Rbias=3K,则参考电压为1.5V,Rcomp=140Ω

做好程序以后,读取的温度误差很大,比正常温度高5度,每次上电对AD进行校准,下面是图纸以及程序,请问不准的原因是什么

void ADS_Init(void)
{
WriteReg_S((Reg_MUX0 | 0x40) , 0x00 , 0x01); //MUX0初始化 BSC_OFF,AIN0,AIN1默认
WriteReg_S(Reg_VBias | 0x40 , 0x00 , 0x00); //BIAS_OFF
WriteReg_S(Reg_MUX1 | 0x40 , 0x00 , 0x20); //0x30 //
WriteReg_S(Reg_SYS0 | 0x40 , 0x00 ,0x70); //0x77
WriteReg_S(Reg_IDAC0 | 0x40 , 0x00 , 0x0B);
WriteReg_S(Reg_IDAC1 | 0x40 , 0x00 , 0x01);
}

void ADS1247_Calibrate(unsigned char Gain)
{
WriteReg_S(Reg_SYS0 | 0x40 , 0x00 ,0x70); //设置校准增益 G=128

WriteReg_S(Reg_MUX1 | 0x40 , 0x00 , 0x20); //正常模式
ADS_WriteByte(SELFOCAL); //系统偏移自校准
WaiteRDY(); //等待校准完成

WriteReg_S(Reg_MUX1 | 0x40 , 0x00 , 0x21); //设置AINP+AINN=(AVDD+AVSS)/2
ADS_WriteByte(SYSOCAL); //系统偏移自校准
WaiteRDY();

WriteReg_S(Reg_MUX1 | 0x40 , 0x00 , 0x22); //设置AINP=VREF+,AINN=VREF-; for gain calibration
ADS_WriteByte(SYSGCAL); //系统增益校准
WaiteRDY();

}

float Get_Tempture(signed long AD_Value) //计算温度值
{
float Temp = 0;
float AD_Temp = AD_Value;
float AD_Vl = 0;
float IN_Vl = 0;
float RRTD = 0;

if(AD_Temp > 0x7FFFFF)
{
AD_Temp -= 0xFFFFFF;
}

AD_Temp *= 1.5;
AD_Vl = AD_Temp / 0x7FFFFF;
IN_Vl = AD_Vl / 128;
RRTD =140 + IN_Vl * 4000;

Temp = (RRTD -100)/0.396847;

return(Temp);
}

温度计指示室温30度   但是我测出来的 37度,请问技术 啥原因啊  我是怎么也想不明白了,求真相

万用表实测PT100的1.2端电压27.5mV,R10电压34mV,R15两端电压1.4775V

随机看了一下校准值:OFC = FFFC9D   FSC = 3FFE40

  • Hi

      测试的准确度主要包括两个方面:

      1.PT100温度与ADC模拟输入的对应关系。

      2. ADC模拟输入与数字输入对应的准度关系。

      建议你先确认一下ADC的有效位大约是多少?

  • Hi

       另外建议你确认一下Vrefout的电压时多少?

        按照你R15的测量是1.477V,  按照你的电路,采用内部参考电压,REF0参考电压应该是2.048V, 而不是1.477V.

  • 楼主,转换的线性度怎么样

  • 参考源应该是(250uA+250uA)*3K = 1.5V吧

    开了内部参考应该是给电流源供电的吧

  • PT100的温度对应 就是-20~220 对应AD数据-7FFFFF~7FFFFF

    模数对应问题,系统校准应该能解决这个吧,虽然我校准完后感觉还是不是特别好

    转换的时候  我发现AD结果后12位在不停的变化  难道说明我AD有效位数就是24-12 = 12位?

  • 我还没考察呢  

  • VREFOUT电压是2.048V  这代表什么???

  • Hi

       如果稳定状态下,转换同一电压得到的结果后面12位在不停的变化, 意味着你的有效位只有12位(24-12)这个是偏低的。

      

  • 我这个电路原理基本就是按照sbaa180.pdf来做的

    程序是自己写的,转换结果低温高温都可以测,就是不准有偏差

    不知道你们有没有成熟的example,或者帮我完善一下我这个工程   做好了我贡献出来做example 

    我使用MSP430G2553来取得转换结果的  然后通过串口发送给PC机

  • Hi

       我误会了。

        偏置电阻利用IDAC的电流输出得到基准电压给到ADC, 所以按照250uA+250uA)*3K = 1.5V 是对的。

        在这里3k的电阻需要选择高精度(0.1%),温飘极小的电阻。 (按照你1.477V的测试,精度在1.5%,这个是偏大的,一般ADC的参考电压精度都是0.1%,但是这里的精度损失是来自于DAC电流源的精度)

        参考电压源对于ADC转换精度的影响是很大的, 或者你可以参考以下文章:RTD方案中RC滤波器的应用

        http://www.ti.com.cn/cn/lit/an/sbaa201/sbaa201.pdf

     

  • Hi
      另外要注意的AD板子上数模隔离的问题。(包括电源,从你的电路看中间有增加一个磁珠,建议改成用CLC的滤波器)
      以及供电电源尽量使用低noise的稳定电源。

  • 我的电阻选用的是0.1%的低温漂电阻,25ppm的

    精度的损失应该是250uA的电流源不准

    请问从我的图纸上看 还有AD的初始化、AD校准、温度计算这几个地方有没有明显的不对的地方

    我觉得即使参考源影响再大,也不会偏差到5~7℃这样子所以我觉得还是可能程序有问题

    谢谢Johnsin

  • HI

       一般而言不是程序的影响,只要位数上没有问题就可以了。 其中最大的重点也就是校正。

        问题容易出现在硬件上面,主要是noise(主要是要求数模隔离,信号端点接GND Plane等),基准电压精度(也需要极低的noise),  在就是供电方面(也需要降低的noise).

        参考电压的精度损失应该可以算的,另外你有做offset, 满刻度校正,转换的精度也应该相应的有所提高的,只做到12位是偏低的。

  • 做平均可以吧,做个先进先出的堆栈,10次转换结果做平均,这样是不是能相对提高其精度

  • Hi

        是应该会高一些,印象中TI的ADS1232称重的方案中就应用的这种方式。

        不过仍然建议按照我之前提议的方向,从硬件上着手。

  • Hi

       按照你现在的设计:PGA=128,  Vref=1.5V,   模拟输入范围是3/128=23mV(满量程), 事实上只能是正差分输入,所以量程减半将是11.5mV,  假设为10mV的满量程(PT100), 按照12位的有效位,最小分辨率将是10mV/2^12=2.5uV.   (这个举例中不考虑你设计中R10/R11的设计), 主要说明noise的影响。

       当可测试温度量程位-20~220℃, 满量程240℃, 最小分辨率将是240/2^12=0.06℃

       此时假设模拟输入电压的noise位100uV(并不大), 那么可能造成的温度测试影响将是100/2.5*0.06=2.4℃.

       可见模拟输入noise对温度测量的准确度影响很大。

       在TI的参考设计中, 在模拟输入的前端有增加2个小电阻,这个有消除noise的作用,建议增加。关于nosie的测量,如果有条件你也可以测试看看。

  • Hi

       对于参考电压,按照上述的参数,假设提升到3V,  模拟输入的分别率将是5uV.

       同样100uV的noise影响,将造成温度的差异将是100/5uV*0.06=1.2℃.

       可见提供参考电压,niose对测量的温度的精度是会有所帮组的。

  • Hi

       参考电压的准度的影响。(按照12位的有效位)

       建设参考电压时1.5V,  实际1.477V, 相差23mV.

       模拟输入时6mV,  1.5V参考电压应的数字输出时2^32/1000,  如果是1.477V, 对应的数字输出将是2^32/1000*(1.5/1.477), 实际数字输出的差异66881

       对应电压的差异就是240/2^24*66881=3.8℃ 

      可见参考电压的精度也是有影响的。

  • Hi

      参考电压noise的影响,假设参考电压的noise是100uV

      模拟输入时6mV,  1.5V参考电压应的数字输出时2^32/1000,  假设输入时1.5001, 那么对应数字输出的差异就是2^32/1000(1.5/1.5001),数字差异是286.

      对应电压的差异就是240/2^24*286=0.06℃ ,

      所以看起来参考电压noise不大的话,影响比较大的将是有效位。

  • Hi

       有效位的差异。

      温度分辨率,240/2^12=0.06℃,   14位有效位时将是0.06/4=0.0015℃.  测试会更加准确。

       所以也建议按照之前提议,尽量改善有效位,12位有效位是偏低的。

      

     

  • Hi Johnsin

    测试了一下噪声,确实很大,电源和参考源,模拟输入噪声都不是很理想

    明天解决一下噪声问题,再看看转换结果会不会有明显改善

    谢谢你的建议,很感谢,我会及时反馈测试结果

  • Hi

       不客气,上述我的计算或者存在不准确的地方,但是其目的只是为了证明AD/DC转换中噪声的严重影响,同时也是常见的ADC转换精度不理想的重要原因。

  • 我觉得问题在你使用的补偿电阻上面,不知道你的140欧姆是不是也是0.1%,如果是140*(+/-0.1%)=+/-0.14欧姆,对应的温度偏差为+/-0.35摄氏度,但如果你使用的是1%的电阻,则偏差将放大10倍,对应的温度偏差为+/-3.5摄氏度

  • 你说的很对,就是它的问题,买的时候 标称是140R 0.1%,但是给我的东西有问题

  • 呵呵,我也正在调试PT100,不知道你现在测温的准确度怎么样,我测试了3块板,每块板的温度都不一样,相差1度了.

    1#

    2#

    4#

    30.7-30.8

    30.2-30.3

    31.1-31.3

    我的芯片没有做校准.

  • 校准只是一个方面,可能也无法根本的解决你的问题,我认为还要做标定,使用标准电阻箱对电路做标定,你会发现,你的测量值和标准温度不在一条直线上,会有偏移和斜率差,需要进行修正的

     

  • 请问楼主,你的温度计算公式是如何得来的?RRTD =140 + IN_Vl * 4000中的4000代表什么?
  • 请问楼主,你的温度计算公式是如何得来的?RRTD =140 + IN_Vl * 4000中的4000代表什么?
x 出现错误。请重试或与管理员联系。