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; }