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

来源:互联网 发布:柬埔寨网络博客合法吗 编辑:程序博客网 时间:2024/04/27 10:44

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


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

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

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倍的时间单位!

原创粉丝点击