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

📄 hoo_control.m

📁 matlab编写鲁棒控制器建模与仿真实例
💻 M
字号:
format short e
w=logspace(-2,6,100);
%设一般被控对象
%定义控制对象和加权函数
Psys=nd2sys([1],[1 0 0],3.87e7);
W1sys=nd2sys([1 125.7],[1 1e-4],5e-1);
W2num1=[1 1e+4 5.7e+7];
W2dencof=1;
W2den1=[1 1.2e+4 4.04e+8];
W2sys1=nd2sys(W2num1,W2den1);
W2sys=mmult(W2sys1,W2sys1,23.9);
W3sys=0.1;
W4sys=nd2sys([10 10*0.5*0.5e4],[1 10*5e4]);
%显示加权函数的BODE图
Pfr=frsp(Psys,w);
W1fr=frsp(W1sys,w);
W2fr=frsp(W2sys,w);
W3fr=frsp(W3sys,w);
W4fr=frsp(W4sys,w);
figure(1);
vplot('liv,lm',W1fr,W2fr,W3fr,W4fr);
title('Weightign Functions')
xlabel('Freperncy [rad/s]')
ylabel('Gain')
grid;
%设一般被控对象
systemnames='Psys W1sys W2sys W3sys W4sys';
inputvar='[w1;w2;u]';
outputvar='[W1sys;W2sys;W4sys;w2+Psys]';
input_to_W3sys='[w1]';
input_to_Psys='[u+W3sys]';
input_to_W1sys='[Psys+w2]';
input_to_W2sys='[Psys]';
input_to_W4sys='[u]';
sysoutname='GPsys';
cleanupsysic='yes';
sysic;
%设计控制器
disp(['HOO controller Design with hinfsyn'])
K=[];
glow=0;
ghigh=10;
tol=1e-2;
while isempty(K)==1 & ghigh<1e6;
    [K,CL,gopt]=hinfsyn(GPsys,1,1,glow,ghigh,tol); 
    if isempty(K)==1 & ghigh<1e6;
        ghigh=ghigh*10;
        tol=ghigh*1e-3;
    end
    clear CL ghigh glow tol
   end;
    if isempty(K)==1
    break;
    end;
    %显示控制器的BODE图
    Kfr=frsp(K,w)';
    figure(2);
    subplot(2,1,1)
    vplot('liv,lm',Kfr');
    title('Bode plot of Controller');
    xlabel('Frepquency[rad/s]')
    ylabel('Gain');
    grid;
    subplot(2,1,2)
    Vplot('liv,p',Kfr');
    xlabel('Frepquency[rad/s]')
    ylabel('phase(degrees)')
    grid;
    %仿真
    systemnames='Psys K';
    inputvar='[w;r]';
    outputvar='[Psys+r;K]';
    input_to_Psys='[K+w]';
    input_to_K='[Psys+r]';
    sysoutname='Clsys';
    cleanupsysic='yes';
    sysic;
    %仿真(Hoo控制器)
    [pa,pb,pc,pd]=unpck(Psys);
    [ka,kb,kc,kd]=unpck(K);
    [da,db,dc,dd]=unpck(sel(Clsys,1,1));
    [ua,ub,uc,ud]=unpck(sel(Clsys,2,1));
    %干扰响应
    t=[0:0.0001:0.1];
    [y,x,t]=step(da,db,dc,dd,1,t);
    [u,x,t]=step(ua,ub,uc,ud,1,t);
    figure(3)
    subplot(2,1,1)
    plot(t,y)
    axis([0 0.1 0 16])
    xlabel('Time[s]')
    ylabel('Amplitude')
    title('Step disturbance response')
    grid on;
    %控制输入
    subplot(2,1,2)
    plot(t,u)
    axis([0 0.01 -1.7 0])
    xlabel('Time[s]')
    ylabel('u[V]')
    title('Input')
    grid on

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -