最近使用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