欢迎光临散文网 会员登陆 & 注册

Simulink火速入坑 | PID控制模型

2021-04-14 09:52 作者:图通道  | 我要投稿

本次的主题是matlab的好哥们——simulink,并附上一个详尽的PID控制案例,带你火速入坑。

1 碎碎念

1.1 仿真是什么?

仿真是将实际系统的物理、数学机理等移植到计算机虚拟环境,并进行系统行为的动态复现。当所研究的系统造价昂贵、实验的危险性大或需要很长时间才能了解系统参数变化引起的后果时,仿真是一种非常高效的研究手段。其通过低廉的架设成本和分析成本获得与真实环境近似等价的输出效果,从而建立对系统内部机理的深入理解,缩短从概念设计到实际系统的迭代周期与后期更改成本。

总结起来就是简单高效、省钱省时间,目前很火的数字孪生就衍生于仿真。

数字孪生项目,来自小米

1.2 Simulink是什么?

SimulinkMathworks公司推出的MATLAB中的一种可视化仿真工具,是一个模块图环境,用于多域仿真以及基于模型的设计。Simulink提供图形编辑器可自定义的模块库以及求解器,能够用精准数学模型描述用户需求并且执行动态仿真。提到Simulink,就绕不开其与Matlab的关系:

Matlab&Simulink,来自mathworks官方教程视频

Matlab—科学计算语言,以编程方式实现产品设计;•Simulink—图形化开发环境,支持各种工程系统的仿真环境;•Simulink与MATLAB相互集成,能够在Simulink 中将MATLAB算法融入模型,还能将仿真结果导出至MATLAB 做进一步分析。

1.3 Simulink特点

模块化开发环境

Simulink可理解为一种可视化的语言体系,其通过模块化的手段把数学公式、算法进行拆分,用搭积木的方式进行组合呈现。

比如下图表现了飞行控制的整体流程,并对预设控制指令、控制模型、飞机模型、状态反馈等部分进行了模块化建模。

因此Simulink建模本质上与代码并无区别,不过表述方式相比于文本和代码更为直观、高效:其可观测算法中公式之间的上下游关系,输入输出参数之间的交互关系,并可实时观察不同参数变化对每个局部行为的影响。

基于模型的完整开发流程

贯穿研制过程,支持系统设计、仿真、自动代码生成以及嵌入式系统的连续测试和验证。

基于模型的完整开发流程,来源mathworks官方教程视频

丰富的可扩展性

可调用Matlab算法(以模型形式封装在Simulink环境中)、C、C++算法等进行联合仿真,并通过GUI界面进行实时参数控制。

1.4 Simulink应用领域

包括汽车、航空、 工业自动化、大型建模、复杂逻辑、物理逻辑, 信号处理等方面。

航空领域应用

2 Simulink操作介绍

2.1 Simulink界面

在MATLAB环境中点击启动Simulink:

Simulink界面,布局上可以分成左右两栏:

左侧栏可快捷打开历史文件或工程项目;•右侧分成New、和Examples两个栏目: New用于创建新模型、新库模块、新工程; Examples提供了丰富的预设模型,可以直接调用,大家可以大胆探索。

点击Blank Model创建空模型;

在空模型界面点击Library Browser,打开模块库:

2.2 常用模块介绍

2.2.1 输入信号源模块库(Sources)

其中,Step阶跃信号在仿真实验中会经常用到,双击模块弹出参数对话框,可进行设置:

•“Step time”为阶跃信号产生的时间•“Initial value”为阶跃信号初始值•“Final value”为阶跃信号终了值•“Sample time”为采样时间

2.2.2 接收模块库(Sinks)

2.2.3连续系统模块库(Continuous)

其中,Transfer Fcn传递函数模块在仿真实验中会经常用到,双击模块弹出参数对话框,可进行设置:

•“Numerator”栏是传递函数分子多项式系数向量•“Denominator”栏是传递函数分母多项式系数向量•注意:当多项式缺项时,必须将对应系数的“0”输入,不能遗漏

2.2.4数学运算模块(Discrete)

2.2.5 非连续函数模块

同时,Simulink给各个模块提供了详细的说明文档以便查阅:

2.3 模块使用技巧

改变模块的方向

在Simulink中,模块输入端口位于模块左侧,输出端口位于模块右侧,但有时需要对其方向进行改变。方法是:用鼠标选中模块对象,利用“Format →Flip Block”(快捷键Ctrl +I)可将模块顺时针旋转180°;或者利用“Format →Rotate Block”(快捷键Ctrl +R)或将模块顺时针旋转90°。

仿真参数设置

在对系统模型中各个模块进行合适的参数设置之后,需要对系统仿真参数进行必要的设置以开始仿真。

在模型窗口中选择“Simulation”菜单下的“Simulation parameters”,就会出现一个对话框。仿真参数设置共有5个选项,分别是SolverWorkspace I/ODiagnosticsAdvancedRTW

这里选择一个我们平时用的比较多的,具体讲一讲Solver的各个选项与设置方法:

Solver中最常用的几个设置有:Simulation time(仿真时间)、Solver options(仿真器选项)、Relative tolerance (相对误差限)和Max step size(最大步长)。

Simulation time(仿真时间):包括仿真起始时间和停止时间,它们的差即代表仿真时间;在缺省情况下,Simulink默认的仿真起始时间为0 s,仿真结束时间为10 s。•Solver options(仿真器选项) :Type项用来选择变步长或固定步长仿真器。右栏用于选择仿真器的算法。固定步长仿真器在仿真过程中,其步长是不变的。变步长解法可以在仿真过程中根据要求调整运算步长。在采用变步长解法时,应先指定一个容许误差限(在Relative tolerance和Absolute tolerance中设置 ),使得当误差超过误差限时自动修正仿真步长。•Relative tolerance (相对误差限)是规定了每个状态相对于步长的误差大小,用百分比来表示一个状态值。默认值是1e-3,即状态的计算值要精确到0.1%;Absolute tolerance(绝对误差限)是一个阈误差值,当测量的状态值接近零时,代表可接受误差。如果将其设定为auto,则将每个状态的初始绝对误差限设置在1e-6。•Max step size用于设置最大步长。在默认情况下为“auto”,并按下式计算步长:最大步长=(终止时间-起始时间)/50。但这样的取法对于仿真时间较长的系统则可能带来取样点过于稀疏,而使仿真结果失真。一般建议对于仿真时间不超过15s的采用默认值即可,对于超过15s的每秒至少保证5个采样点,对于超过100s的,每秒至少保证3个采样点。最大步长的选取直接关系到系统仿真结果的准确性。

第三部分-应用仿真

俗话说,实践出真知,这里我们以传统控制算法中的基础方法、并且在工业界中得到广泛应用的PID (proportion integration differentiation)控制为例,跑一个小实验来练练手。

3.1 算法背景

PID控制应该算是历史悠久且应用非常广泛的控制算法了,距离笔者写这篇帖子的时候,PID算法已经有108年历史。PID并不是很神秘的东西,在很多实际应用中都可以看到它的身影:温度控制系统、四旋翼飞行器、倒立摆系统、寻迹小车等等。

应用PID控制的前提是系统一定要是一个闭环系统,什么是闭环系统?就是一定要有反馈回路,要能及时反馈我们最终控制的那个量的状态,给到控制器。也就是说,PID控制是根据被控系统的状态来进行控制的,我们需要知道这个状态才能决定控制器下一步应该怎么做。

总的来说,PID控制的用途分为两种,

•一种是使某个物理量“保持稳定",即便出现外界干扰也能很快回到原始的稳定状态;•另一种是使物理量稳定地“跟踪”给定的信号,稳定地随着给定信号变化。

3.2 算法原理

接下来结合理论知识来让大家对PID控制有更进一步的认识。

下面这个公式是PID控制的核心,PID控制器的控制量就是根据这个公式计算出来的。可以看出,控制器在数学意义上可以看作一个多项式,想要使系统达到优秀的控制效果,关键要调试公式中三个系数KP、KI、KD,使其达到合适的取值。

至于如何调试参数,这需要根据被控系统的特性,根据时域或频域的方法来分析,这里就不详细展开了。

结合上图的PID控制系统的基本结构来看这个公式:

具体地,被控系统输出c(t)与给定量r(t)进行比较,得到偏差e(t),控制器对偏差值进行比例P、积分I、微分D三种运算合成,得到对应的控制器输出u(t),反馈给被控系统,进一步调节作动器的行为(例如阀门开度、电机转速、力矩输出等等)从而使偏差趋近于零,进而使被控对象的行为趋近于给定的指令信号。

•比例环节P可以提高系统响应的快速性,但单独使用比例环节并不能使系统性能稳定在一个理想的状态,当有余差出现,较大的比例系数会引起较大的控制器输出,导致超调过大,系统产生振荡,使系统稳定性变差;•积分调节I可以在比例调节的基础上减小余差,提升系统的稳态性能;•微分环节D属于超前调节,可以提升系统的动态性能,使系统超调量减小、稳定性增加。

3.3 仿真步骤

3.3.1 被控要求

被控对象为二阶微分环节,传递函数为

执行机构为一阶惯性环节,传递函数为

执行机构输出限幅:200Nm

给定指令信号源为

该信号在1500s处存在一个快速变化,从90°变化到-90°:

3.3.2 操作步骤

(1)打开simulink界面

(2)选择空模板Blank Model

(3)进入操作界面,打开工具库Library Browser

(4)搭建模型:

•选择工具库中所需要的模块,拖动至Blank Model界面•按照PID控制系统的基本结构连接各个模块•双击“被控对象”“执行机构”模块,按照设置参数

(5)构建指令信号源模块

这里信号源表达式前面已经给出:

可以看出公式形式较为复杂,为了更简洁地搭建仿真模型,这里采用Simulink中的Interpreted Function模块,具体的步骤如下:

(6)加入信号源的输入源:仿真时间信号t

(7)设置PID控制器的参数,并根据仿真输出进行调试

(8)单击RUN,运行

(10)双击Scope,查看仿真输出曲线

作者:陈珺仪 吴瑀倩 | 编辑 图图

•如需本文中完整PID模型,请关注微信公众号“图通道”后台回复全家桶;

•图图的 MATLAB 交流群:1129425848;


Simulink火速入坑 | PID控制模型的评论 (共 条)

分享到微博请遵守国家法律