📄 pid_smith.m
字号:
%纯滞后smith控制算法Gp(s)=exp(-80s)/(60s+1)
%采样时间20s,按阶跃响应;M=1为模型不精确 M=2精确 M=3为pi控制kp=0.5 ki=0.01
clear all;
close all;
ts=20;
%delay plant
kp=1;
tp=60;
tol=80;
sys=tf([kp],[tp,1],'inputdelay',tol);
dsys=c2d(sys,ts,'zoh');
[num,den]=tfdata(dsys,'v');
M=3;
%prediction model
if M==1 %not precise model; pi+smith
kp1=kp*1.1;
tp1=tp*1.1;
tol1=tol*1.0;
elseif M==2|M==3 %precise model
kp1=kp;
tp1=tp;
tol1=tol;
end
sys1=tf([kp1],[tp1,1],'inputdelay',tol1);
dsys1=c2d(sys1,ts,'zoh');
[num1,den1]=tfdata(dsys1,'v');
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
e1_1=0;e2=0;e2_1=0;ei=0;
xm_1=0;ym_1=0;y_1=0;
for k=1:600
time(k)=k*ts;
rin(k)=sign(sin(0.0002*2*pi*k*ts));
%prediction model
xm(k)=-den1(2)*xm_1+num1(2)*u_1;
ym(k)=-den1(2)*ym_1+num1(2)*u_5;
yout(k)=-den(2)*y_1+num(2)*u_5;
if M==1 %No precise model
e1(k)=rin(k)-yout(k);
e2(k)=e1(k)-xm(k)+ym(k);
ei=ei+ts*e2(k);
u(k)=0.5*e2(k)+0.01*ei;
e1_1=e1(k);
elseif M==2 %precise model
e2(k)=rin(k)-xm(k);
ei=ei+ts*e2(k);
u(k)=0.5*e2(k)+0.01*ei;
e2_1=e2(k);
elseif M==3 %only pi
e1(k)=rin(k)-yout(k);
ei=ei+ts*e1(k);
u(k)=0.5*e1(k)+0.01*ei;
e1_1=e1(k);
end
%return of smith parameters
xm_1=xm(k);
ym_1=ym(k);
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_1=yout(k);
end
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -