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