如何在 Simulink 中使用 PID Tuner 进行 PID 调参?

640?wx_fmt=gif640?wx_fmt=jpeg作者 | 安布奇
责编 | 胡雪蕊
出品 | 优快云(ID: 优快云news)本文为一篇技术干货,主要讲述在Simulink如何使用PID Tuner进行PID调参。

 

640?wx_fmt=png

PID调参器( PIDTuner)概述

 

1.1 简介

 

使用PID Tuner可以对Simulink模型中的PID控制器,离散PID控制器,两自由度PID控制器,两自由度离散PID控制器进行调参,实现控制性能和健壮性的良好平衡。在使用PID Tuner的时候,它会自动做一些工作:

  • 自动计算被控装置的线性模型。PID Tuner会将PID控制块输入和输出之间所有Simulink块的组合看作为一个被控装置,因此被控装置将会包括控制环中所有块体,不仅仅是控制器本身。

  • 自动给出一个经过控制性能和鲁棒性(健壮性)平衡的初始PID控制设计。这个过程基于经过线性化的被控装置模型的开环频率响应特性。

  • 提供交互性工具和响应曲线来帮助设计满足要求的PID控制系统。

1.2 PID Tuner 使用场景

  • 自动地、交互性地对位于单环、单位反馈的系统前向通路中的单输入单输出(SISO)PID控制器进行调参。

  • 自动地、交互性地调整如下例子中位于环形结构中的两自由度PID控制器参数:

     

    640?wx_fmt=png
  • 交互性地使用SISO系统的响应数据来拟合一个控制原型并自动进行调参从而得到最终的控制模型。(需要System IdentificationToolbox工具)

1.3 应用 PID Tuner 的典型设计流程:

(1)启动 PID Tuner 。在启动的时候,这个软件将会从Simulink模型自动计算得到一个被控装置的线性近似模型并生成一个初始的PID控制器。(2)通过在两个设计模型(上述的线性近似模型和原始控制器模型)中手动调节设计准则(设计偏好)来调整PID Tuner的参数,PID Tuner会计算出使系统稳定的PID参数。(3)从设计好的控制模型中导出参数到原始被控装置的PID控制器中,在Simulink中验证PID控制器表现是否符合要求。

1.4 PID Tuner对被控装置的近似

PID Tuner会将PID控制块输入和输出之间所有块的组合看作为一个被控装置。在被控装置中使用的Simulink块可以是非线性的,但是因为自动调参需要使用一个线性模型,PID Tuner会给出一个被控装置的线性化近似模型来代替原来包含非线性部分的装置模型。这个线性化的模型是对非线性系统的近似,并且在原系统给定工作点的邻域内有效。默认情况下,PID Tuner对装置进行线性化的时候,将使用在Simulink模型中配置的初始条件作为近似装置的工作点,然后根据近似装置设计一个初始PID控制器。但是有时需要为一个工作点不是模型初始条件的装置设计PID控制器,比如:

  • Simulink模型在初始条件下工作没有达到稳态,而PID控制器是针对稳态设计的。

  • 在增益调节应用中需要设计多个控制器,且要求每个控制器的工作点不相同。

在这些情况下,需要在PID Tuner中改变近似装置的工作点。限于篇幅,这里暂不做讨论。

1.5 PID调参算法简介

典型PID调参目标包括:

  • 闭环稳定性。即闭环系统对于有界输入保持输出有界。

  • 足够的性能。闭环系统跟踪参考信号变化和对干扰的抑制要尽可能快,拥有更大的环路带宽(单位开环增益)以及对参考信号变化和干扰有更快的响应速度。

默认情况下,PID Tuner内置的PID调参算法将基于装置的动力学模型选择穿越频率(环路带宽)并且设计目标相位裕度为60°。每次在PID Tuner中改变PID控制器的响应时间、带宽、过渡特性(超调等)以及相位裕度时,调参算法都会重新计算PID增益。如果给定健壮性指标(最小相位裕度),调参算法将会给出一个经过参考信号跟踪性能和干扰抑制性能平衡的控制器设计。如果需要更改设计偏好(design focus),可以在PID Tuner的Options选项中进行设置。640?wx_fmt=png当调整设计偏好的时候,调参算法将会尝试调整增益来满足跟踪性能或者干扰抑制性能中的一项(取决于设计偏好),同时实现与之前相同的最小相位裕度。系统中的可调参数越多,越有可能在不牺牲鲁棒性的情况下得到期望的 PID控制算法。例如,对PID控制器设置设计偏好比对P控制器或者PI控制器设置更有效。在任何时候,调整控制系统性能很大程度上依赖于被控装置的特性,对于一些装置,调整设计偏好是没有用的。
640?wx_fmt=png

自动调参实践

 

 

2.1 打开一个示例模型

在MATLAB命令行中打开一个引擎速度控制器模型来进行操作:open_system('scdspeedctrlpidblock')打开如图所示系统:640?wx_fmt=png

2.2 设计概要

设计一个PI控制器完成引擎速度控制。设计目标是跟踪一个来自Simulink step block的参考信号scdspeedctrlpidblock/SpeedReference。设计要求如下:

  • 过渡时间小于5秒。

  • 稳态误差为0。

在这个例子中,通过在 PID Tuner中设计PI控制器 scdspeedctrl/PID来稳定反馈回路并实现对参考信号的良好跟踪。

2.3 打开PID Tuner

双击PID控制块来打开一个对话框。在Main这个选项中点击Tune。640?wx_fmt=png

2.4 初始化PID设计

当PID Tuner启动时,它会自动识别出被控装置的输入和输出,计算得出装置的线性近似模型。原始被控装置可以有任意的阶数和延时。PID Tuner将计算出一个控制性能和健壮性经过合理折中的初始PI控制器。默认情况下,阶跃参考信号跟踪性能将会用曲线展示出来。下图展示了PID Tuner给出的初始PI控制模型:640?wx_fmt=png

2.5 显示PID参数

点击 Show parameters 来显示控制参数P和I以及一系列控制性能和健壮性的度量指标。640?wx_fmt=png640?wx_fmt=png在这个例子中,初始PI控制器的过渡时间为2秒,满足设计要求。

2.6 在 PID Tuner中调整PID 设计

参考信号跟踪响应的超调大概为2.5%。因为在满足过渡时间要求的前提下还有一些余量,我们可以通过增加响应时间来减小超调。向左移动响应时间滑块来增加闭环系统的响应时间。注意在调整响应时间的时候,响应曲线和控制器参数以及性能指标也在不断更新。下图展示了调整后的PID设计,此时超调为零,过渡时间为3.6秒。这个设计好的控制器已经满足设计要求。640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png

2.7 进行性能折中

为了在过渡时间小于2秒的情况下实现零超调,需要同时调节响应时间和瞬态特性滑块。我们需要控制器的响应更快以缩短过渡时间,增加控制器的健壮性来减小超调。例如,将响应时间从3.4秒减小到1.5秒同时将健壮性从0.6增加到0.72。下图展示了进行上述设置后的闭环响应。640?wx_fmt=png640?wx_fmt=png

2.8 将调整好的的参数写入原始装置的PID控制块中

在经过线性近似的装置模型上得到性能满意的控制器之后,还需要在原来的非线性装置上进行检验。在PID Tuner中点击Update Block按钮,把调好的参数写入Simulink模型中的PID控制器。640?wx_fmt=png更新后的PID控制器参数如图:
640?wx_fmt=png

2.9 验证设计

设计好的闭环系统响应如图所示:

640?wx_fmt=png设计好的系统满足设计要求:

  • 过渡时间小于5秒。

  • 稳态误差为0

作者简介:安布奇,笔名单雨,90后工科男,伪文艺青年。目前就读于北京理工大学宇航系,喜欢研究AI,网络爬虫,微信小程序以及机器人,痴迷于Coding,睡前必撸码。

好学,高效的Python,发展前景竟也这么好:

https://edu.youkuaiyun.com/topic/python115?utm_source=csdn_bw

【END】640?wx_fmt=jpeg

今日七夕!不取标题,只想娶你

TIOBE 8 月编程语言排行榜:Python 奋力追赶 C,Swift 下跌

被罚 50 亿后,Google 不再强制绑定 Android 默认引擎!

☞ 张一鸣:我用排除法选工作和择偶

重磅!AI Top 30+案例评选正式启动自然语言处理十问!独家福利容器快速入门完全指南媒体巨头进军区块链!纽约时报将用区块链技术打击假新闻为什么雷军说“华为不懂研发”?

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 优快云 文章。

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

<think>好的,用户想了解如何使用Matlab/Simulink进行PID调参。首先,我需要回忆一下PID控制的基本原理,以及Matlab和Simulink中的相关工具。用户可能是工程师或者学生,需要实际应用的指导,所以步骤要清晰,方法要具体。 首先,我应该介绍PID的三个参数的作用,可能用户已经了解,但作为基础还是需要简要提及。然后,进入Matlab的具体方法,比如使用PID Tuner工具,这是比较自动化的方式,适合新手。需要说明如何打开PID Tuner,调整参数,生成代码等步骤。 接下来是Simulink部分,用户可能更倾向于图形化界面操作。需要提到搭建模型的基本步骤,比如添加PID Controller模块,配置参数,使用自动调参功能。这里要详细说明如何设置输入输出,调整响应曲线,以及如何导出参数到工作区。 然后,手动调参的方法也不能少,毕竟有时候自动调参可能不够理想。需要解释齐格勒-尼科尔斯方法,以及如何根据响应曲线调整参数。这部分需要给出具体步骤,比如先调P,再调I,最后调D,并注意稳定性。 可能用户会遇到一些问题,比如振荡或稳态误差,所以常见问题及解决方法也是必要的。这部分需要简明扼要,给出实际建议,比如检查积分项或调整微分时间。 最后,总结一下步骤,强调实践的重要性,并提醒用户结合理论进行分析。可能还需要提到其他工具,如Control System Toolbox,但根据用户的问题,重点放在PID TunerSimulink上比较合适。 需要注意避免使用复杂的术语,保持语言通俗,结构清晰。同时,检查是否有遗漏的步骤,比如模型搭建的具体细节,或者调参时的注意事项。确保每个步骤都有示例,比如PID Tuner的界面操作,Simulink模块的位置等。 可能用户对自动生成代码感兴趣,所以提到将调好的参数导出到代码是有帮助的。另外,手动调参部分需要具体参数调整公式,比如齐格勒-尼科尔斯法的临界增益和周期计算,但可能用户更关注步骤而不是公式,所以简要说明即可。 还要检查LaTeX格式是否正确,所有数学表达式用$...$,独立公式用$$...$$,但根据用户的问题,可能数学公式不多,所以主要注意PID参数符号的正确表示,比如$K_p$、$K_i$等。 最后,确保回答结构清晰,分点说明,让用户能一步步跟随操作,同时提供实际应用中的技巧和注意事项,确保回答的实用性和可靠性。</think>在Matlab/Simulink中实现PID参数整定,可通过自动调参工具与手动调参结合。以下是具体步骤: --- ### **一、使用Matlab PID Tuner工具** 1. **定义系统模型** ```matlab sys = tf([1],[1 10 20]); % 示例:二阶系统传递函数 ``` 2. **打开PID Tuner** ```matlab pidTuner(sys, 'PID') % 启动GUI界面 ``` - 选择控制器类型(P/PI/PID) - 设置目标响应时间、相位裕度等指标 3. **自动调参** - 点击 **Tune** 按钮,工具自动计算$K_p$, $K_i$, $K_d$ - 拖动响应曲线实时观察系统性能 4. **导出参数** - 点击 **Update Block** 将参数导出到Simulink模型 - 或通过工作区变量保存:`Kp = C.Kp; Ki = C.Ki; Kd = C.Kd;` --- ### **二、Simulink仿真调参** 1. **搭建模型** - 拖入 **PID Controller** 模块(Simulink Library > Continuous) - 连接被控对象(如Transfer Function或物理系统模型) 2. **自动调参** - 右键PID模块 > **Tune...** 启动调参工具 - 设置阶跃响应目标(超调量、调节时间等) - 点击 **Update Block** 应用参数 3. **手动调整** - 双击PID模块,直接修改$K_p$, $K_i$, $K_d$ - 通过 **Simulation > Run** 观察响应曲线(建议使用Scope模块) --- ### **三、手动调参方法(齐格勒-尼科尔斯法)** 1. **纯比例控制** - 设$K_i=0$, $K_d=0$,逐渐增大$K_p$直到系统出现等幅振荡 - 记录临界增益$K_u$和振荡周期$T_u$ 2. **计算参数** - P控制器:$K_p = 0.5K_u$ - PI控制器:$K_p = 0.45K_u$, $K_i = 1.2K_p/T_u$ - PID控制器:$K_p = 0.6K_u$, $K_i = 2K_p/T_u$, $K_d = K_pT_u/8$ --- ### **四、调参技巧与注意事项** 1. **响应分析** - **超调过大**:增大$K_d$或减小$K_p$ - **调节缓慢**:增大$K_i$或减小$K_d$ - **稳态误差**:检查积分项是否启用 2. **抗饱和处理** - 在PID模块中启用 **Anti-windup**(积分限幅) 3. **离散化设置** - 若用于数字控制,需指定采样时间(如`Ts=0.01`) --- ### **五、验证与优化** 1. **阶跃响应测试** - 观察上升时间、超调量、稳态误差等指标 2. **扰动测试** - 在系统中加入脉冲扰动,验证鲁棒性 3. **频域分析** - 使用`bode(sys_cl)`检查相位裕度与增益裕度 --- ### **示例代码(导出PID参数到Simulink)** ```matlab % 自动调参后导出参数 pidBlock = 'model_name/PID'; set_param(pidBlock, 'P', num2str(Kp)); set_param(pidBlock, 'I', num2str(Ki)); set_param(pidBlock, 'D', num2str(Kd)); ``` 通过结合自动工具与手动调整,可快速实现PID参数优化。建议先用PID Tuner获取初始参数,再根据实际响应微调。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优快云资讯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值