4抗积分饱和PID控制.docVIP

  • 17
  • 0
  • 约2.22千字
  • 约 4页
  • 2018-02-03 发布于河北
  • 举报
4抗积分饱和PID控制

抗积分饱和PID控制 一、题目:用抗积分饱和PID控制传递函数为G(s)的被控对象 G(s)=523500/(s^3+87.35s^2+10470s) 二、抗积分饱和原理 积分饱和现象是在系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断加大而加大,从而导致执行器达到极限位置,如果控制器的输出继续增大,阀门开度却不能再增大,此时计算机输出超出了执行器正常操作的范围而进入了饱和区。一旦系统出现反方向的偏差,控制器的输出逐渐退出饱和区,但若进入的饱和区很长,那么退出饱和区的时间也就很长,在饱和区这段时间执行器仍停留在极限位置而不能随偏差的反向立即做出相应的改变,就好像系统失去了控制一样,造成控制性能恶化,这就是积分饱和。 作为防止积分饱和方法之一就是抗积分饱和法。思路是在计算U(k)时,首先判断上一时刻控制器的输出量U(k-1)是否已经超出限制范围。 若U(k-1)=Umax,则只累加负偏差,正偏差则去掉积分作用; 若U(k-1)=-Umax,则只累加正偏差,负偏差则去掉积分作用; 三、程序清单: %PID Controler with intergration sturation clear all; close all; ts=0.001; sys=tf(5.235e005,[1,87.35,1.047e004,0]); dsys=c2d(sys,ts,z); [num,den]=tfdata(dsys,v); u_1=0.0;u_2=0.0;u_3=0.0; y_1=0;y_2=0;y_3=0; x=[0,0,0]; error_1=0; um=6; kp=0.85;ki=9.0;kd=0.0; rin=30; %Step Signal for k=1:1:800 time(k)=k*ts; u(k)=kp*x(1)+kd*x(2)+ki*x(3); % PID Controller if u(k)=um u(k)=um; end if u(k)=-um u(k)=-um; end %Linear model yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3; error(k)=rin-yout(k); M=1; if M==1 %Using intergration sturation if u(k)=um if error(k)0 %前一时刻PID输出值超出控制器的最大限度,而当前的偏差为正,说明被 alpha=0; %控量未达到设定值,防止积分饱和故去掉积分作用 else alpha=1; %前一时刻PID输出值超出控制器的最大限度,而当前的偏差为负,说明被 end %控量超出设定值,应该较小控制器的输出,则加上积分作用 elseif u(k)=-um if error(k)0 %这是历史PID输出值超出控制器的最小限度,道理与超出最大限度的一样 alpha=1; %一定要区分是前一时刻的PID输出值和当前的偏差情况共同判断是否加积 else %分作用 alpha=0; end else alpha=1; end elseif M==2 %Not using intergration sturation alpha=1; end %Return of PID parameters u_3=u_2;u_2=u_1;u_1=u(k); y_3=y_2;y_2=y_1;y_1=yout(k); error_1=error(k); x(1)=error(k); % Calculating P x(2)=(error(k)-error_1)/ts; % Calculating D x(3)=x(3)+alpha*error(k)*ts; % Calculating I xi(k)=x(3); end figure(1); subplot(311); plot(time,rin,b,time,yout,r); xlabel(time(s));ylabel(Position tracking); subplot(312); plot(time,u,r); xlabel(time(s));ylabel(Controller output); subplot(313); plot(time,xi,r); xlabel(time(s));ylabel(Integration); 当M=2时即无

文档评论(0)

1亿VIP精品文档

相关文档