PT100测温函数

PT100电阻值计算过程如下:

理论电压关系为:V3-V1=11(V2-V1).由于电阻等的误差原因,采用实际测量求平均值的方法得出实际放大倍数。

放大电路测量几组数据如下:其中V3-V1=Av(V2-V1)

由数据可知平均倍数AV=11.531。其中R7=118Ω, V1=0.275V.

实际工作时发现,由于运放电源为0-5v,V2-V1的值不能小于0v,否则运放输出电压不正确。根据测量范围-100~100℃,故选取-100℃左右的PT阻值为R7=60Ω,这样就能满足V2-V1恒为正值,此时V1=0.130V。

重新计算可得:RPt= 1000.0/(0.9434-((u-0.130)/28.8275))-1000;

float GetVoltage(BYTE ch)
{
	float v;
	v=GetADCResult(ch)*4.8600/1024;			 //单片机实际工作电压4.86(参考电压)
	return v;
}

float GetPt100(float u)
{
	float RPt;
   
       RPt= 1000.0/(0.9434-((u-0.130)/28.8275))-1000;

	return RPt;
}

  

 

float CalcuTemp()
{
    double  fT , fR , fT0;
    short   i ;
    fR = GetPt100(  GetVoltage(3) );
    fT0 = (fR / 100 - 1) / A ;
    if(fR >= 18.52 && fR < 100) //-200℃- 0℃
    {
        for(i = 0 ; i < 50 ; i ++)
        {
            fT = fT0 + (fR - 100*(1 + A*fT0 + B*fT0*fT0 - 100*C*fT0*fT0*fT0 + C*fT0*fT0*fT0*fT0)) / 
                (100 * (A + 2*B*fT0 - 300*C*fT0*fT0 + 4*C*fT0*fT0*fT0)) ;
            if(fabs(fT - fT0) < 0.001)
                break ;
            else
                fT0 = fT ;
        }
        //l_strT.Format(_T("%.3f") , fT);
    }
    else if(fR >= 100 && fR <= 390.481)  //0℃- 850℃
    {
        for(i = 0 ; i < 50 ; i ++)
        {
            fT = fT0 + (fR - 100*(1 + A*fT0 + B*fT0*fT0)) / (100*(A + 2*B*fT0)) ;
            if(fabs(fT - fT0) < 0.001)
                break ;
            else
                fT0 = fT ;
        }
       // l_strT.Format(_T("%.3f") , fT);
    }  
	return fT;
}

  

 

原文地址:https://www.cnblogs.com/prayer521/p/4515528.html