本文档包含的控制器整定方法分为两类:
- 指定结构的控制器整定:systune, hinfstruct
- 广义控制对象整定:musyn, mixed musyn, hinfsyn
以具有不稳定极点的一阶系统为例,假设控制对象具有乘性不确定性,且不确定性的加权函数在低频下不确定性较弱,高频下不确定性较强。
% 乘性不确定性控制对象
Pn = tf(1,[1 -1]); % 标称模型,具有不稳定极点
delta = ultidyn('delta',[1,1]);
Wp = makeweight(0.01,10,10);
P = Pn * (1+Wp*delta); % 乘性不确定性对象模型,用于固定控制器整定和鲁棒控制器整定
P.u = 'u'; P.y = 'y';
固定结构控制器
% 创建具有固定控制器结构的控制对象
% 固定PI结构控制器C
C = tunablePID('C','pi');
C.u = 'e'; C.y = 'u';
We = makeweight(0.01,2,10);
We.u = 'e'; We.y = 'z1';
S1 = sumblk('e = r-y');
% 固定结构控制器对象,注意要包含控制器C,用于systune和hinfstruct
Pcl = connect(P,C,S1,We,{'r'},{'y','z1'}); % z1 用于hinfstruct
% 普通systune整定方法
% 控制指标
Req1 = TuningGoal.Tracking('r','y',0.9); % 指定节点的闭环性能
% Req2 = TuningGoal.Margins('u',4,50);
% 执行参数优化算法
rng('default')
Options = systuneOptions('RandomStart',3);
[T,fSoft] = systune(Pcl,[Req1],Options);
% 查看指标完成度
fSoft
% 显示整定最佳参数
showTunable(T) % tuned values of all tunable elements
% 阶跃响应
clf, step(T(1,1))
% 特定控制器结构,Hinfstruct 整定方法
bodemag(We) % 观察误差权重
rng(0)
opt = hinfstructOptions('Display','final','RandomStart',5);
T = hinfstruct(Pcl,opt);
% 查看最优参数值
showTunable(T)
step(T(1,1));
鲁棒控制器整定
% 构建广义控制对象
% 加权函数
Ww1 = makeweight(0.1,200,1.2);
Ww1.u = 'w1'; Ww1.y = 'r';
Wz1 = makeweight(800,40,0.01);
Wz1.u = 'e'; Wz1.y = 'z1';
Wz2 = makeweight(0.1,20,10);
Wz2.u = 'u'; Wz2.y = 'z2';
Pmiu = connect(Ww1,Wz1,Wz2,P,S1,{'w1','u'},{'z1','z2','e'}); % 广义控制对象,用于鲁棒控制器设计
% μ综合
[Kc,mu_c] = musyn(Pmiu,1,1);
KK = tf(Kc)
PCLL = lft(Pmiu,Kc);
step(PCLL(1,1));
% miexd miu方法
opt = musynOptions('MixedMU','on');
[Kc,mu_m] = musyn(Pmiu,1,1,opt);
PCLL = lft(Pmiu,Kc);
step(PCLL(1,1));
% Hinf 方法
ncont = 1;
nmeans = 1;
[Khinf,CL,gamma] = hinfsyn(Pmiu,nmeans,ncont);
step(CL(1,1));
% 运行simulink 不确定scope显示
% for i = 1:3
% sim('Plant_simulink')
% end
simulink仿真
仿真时随机采样不确定性参数值,每次运行随机执行不确定性参数响应:
Tune_Methods.mlx
Plant_simulink.slx