PID算法的C语言实现五 积分分离的PID优化

在上面三、四我们知道积分环节是为了消除静差,但有时候机器启动、结束或出现大幅的偏差时,这样在短时间内会累积大量的偏差,这样就导致积分项很大,以至于出现超调甚至震荡,这样是不允许的!


为了克服这个问题,我们对积分偏差的做一个选择,即通过控制积分偏差的大小来决定是否增加积分项的调节!

在第三篇的代码中做如下更改:

float PID_Cal(float Speed)
{
pid.SetSpeed      = Speed;                                                      
pid.Err           = pid.SetSpeed - pid.ActualSpeed; 
pid.Integral      += pid.Err;                     
pid.Voltage       = pid.Kp*pid.Err + pid.Ki*pid.Integral + pid.Kd*(pid.Err - pid.Err_Last); 
pid.Err_Last      = pid.Err;                 
pid.ActualSpeed   = pid.Voltage*1.0;              

return pid.ActualSpeed;        
}  。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。代码段一

改成

float PID_Cal(float Speed)
{
unsigned char index;
pid.SetSpeed      = Speed;                                                      
pid.Err           = pid.SetSpeed - pid.ActualSpeed; 

if(abs(pid.Err) >=100) //取绝对值
{
index = 0;
}
else
{

index =1;

pid.Integral      += pid.Err;    

}
               
pid.Voltage       = pid.Kp*pid.Err + index*pid.Ki*pid.Integral + pid.Kd*(pid.Err - pid.Err_Last); 
pid.Err_Last      = pid.Err;                 
pid.ActualSpeed   = pid.Voltage*1.0;              

return pid.ActualSpeed;        
} 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。代码段二


我们用199这个值来判断他们优化时间的快慢!

代码段一:

运行代码可以看到一下从198到199的越变的次数为 406次,即没积分环节的优化,达到199需要406次的PID控制,时间为406个单位!



代码段二:

运行代码可以看到一下从198到199的越变的次数为 406次,即没积分环节的优化,达到199需要219次的PID控制,时间为219个单位!


从上面我们知道优化后的PID比没优化的快了将近1倍的时间单位!

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值