全站数据
8 4 2 0 5 8 1

pic单片机pid控制算法参数整定

建筑帮 | 简单学习,快乐成才!         
问题更新日期:2024-10-26 07:10:29

问题描述

pic单片机pid控制算法参数整定希望能解答下
精选答案
最佳答案

我这有51的

#include

#include

"global_varible.h

"

void PID_Math(void)

{

signed long ee1;//偏差一阶

//signed long ee2;//偏差二阶

signed long d_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

ee1 = -500;

PID_e_SUM += PID_e0;//偏差之和

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

PID_e_SUM = 200;

if(PID_e_SUM

PID_e_SUM = -200;

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

if(abs(PID_e0)

{

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

{

if(PID_e_SUM > 100)

PID_e_SUM = 100;

if(PID_e_SUM

PID_e_SUM = -100;

}

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

if(PID_e0

{

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

PID_Out=0;

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

PID_Out=200;

if(PID_e0

PID_Out=0;

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

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

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

}

////////////////////////////////////////////////////////////void PID_Math() end.