此示例显示了如何使用Systune.
或者loopune.
自动调谐在Simulink中建模的控制系统。金宝app
对于此示例,我们使用以下发动机速度控制系统模型:
Open_System('rct_engine_speed')
控制系统由单个PID循环组成,必须调整PID控制器增益以充分响应所需速度的步骤变化。具体而言,我们希望响应在不到5秒的时间内沉淀,几乎没有过冲。尽管Pidtune.
是调整单个PID控制器的更快替代方案,这个简单的例子非常适合介绍Systune.
和loopune.
在Simulink中的工作金宝app流程。
这SLTUNER.
接口提供了一个方便的网关Systune.
用于在Simulink中建模的控制系统。金宝app此界面允许您指定Simulink模型中的哪些块可调谐,并且对于开放或闭环验证的信号感兴趣。金宝app创建一个SLTUNER.
实例为rct_engine_speed
模型并列出“PID控制器”块(以橙色突出显示)可调谐。请注意,模型中的所有线性分析点(在此处的信号“和”速度“)被自动作为调整的兴趣点。
st0 = sltuner('rct_engine_speed'那'PID控制器');
PID块以其在Simulink模型中的值初始化,您可以访问它金宝appgetblockValue.
。注意,比例和衍生增益初始化为零。
getblockValue(ST0,'PID控制器')
ans = 1 ki * --- s用ki = 0.01名称:PID_Controller连续时间I-I-I-I-I-I-I-I-Only控制器。
接下来创建步骤跟踪要求,以捕获5秒的目标稳定时间。使用Simulink模型中的信号名称来引用引用和输出信号金宝app,并将目标响应指定为具有1秒的时间常数的一阶响应。
TrackReq = TuningGoal.steptracking('ref'那'速度',1);
您现在可以调整控制系统ST0.
遵守要求TrackReq.
。
ST1 = SYSTUNE(ST0,TrackReq);
Final:Soft = 0.282,硬= -Inf,迭代= 65
最终值接近1表示满足跟踪要求。Systune.
返回“调谐”版本ST1.
由此描述的控制系统ST0.
。再次使用getblockValue.
要访问PID增益的调谐值:
getblockValue(ST1,'PID控制器')
ans = 1 s kp + ki * --- + kd * -------- s tf * s + 1带kp = 0.00217,ki = 0.00341,kd = 0.000513,tf = 6.92e-07名称:PID_Controller并行形式的连续时间PIDF控制器。
要模拟闭环响应速度的步进命令,请从速度命令“ref”到“速度”输出并绘制其步骤响应:
t0 = getiotransfer(st0,'ref'那'速度');t1 = getiotransfer(st1,'ref'那'速度');步骤(t0,t1)图例('最初的'那'调整')
你也可以使用loopune.
调谐Simulink中建模的控制系统。金宝app这loopune.
工作流程非常相似Systune.
工作流程。一个不同的是loopune.
需要了解工厂和控制器之间的边界,这些边界是指的控制和测量信号。对于单个循环,性能基本上被响应时间捕获,或者通过开环交叉频率等效。基于一阶特性,交叉频率应超过1 RAD / S,用于闭环响应以在不到5秒内沉降。因此,您可以使用1 rad / s作为目标0-dB交叉频率调整PID循环。
%标记信号“U”作为兴趣点addpoint(st0,'U')%调整控制器参数控制='U';测量='速度';WC = 1;ST1 = loopune(ST0,控制,测量,WC);
最终:峰值增益= 0.979,迭代= 4实现目标增益值目标= 1。
最终值再次接近1,表明达到目标控制带宽。和人一样Systune.
, 用getiotransfer
计算和绘制闭环响应从速度命令到实际速度。结果与使用的结果非常相似Systune.
。
t0 = getiotransfer(st0,'ref'那'速度');t1 = getiotransfer(st1,'ref'那'速度');步骤(t0,t1)图例('最初的'那'调整')
您还可以执行开环分析,例如,计算工厂输入的增益和相位利润你
。
%注意:-1因为|边缘|期望负反馈回路转移l = getLooptransfer(st1,'U',-1);边缘(L),网格
一旦你满意的Systune.
或者loopune.
结果,您可以将调整的控制器参数上传到Simulink以获取与非线性模型的进一步验证。金宝app
WriteBlockValue(ST1)
您现在可以使用调谐的PID控制器模拟发动机响应。
非线性模拟结果与MATLAB中获得的线性响应紧密匹配。
将调谐参数范围限制为杂草出杂散的不良解决方案通常有用。金宝搏官方网站例如,您可能要求PID控制器的比例和衍生增益是非负的。为此,请访问调谐块参数化。
c = getBlockParam(ST0,'PID控制器')
C =可调谐连续时间PID控制器“PID_Controller”,具有公式:1 S KP + Ki * --- + KD * -------- S TF * S + 1和可调参数KP,KI,KD,TF。键入“PID(c)”以查看当前值和“get(c)”以查看所有属性。
设置可调参数的“最小”值kp.
和kd.
到0。
C.KP.Minimum = 0;C.Kd.minimum = 0;
最后,将修改的参数化与调谐块相关联。
SetBlockParam(ST0,'PID控制器',C)
重温PID收益并验证比例和衍生增长确实是非未负化的。
ST1 = loopune(ST0,控制,测量,WC);展示(ST1)
最终:峰值增益= 0.973,迭代= 4实现目标增益值目标= 1。框1:rct_engine_speed / pid控制器= 1 s kp + ki * --- + kd * ------- s tf * s + 1带kp = 0.000897,ki = 0.00251,kd = 0.000146,tf = 0.01名称:PID_Controller以并行形式的连续时间PIDF控制器。
接近调整PID增益的检查表明衍生术语的贡献是未成年人的贡献。这表明使用更简单的PI控制器。为此,覆盖“PID控制器”块的默认参数化:
SetBlockParam(ST0,'PID控制器',调音('C'那'pi')))
这指定现在应该参数化为“PID控制器”块作为仅为PI控制器。接下来重新调整该控制器的控制系统:
ST2 = Loopeune(ST0,控制,测量,WC);
最终:峰值增益= 0.95,迭代= 4实现目标增益值目标= 1。
最终价值再次不到一个表明成功。将闭环响应与以前的响应进行比较:
t2 = getiotransfer(st2,'ref'那'速度');步骤(T0,T1,T2,'r--') 传奇('最初的'那'PID'那'pi')
显然PI控制器足以实现此应用。
TuningGoal.Tracking.
|SLTUNER.
(金宝appSimulink Control Design)|Systune(SLTuner)
(金宝appSimulink Control Design)