本文主要是介绍matlab控制器参数整定方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- systune方法
- code
- simulink + code
- HinfStruct方法
- 标准控制结构
- simulink + code
systune方法
针对上述控制结构图,利用matlab整定参数。
code
%% Tuning Control Systems with SYSTUNE
% systuneWorkflowExample.m
G = tf([2],[0.0015 0.009 2]);
C0 = tunablePID('C','pi'); % tunable PIa = realp('a',1); % 参数化
F0 = tf(a,[1 a]); % 滤波器结构AP = AnalysisPoint('u'); % 断点T0 = feedback(G*AP*C0,F0); % 广义闭环传函
T0.InputName = 'r';
T0.OutputName = 'y';
% 指定设计要求
% 设计要求参考链接:
% https://www.mathworks.com/help/control/tuning-goals-1.html?s_tid=srchtitle
Req1 = TuningGoal.Tracking('r','y',0.7);
Req2 = TuningGoal.Margins('u',6,45);
% 执行参数优化算法
rng('default')
Options = systuneOptions('RandomStart',3);
[T,fSoft] = systune(T0,[Req1,Req2],Options);
% 查看指标完成度
fSoft
% 显示整定最佳参数
showTunable(T) % tuned values of all tunable elements
% 阶跃响应
clf, step(T)
simulink + code
%% G = tf([2],[0.0015 0.009 2]);
ST0 = slTuner('rct_diskdrive',{'C','F'});
% a = realp('a',1); % 参数化
% setBlockParam(ST0,'F',tf(a,[1 a])); % 明确指定如何参数化F块
T0 = getIOTransfer(ST0,{'r'},{'y'}); % 获取闭环传递函数的广义模型
% 指定设计要求
Req1 = TuningGoal.StepTracking('r','y',0.01);
% 参数整定
rng('default')
Options = systuneOptions('RandomStart',3);
[T,fSoft] = systune(T0,[Req1],Options);
fSoft %要求的完成度,小于1为达到要求
showTunable(T) %展示整定值
clf,step(T)
% 将整定数据写入simulink
ST = copy(ST0); % 复制ST0数据
setBlockValue(ST,T); % 将整定好的数据写入ST
writeBlockValue(ST); % 写入simulink
% 阶跃响应
Try = getIOTransfer(ST,'r','y');
step(Try)
HinfStruct方法
标准控制结构
simulink + code
% https://www.mathworks.com/help/robust/gs/fixed-structure-h-infinity-synthesis-with-hinfstruct.htmlload hinfstruct_demo G
wc = 1000; % target crossover
s = tf('s');
LS = (1+0.001*s/wc)/(0.001+s/wc);
% 创建slTuner接口的实例,并将Simulink块C和F标记为可调参数
ST0 = slTuner('rct_diskdrive',{'C','F'});
a = realp('a',1);
setBlockParam(ST0,'F',tf([a],[1 a])); % 明确指定如何参数化F块
T0 = getIOTransfer(ST0,{'r','n'},{'y','e'}); % 获取闭环传递函数的广义模型
T0 = blkdiag(1,LS) * T0 * blkdiag(1,1/LS); % 加权
% 随机数优化
rng(0)
opt = hinfstructOptions('Display','final','RandomStart',5);
T = hinfstruct(T0,opt);
% 查看最优参数值
showTunable(T)
step(T(1,1));
这篇关于matlab控制器参数整定方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!