温度控制的PID算法程序如何编写
问题描述
- 精选答案
-
IDpara.d_mode = LCPID_D_MODE_E ;
微分模式:对偏差值进行微分计算(标准PID控制);
计算模式:精确(所有计算为双精度浮点型, 如无舍入错误和CPU计算次数过长)(一般选次方式)PIDpara FUB LCPIDpara() ;
调用PID参数功能块循环程序中程序如下,此程序只对P、I、D三个参数由变量进行输值,变量可在pid程序运行中实时修改,如果大家还需要某些参数实时修改,方法相同:(* cyclic program *)PIDpara.。
- 其他回答
-
#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.
猜你喜欢内容
-
什么龟什么鼈的词语有哪些
什么龟什么鼈的词语有哪些回答数有1条优质答案参考
-
什么龟什么酒的词语有哪些
什么龟什么酒的词语有哪些回答数有1条优质答案参考
-
什么龟什么药的词语有哪些
什么龟什么药的词语有哪些回答数有1条优质答案参考
-
什么龟什么腋的词语有哪些
什么龟什么腋的词语有哪些回答数有1条优质答案参考
-
什么龟什么肠的词语有哪些
什么龟什么肠的词语有哪些回答数有1条优质答案参考
-
什么龟什么紫的词语有哪些
什么龟什么紫的词语有哪些回答数有1条优质答案参考
-
什么龟什么策的词语有哪些
什么龟什么策的词语有哪些回答数有1条优质答案参考
-
什么龟什么木的词语有哪些
什么龟什么木的词语有哪些回答数有1条优质答案参考
-
什么龙什么黻的词语有哪些
什么龙什么黻的词语有哪些回答数有1条优质答案参考
-
什么龙什么鹄的词语有哪些
什么龙什么鹄的词语有哪些回答数有1条优质答案参考