增量式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');




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控制。


  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值