温度控制的PID算法程序如何编写

2024-05-15 11:54:41
温度控制的PID算法程序如何编写,在线求解答
写回答

最佳答案

IDpara.d_mode = LCPID_D_MODE_E ;

微分模式:对偏差值进行微分计算(标准PID控制);

计算模式:精确(所有计算为双精度浮点型, 如无舍入错误和CPU计算次数过长)(一般选次方式)PIDpara FUB LCPIDpara() ;

调用PID参数功能块循环程序中程序如下,此程序只对P、I、D三个参数由变量进行输值,变量可在pid程序运行中实时修改,如果大家还需要某些参数实时修改,方法相同:(* cyclic program *)PIDpara.。

2024-05-15 11:54:41
赞 1399踩 0

全部回答(2)

#include<stdlib.h>

#include

"global_varible.h

"

voidPID_Math(void)

{

signedlongee1;//偏差一阶

//signedlongee2;//偏差二阶

signedlongd_out;//积分输出

if(!Flag_PID_T_OK)

return;

Flag_PID_T_OK=0;

Temp_Set=3700;//温度控制设定值37.00度

PID_e0=Temp_Set-Temp_Now;//本次偏差

ee1=PID_e0-PID_e1;//计算一阶偏差

//ee2=PID_e0-2*PID_e1+PID_e2;//计算二阶偏差

if(ee1>500)//一阶偏差的限制范围

ee1=500;

if(ee1<-500)

ee1=-500;

PID_e_SUM+=PID_e0;//偏差之和

if(PID_e_SUM>200)//积分最多累计的温差

PID_e_SUM=200;

if(PID_e_SUM<-200)

PID_e_SUM=-200;

PID_Out=PID_kp*PID_e0+PID_kd*ee1;//计算PID比例和微分输出

if(abs(PID_e0)<200)//如果温度相差小于1.5度则计入PID积分输出

{

if(abs(PID_e0)>100)//如果温度相差大于1度时积分累计限制

{

if(PID_e_SUM>100)

PID_e_SUM=100;

if(PID_e_SUM<-100)

PID_e_SUM=-100;

}

d_out=PID_ki*PID_e_SUM;//积分输出

if(PID_e0<-5)//当前温度高于设定温度0.5度时积分累计限制

{

if(PID_e_SUM>150)

PID_e_SUM=150;

if(PID_e_SUM>0)//当前温度高于设定温度0.5度时削弱积分正输出

d_out>>=1;

}

PID_Out+=d_out;//PID比例,积分和微分输出

}

else

PID_e_SUM=0;

PID_Out/=100;//恢复被PID_Out系数放大的倍数

if(PID_Out>200)

PID_Out=200;

if(PID_Out<0)

PID_Out=0;

if(PID_e0>300)//当前温度比设定温度低3度则全速加热

PID_Out=200;

if(PID_e0<-20)//当前温度高于设定温度0.2度则关闭加热

PID_Out=0;

Hot_T_Run=PID_Out;//加热时间控制输出

PID_e2=PID_e1;//保存上次偏差

PID_e1=PID_e0;//保存当前偏差

}

////////////////////////////////////////////////////////////voidPID_Math()end.

2024-05-15 11:54:41
赞 448踩 0