原理图
其中Rx1,Rx2,Rx3表示PT100三线的电阻,阻值相等Rx
PT100阻值Rp
计算思路
1、设流过Rx1上电流I1,流过Rx2上电流I2
I1 = (2V5REF-U1)/2000;
I2 = (2V5REF-U2)/2000;
2、根据I1,I2的值计算出Rx的值
Rx = (Vref-I2*2100)/(I1+2*I2);
3、根据Rx的值以及U1计算出Rp的值
Rp = (Vref-I1*2000-(2*I1+I2)*Rx)/I1;
4、得到PT100的阻值之后查表法计算温度
5、根据公式推导温度值
/计算温度/
float Cal(float Rt) {
float T;
T = 9E-10f * Rt * Rt * Rt * Rt + 4E-07f * Rt * Rt * Rt + 0.0008f * Rt * Rt + 2.3828f * Rt - 246.81f;
return T;
}
仿真计算
测试代码
#include <stdio.h>
#define Vref 2.5
float CalCurrent(float Voltage)
{
return (Vref-Voltage)/2000;
}
float CalRx(float Cur1,float Cur2)
{
return (Vref-Cur2*2100)/(Cur1+2*Cur2);
}
float CalR(float Cur1,float Cur2)
{
return (Vref-Cur1*2000-((Vref-Cur2*2100)/(Cur1+2*Cur2))*(2*Cur1+Cur2))/Cur1;
}
int main() {
float I1 = 0,I2 = 0,Rx = 0,R = 0;
I1 = CalCurrent(0.128086);
I2 = CalCurrent(0.125829);
Rx = CalRx(I1,I2);
R = CalR(I1,I2);
printf("Rx = %f\t\n",Rx);
printf("R = %f",R);
}
项目实战
设计思路
在原理部分,我们需要一个2.5V的电压来提供电压参考,用于后续计算出两条线路上的电流,但单独提供一个基准参考电压会徒增成本,考虑到MCU供电电源(3.3V)已经存在,理论上3.3V计算也是一样的,只需要保证这个3.3V稳定就行,或者直接将3.3V作为ADC转换时的参考电平,由于是纯电阻网络,这样不管3.3V是否稳定,只要电路中用于计算电流值的电阻稳定,计算出来的PT100阻值都是不变的(和前面提到的电阻成比例关系,这里计算出来的精度与电阻精度正相关)
ADS1220
ADS1220 集成PGA 和基准的4通道、2kSPS、低功耗、24位ADC
我们将施加在电阻网络的电压直接接入ADS1220的参考REF引脚
系统整体原理图
文章附带的资源为一个8通道的PT100采集电路,由于设计的时候没有注意ADS1220单端放大最多只能放大4倍,所以精度上还可以改进,参考设计时可以将ADS1220模拟输入引脚其中一个引脚接PT_0V,其余引脚重新分配,做16倍的差分放大,增加计算精度