分享

K,J,R,S,B,E,T,N型热电偶,PT100,cu50热电阻拟合参数方程,以及冷端补偿方程,及其pid参数 (amoBBS 阿莫电子论坛)

 ZLM_图书馆 2014-07-07
 //由于要在16K的单片机里面存储8种热电偶,加两种热电阻的分度表。所以只能采用函数拟合方式。由于3次拟合精度不够,分段的话也会导致数据庞大,就拟合成5阶了。pt100,cu50热电阻线性是比较好的,完全可以不用拟合成5阶,但是为了统一处理,都拟合成5阶了
float code TC_Atab[11]={-7.5997e-7,9.6322e-8,4.8472e-4,7.3225e-4,2.4515e-3,1.3651e-7,9.9154e-5,2.8055e-6,-1.2878e-11,-1.0896e-9,205.65};
                //        K          J           R          S              B             E              T                N        Pt100        cu50,         B<600
float code TC_Btab[11]={1.0905e-4,8.7504e-6,-2.8158e-2,-3.6447e-2,-0.11385,-3.3295e-5,-4.9932e-3,-4.1148e-4,1.5932e-8,3.2617e-7,-1037.8};
                //        K         J         R             S              B               E                    T        N,         Pt100        cu50 0    B<600
float code TC_Ctab[11]={-3.9325e-3,2.0766e-3,0.65866,0.73075,2.2226,3.3864e-3,9.3174e-2,2.4892e-2,-6.1794e-6,-6.751e-5,1970.3};
                //        K        J          R         S        B        E          T        N,         Pt100          cu50    B<600
float code TC_Dtab[11]={0.017394,0.062995,-8.4431,-8.1816,-23.776,-0.17164,-0.98715,-0.76438,2.1231e-3,7.6826e-3,-1796};
                //        K        J        R       S              B             E              T              N,            Pt100             cu50    B<600
float code TC_Etab[11]={24.75,17.726,136.69,140.41,228.37,16.637,25.774,37.309,2.2614,4.2719,1047};
                //    K             J           R         S      B              E           T         N    Pt100  cu50   B<600
float code TC_Ftab[11]={-0.55944,3.457,11.693,9.6808,256.77,0.6252,1.3639,1.2499,-242.75,-226.06,60.546};
                 //      K                J              R           S        B       E              T      N,        Pt100   cu50     B<600
//由于B型热电偶函数特殊,非线性很大,拟合分为了两段,小于600摄氏度一段,大于600摄氏度一段
//--------------------------------------------------------------------------------------------------------------------------
float code TCt_vA[8]={1.75e-5,2.5e-5,1.1786e-5,1.0893e-5,5.0714e-6,4.5179e-5,4.1607e-5,1.8214e-5};//温度补偿方程
                //    K              J              R              S               B        E                 T       N       
float code TCt_vB[8]={0.039574,0.05045,5.3364e-3,5.4411e-3,-1.8929e-4,0.058678,0.038611,0.025889};
                //    K              J              R              S               B        E                 T       N       
float code TCt_vC[8]={-2.1429e-4,-2.0125e-16,-2.1429e-4,-1.7859e-4,-0.00066,-3.5714e-5,0.00025,7.1429e-5};
                //    K               J                   R              S               B        E                 T       N

float TCRTD(float res,unsigned char type)
/*热电偶与热电偶温度转换函数,输入:res(热电偶电压:单位mv或者热点阻电阻值:单位欧姆),type(输入0-9分别对应KJRSBETNPt100Cu50,10对应B型热电偶小于600摄氏度的方程),输出:当前温度;*/
{
        return (TC_Atab[type]*res*res*res*res*res+TC_Btab[type]*res*res*res*res+TC_Ctab[type]*res*res*res+TC_Dtab[type]*res*res+TC_Etab[type]*res+TC_Ftab[type]);
}
       
float TCt_v(float t,unsigned char type)
//热电偶的冷端补偿方程,输入为t(热电偶冷端温度),type(输入0-7分别对应热电偶KJRSBETN)
{
        return (TCt_vA[type]*t*t+TCt_vB[type]*t+TCt_vC[type]);
}
以上两个方程就是温度转换方程和冷端补偿的方程;
/***************************************************************************************************************************************/
/***************************************************************************************************************************************/
下面针对pid参数的调试做了一下实验:
温度采集采用pt100,通过vf转换得到电阻代入方程求得温度。
采用可控硅移相触发。交流过零检测送外部中断0,提供相位同步,一秒钟触发一次。把正弦波一个周期20ms分为两个50等分的时间,移相触发(不是采用的50等分的等功率移相触发,等功率移相触发要复杂很多,还要查表,所以没做)。AD采样时间162ms,pid计算周期3s。pid输出为0-999,对应可控硅移相0-50等份来控制。
可控硅控制的是一个75W的电烙铁来加热一个铁块。
采用积分分离pid位式算法,pid控制代码:
void pid()
{
         error0=sv_temp-temperature;        //当前误差
        if(error0<30&&error0>-30)//积分,以及积分分离
        {
                errorsum+=error0;  //积分
                Ki=3*(pid_P/(float)pid_I);
        }
        else
         {
            Ki=0;
             errorsum=0;
          }
        pidout=pid_P*error0+Ki*errorsum+pid_P*(pid_D/3)*(error0-error1);
         error1=error0;
        if(pidout>999)
                pidout=999;
        else
                if(pidout<0)
                        pidout=0;
}
调试pid参数,首先屏蔽Ki和Kd只剩下Kp,调试系统,使系统输出一个等幅振荡。
Kp=15时;

Kp为15时的温度曲线 (原文件名:P15.png)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多