您的位置:首页 > 其它

新型PID控制及其应用(二)

2016-03-04 18:30 253 查看
数字PID控制算法的改进

1.积分分离PID控制算法:

引入积分项的目的:消除静态误差,提高精度,但在开机或者大幅度增减设定值时,系统会有很大的偏差,造成很大的超调量。积分分离作用就是减小

超调量。

程序:

int index = 0;
if(abs(pid.err)>= 200 ) index = 0;//设定一个阈值
else {
index = 1;
pid.err_sum += pid.err;
}
pid.act = pid.P*pid.err + index * pid.I*pid.err_sum + pid.D*pid.err_last;


2.遇限削弱积分PID控制算法(又称抗饱和积分):

一开始就积分,进入限制范围后就停止积分。

这种方法可以避免长时间的停留在饱和区。

程序:

float Pid (float SET){
int index = 0;
pid.set = SET;
pid.err = pid.set - pid.act;
if(pid.act > pid.umin){
if(abs(pid.err) > 200) index = 0;
else{
index = 1;
if(pid.err<0)
pid.err_sum += pid.err;
}
}else if(pid.act < pid.umin){
if(abs(pid.err)>200) index = 0;
else {
index = 1;
if(pid.err>0)
pid.err_sum += pid.err;
}
}else{
if(abs(pid.err)>200) index = 0;
else {

index = 1;
if(pid.err>0)
pid.err_sum += pid.err;
}
}
pid.err_last = pid.err;
pid.act = pid.P*pid.err + pid.I*pid.err_sum + pid.D*pid.err_last;
return pid.act;
}


3.变积分的PID控制算法:

以上的控算法都是基于积分分离的前提,本程序也不例外。

变积分是指在一般的控制过程中,积分增量不变。但是,系统的要求是当系统偏差大时,积分作用应该较小,但系统误差小时,积分作用应该增大。

积分系数大了会产生超调,小了短时间内不能消除静差。所以变积分是有效的。

变积分的思想是改变积分项的累加速度。使其偏差越大,积分越慢,偏差越小,积分越快。

float Pid (float SET){

float index = 0.0f;

pid.set = SET;
pid.err = pid.set - pid.act;

if(abs(pid.err)>200) index = 0.0f;
else if(abs(pid.err)<180)
{
index = 1.0f;
pid.err_sum += pid.err;
}else{
index =(200 - abs(pid.err))/20;
pid.err_sum += pid.err;

}

pid.act = pid.P*pid.err + index * pid.I*pid.err_sum + pid.D*pid.err_last;

pid.err_last = pid.err;

return pid.act;
}


总结:都是基于积分分离的控制算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: