增量式PID控制算法的MATLAB仿真及思考

1.增量式PID算法


2.仿真程序

被控对象:


%Increment PID cuntroller
clear all;
close all;
ts=0.001;
sys=tf(400,[1,50,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;error_2=0;
for k=1:1:1000
    time(k)=k*ts;
    rin(k)=1.0;
    kp=8;ki=0.10;kd=10;
    du(k)=kp*x(1)+kd*x(2)+ki*x(3);
    u(k)=u_1+du(k);
    if u(k)>=10;
        u(k)=10;
    end
    if u(k)<=-10;
        u(k)=-10;
    end
    yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
    error=rin(k)-yout(k);
    u_3=u_2; u_2=u_1; u_1=u(k);
    y_3=y_2; y_2=y_1; y_1=yout(k);
    x(1)=error-error_1;
    x(2)=error-2*error_1+error_2;
    x(3)=error;
    error_2=error_1;error_1=error;
end
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');



增量式PID控制算法的MATLAB仿真及思考_第1张图片

3.疑问四处

sys=tf(400,[1,50,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');

yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;

4.解决

4.1 sys=tf(400,[1,50,0])

这句话是运行结果为

sys =
 
     400
  ----------
  s^2 + 50 s
  

可见功能为建立传递函数。

4.2 dsys=c2d(sys,ts,'z')

这句话是运行结果为

dsys =
 
  0.0001967 z + 0.0001935
  -----------------------
  z^2 - 1.951 z + 0.9512

经查找资料,这句话的作用是将传递函数在零初始条件下取Z变换。

4.3 Z变换

n阶定常离散系统差分方程

 

在零初始条件下取Z变换:

 

dsys即Y(z)/U(z)

4.4 [num,den]=tfdata(dsys,'v')

num为dsys分子多项式系数

den为dsys分母多项式系数

4.5 yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2

就是4.3中从n阶定常离散系统差分方程变化来的。

5.总结

以上难点就是把传递函数转化为差分方程,以实现PID控制。


你可能感兴趣的:(PID,matlab,算法,PID)