增量式PID算法Word文档下载推荐.docx
《增量式PID算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《增量式PID算法Word文档下载推荐.docx(6页珍藏版)》请在冰豆网上搜索。
//定义变量
doubleref=0;
//设置参数
doublefeb=0;
//采样反馈intpwm_var=
0;
//PID调整量
Uint16PWM_out=0;
//PWM输出量doubleUo=0;
doubleEk=0;
doubleEi=0;
doubleEd=0;
#defineKp
8
//PID调节的比例常数
#defineTi
0.05
//PID调节的积分常数
#defineTd
0.02
//PID调节的微分时间常数
#defineT
//采样周期#defineKppKp*(1+(T/Ti)
+(Td/T))
#defineKi(-Kp)*(1+(2*
Td/T))
#defineKdKp
*Td/T//#defineKpp4
//#defineKi0.8
//#defineKd20//误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡
#defineEmin3//调整值限幅,防止积分饱和
#defineUmax100
#defineUmin-100//输出值限幅
#definePmax15500
#definePmin200///////////////////////////////////////////////////////////////////
//////
PID运算
///////
voidpid_ctrl(void)
{
Ek=ref-
feb;
//差值运算
if(fabs(Ek)&
lt;
Emin)
//误差的阀值(死区控制?
?
)
{
pwm_var=
}
else
Uo=Kpp*Ek
+Ki*Ei+Kd*Ed;
//PID计算
Ed=
Ei;
Ei=
Ek;
(int)Uo;
//强制转化调整量,PWM为整数
if(pwm_var
&
gt;
=Umax)pwm_var=
Umax;
//调整值限幅,防止积分饱和
=Umin)pwm_var=
Umin;
//调整值限幅,防止积分饱和
PWM_out+=
pwm_var;
//调整PWM输出
if(PWM_out&
Pmax)PWM_out=
Pmax;
//输出值限幅
Pmin)PWM_out=
Pmin;
TBCCR1=PWM_out;
//输出给寄存器,改变PWM占空比}///////////////////////////////////////////////////////////////////调用示例:
voidmain(void)
ref=120.6;
while
(1)
feb=
adc_sample();
pid_ctrl();
}另外附上:
PID调节经验总结(搜索资源)
PID控制器参数选择的方法很多,例如试凑法、临界比例度法、扩充临界比例度法等。
但是,对于PID控制而言,参数的选择始终是一件非常烦杂的工作,需要经过不断的调整才能得到较为满意的控制效果。
依据经验,一般PID参数确定的步骤如下:
(1)确定比例系数Kp
确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为纯比例调节。
输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;
再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。
记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。
(2)确定积分时间常数Ti
比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。
记录此时的Ti,设定PID的积分时间常数Ti为当前值的
150%~180%。
(3)确定微分时间常数Td
微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。
如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。
(4)系统空载、带载联调
对PID参数进行微调,直到满足性能要求。