⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pid_smith.m

📁 MATLAB的m文件编写的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 + -