ADS1247使用三线制PT100,测温精度以及AD校准问题
最近使用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 |
我的芯片没有做校准.
校准只是一个方面,可能也无法根本的解决你的问题,我认为还要做标定,使用标准电阻箱对电路做标定,你会发现,你的测量值和标准温度不在一条直线上,会有偏移和斜率差,需要进行修正的