zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

     

  • 相关阅读:
    交互题
    线段树
    最小生成树
    拓扑排序
    欧拉回路
    RMQ问题
    dfs序与求子树子节点(染了色)的个数
    dp题
    树状数组与离散化
    没做完的题
  • 原文地址:https://www.cnblogs.com/prayer521/p/4515528.html
Copyright © 2011-2022 走看看