您的位置:首页 > 编程语言 > MATLAB

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

2017-08-24 13:31 239 查看
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');



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控制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 算法 PID