主要内容

调谐控制系统在Simulink中金宝app

此示例显示了如何使用Systune.或者loopune.自动调谐在Simulink中建模的控制系统。金宝app

发动机速度控制

对于此示例,我们使用以下发动机速度控制系统模型:

Open_System('rct_engine_speed'

控制系统由单个PID循环组成,必须调整PID控制器增益以充分响应所需速度的步骤变化。具体而言,我们希望响应在不到5秒的时间内沉淀,几乎没有过冲。尽管Pidtune.是调整单个PID控制器的更快替代方案,这个简单的例子非常适合介绍Systune.loopune.在Simulink中的工作金宝app流程。

用Systune调整控制器调整

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)图例('最初的''调整'

用loopopune调整控制器

你也可以使用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),网格

Simulink验证金宝app

一旦你满意的Systune.或者loopune.结果,您可以将调整的控制器参数上传到Simulink以获取与非线性模型的进一步验证。金宝app

WriteBlockValue(ST1)

您现在可以使用调谐的PID控制器模拟发动机响应。

非线性模拟结果与MATLAB中获得的线性响应紧密匹配。

对PID增益的约束

将调谐参数范围限制为杂草出杂散的不良解决方案通常有用。金宝搏官方网站例如,您可能要求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控制器。

PI和PID控制器的比较

接近调整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控制器足以实现此应用。

也可以看看

|(金宝appSimulink Control Design)|(金宝appSimulink Control Design)

相关话题