前言:
此时朋友们对“simulink纯电动整车模型仿真”大约比较看重,姐妹们都需要分析一些“simulink纯电动整车模型仿真”的相关内容。那么小编也在网上搜集了一些关于“simulink纯电动整车模型仿真””的相关知识,希望兄弟们能喜欢,小伙伴们快快来学习一下吧!由各种模块所构建的可视化逻辑连接,只是模型的外在表现。模型仿真的核心驱动器是被称作解算器(Solver)的组件,相当于Simulink仿真过程的心脏,驱动着仿真过程:它在每个采样时间点更新模型中所有的状态和信号变量,并计算下一步计算的步长。除此之外,模型还具有一个参数配置集合(Configuration Parameter Set),它提供了一系列的参数,用户通过这些参数可以选择模型的解算方法,配置硬件目标,优化配置,设置异常响应及诊断,以及配置代码生成等。参数设置集合相当于Simulink软件各个环节中的开关控制器,在细节处影响着模型的行为和表现方式,模型的可视化建模方式,解算器及参数配置集合共同构成一个“有血有肉”的Simulink模型。
1.解算器
解算器(Solver)是Simulink 的重要组成部件,Simulink中提供了一系列解算器集合,内部集成了各种不同的数值解算方法,每一种解算器都能够对模型所表示的常微分方程组进行求解并计算下一个采样点时间,并根据模型提供的初始值和设置的误差容限计算出数值解。解算器主要分为固定步长解算器(Fixed step size solver)与变步长解算器(Variable step sizeSolver)两种类型,每一种类型中又可以分为支持离散解算器/连续解算器、显示/隐式解算器、单步/多步解算器、单阶/多阶解算器等,针对不同的应用背景和模型类型各有千秋。解算器可以分为以下五类
(1)固定步长解算器/变步长解算器
步长是前后两个相邻采样点之间的时间间隔。按步长是否变化,可分为固定步长解算器及变步长解算器,前者的步长是固定常数,后者步长在每一个采样点计算时都可能是变化的,具体是增大还是减小取决于每个采样时间点模型状态值变化的快慢:当模型状态值变化很快时减小步长,之增大步长。这两种解算器之所以能够计算下一个时刻的采样时间,正是基于当前时刻加上一个步长得到的。二者并没有绝对的优劣,在不同应用场合酌情采用。
一般情况下,模型仿真中两种解算器均可采用,但如果模型用以生成嵌入式代码并下载到硬件中去实时执行,解算器必须采用固定步长,因为实时硬件的时钟源都是提供稳定频率的时钟源,无法提供变步长解算器的采样时刻计算方式。
在仿真模型中,如果仿真时间较长,在某一给定的仿真精度下,采用固定点解算器需要仿真很多采样点,如采用变步长解算器,可根据误差容限动态调整步长大小,在误差容限允许的范围内可以放大步长,使整个仿真过程中需要计算的采样点数减少,最终使得仿真过程在相对较短的时间内结束。
以一个多速率模型为例,说明上述情况。所谓多速率模型,即模型中的模块不是都采用同一个采样时间进行计算,而是不同的子系统或模块有各自不同的采样时间。但是这个采样时间必须要是解算器步长的整数倍。如图所示。模型中两个离散的正弦模块采样时间分别是0.2s和0.3 s,如果使用固定步长解算器求解,其步长设置为0.1s,这是为了满足两个正弦波发生器模块的采样时刻都涵盖在解算器的采样点覆盖范围内。
示例1
信号源参数
示波器输出
(2)离散解算器/连续解算器
当在图所示Configuration Parameter的 Solver页面选择了固定步长或变步长解算器类型之后,Solver控件里便可以选择具体的某种解算算法了。
根据所支持的解算对象不同分为连续解算器或离散解算器。这两种解算器都依赖于模型中的具有连续/离散状态变量的模块来工作。具有离散状态量的模块负责在离散解算器作用下的每个采样时间点计算离散状态变量的值,具有连续状态量的模块在连续解算器作用下使用连续数值积分方法求解连续状态量的数值。
不具有连续状态模块的模型使用连续解算器仿真时,Simulink自动切换到离散解算器进行仿真;具有连续状态模块的模型,如果选择离散解算器进行仿真,会发生错误。离散解算器不支持连续状态变量的求解,必须采用连续解算器对具有连续状态量的模型求解。
(3)显式解算器/隐式解算器
这里所说的显式和隐式是指求解方程是显式或隐式的。显示方程明确表示求解的对象和求解表达式:x(n+1)= x(n)+h×dx(n),隐式方程则没有将求解对象单独放到等号一边:x(n-1)-x(n)-h×dx(n+1)= 0。
通常,隐式解算器用于求解刚性系统,显式解算器用于求解非刚性系统。所谓刚性系统,是在时间间隔很小的情况下才会稳定,时间间隔稍微增大一点就不再稳定的系统。相对于显式解算器,隐式解算器对于震荡行为的求解具有更高的稳定性。但是,由于解算过程中产生Jacobian矩阵,使用类牛顿法在每一个采样时刻计算代数方程,所以很费时间。为了降低时间花费,隐式解算器提供了一个Solver Jacobian method参数供用户选择,如图5.1-3所示,合适的设置能够提高解算器的时间效率。
(4) 单步解算器/多步解算器
解算器计算当前时刻输出值时,使用前一个或前几个时刻的输出值,根据使用前面时刻值的个数不同可以分为单步解算器和多步解算器。单步解算器在计算y(t)时只需使用t一1时刻的值y(t -1),连续系统使用t-1时刻和t时刻之间的一些微分值。多步解算器需要y(t-1),y(t-2),…,y(t-m)等多值来计算当前输出y(t)。Simulink的变步长解算器提供了一个隐式多步解算方法 ode15s和一个显式多步解算方法 ode113。
(5) 变阶解算器
ode15s和 ode113解算器同时也是阶数可变的解算方法,在系统仿真中可以使用多种阶数进行模型求解。隐式变步长解算器ode15s可以使用1阶到5阶方程,显式变步长解算器ode113可以使用1阶到13阶方程。
对于固定步长解算方法而言,没有误差控制,所以其计算精度完全靠步长大小来决定。步长越小,计算精度越高,花费的时间也越长。Simulink 提供的算法从1阶欧拉算法到8阶Dormand-Prince算法,在积分计算的复杂度上有区别,Type选择Fixed-step时,默认选摔ode3解算方法。对于同样的步长,积分计算越复杂的解算器求解精度越高,但是解算速度相对慢。
变步长解算方法在仿真过程中自动检测局部误差以增大或减小步长来满足用户设定的误差容限。变步长下默认为ode45解算器。变步长解算器库中提供的各种解算方法的应用场合如图所示。
2.参数的配置
Configuration Parameters对话框用于管理配置模型的各种参数,可通过组合键Ctrl十E或单击模型工具菜单中的启动,模型中处于活动状态的ConfigSet对象的内容显示在对话框中,供用户编辑和设置。模型的主要参数包括解算器的选择、设置,数据的导人导出,以及其他影响仿真运行方式的参数,如图所示。
对话框参数按功能分组,单击左侧Select栏目下的组名即可刷新右侧的控件面板。面板的右下角有4个按钮:编辑修改参数之后,单击OK或Apply按钮可保存变更后的参数,区别是OK按钮将关闭对话框而Apply按钮不关闭;Cancel则是忽略参数的修改并关闭对话框,Help为启动Simulink文档并跳转到Configuration Parameter的相关内容,将使用帮助呈现给用户。
(1) 解算器的参数设置
在左侧Select栏目中单击Solver条目,Configuration Parameter对话框显示关于解算器的参数配置。一般情况下,打开Configuration Parameter对话框默认显示的就是Solver窗口。所有控件被分为3组:Simulation time , Solver selection、Solver details和Tasking and sampletime options。当选择变步长解算器时还会出现第4组参数:zero - crossing options。
Simulationtime中包括Starttime和Stoptime两个参数,用于输入仿真的开始和结束时间,时间可以小于0(一般均取大于0的值),但是运行仿真必须保证Stop time 大于等于Starttime,否则启动仿真时会报出错误。
模型的仿真时间并非实际时间(Realtime),默认的仿真时间是0~10 s,但对于一般模型,实际花费的时间不到10 s。实际模型的仿真时间跟模型的复杂度、步长以电脑的计算速度均有关系。
Solver options组根据变步长/固定步长解算器的转换显示不同的参数控件,两种解算器类型的界面分别如图所示。
当选择变步长解算器时需要设置如图所列参数。
固定步长解算器,需要配置的参数相对较少,仅当使用隐式解算器odel4x,才开启雅克比算法相关参数,固定步长解算器参数如图所列。
示例
Sine Wave模块参数采用默认设置,Configu-ration Parameters中默认使用ode45解算器。变步长解算器根据模型的仿真时间自动分割为51个采样点来确定步长。
示例2
仍采用ode45解算方法,修改仿真时间为100 s之后重新仿真,得到的正弦波形已经失真,如图所示。
为何仅改变仿真结束时间就导致波形失真?原因在于模型Configuration Parameter对话框中的 Max/Min step size默认设置都为auto,ode45作为变步长解算器,自动根据仿真时间调整步长。ode45选取的步长过大,没有遵循采样定理,导致所采的点无法恢复正弦波的样子。设置Max step size为0.5 s,再次进行仿真即可得到平滑的正弦波,如图所示。
固定步长解算器也存在仿真波形失真的情况。采用ode4解算器,设置2.5s步长(Fixed-step size),仿真时间为10 s时波形如图所示。
可见步长过大,导致采样频率过低,采样点数太少,从绘制出来的波形根本无法识别这是正弦波。当把步长设置为0.5 s时再度仿真,如图所示,可得到平滑的正弦波形。
在对自己建立的模型进行仿真时不一定第一次尝试就能够得到满意的效果,可以多次尝试,选择不同的解算器,设置不同的步长,通过多次仿真比较之后确定解算器的参数设置。这里提供一个方法来查看所选的变步长解算器仿真结果的精确度是否可以接受:当经过多次尝试感觉仿真结果已经比较不错的时候,将Relative tolerance 设置为le-4(默认值为1e-3),再进行-次仿真。如果跟之前的结果没有明显差异,应当对当前的解算方法和仿真结果抱有信心。
(2) 数据导入/导出的设置
Configuration Parameters对话框中的 Data Import/Export页面用于导入工作空间的输入或将模型的仿真数据输出到工作空间。数据导入/导出页面如图所示。
模型某次仿真后保存的Final states参数,可以作为下一次仿真的Initial state参数来使用,将分开的两次仿真的状态值首尾衔接,将首次的仿真结果数据持续到下次仿真中去。所谓state,就是微分方程或差分方程中的状态量,微分值dx和差分值delta x都归于state的范畴,也正是由于这些state的存在,模块的输入和输出直接连通关系(Feed Through)被打破了。
示例3
通过一个例子了解一下如何通过状态量的保存和导入将仿真连续起来。下面的模型对仿真时间进行积分,每当积分值达到10时则将积分器清零之后再进行当前值的积分,模型如图所示。
模型模块参数
模型采用固定步长解算器,步长设为0.1 s;仿真时将Final states作为变量xFinal保存到工作空间中。解算器设置如图和数据导出设置如图所示。
运行仿真后,图像如图所示,在4.4 s左右积分第一次达到10并被清零,然后继续积分到5s仿真结束。如果希望知道第二次积分到10的时刻是多少,可将仿真结束时间调大,重新仿真,使仿真图像中显示出第二次达到10的图像。如果仿真模型很复杂,模块数量巨大,仿真过程耗时可能很多,即便初次5 s的仿真,可能已经经历了数十个小时或几天的时间,再重新来过实在是太浪费时间,必须想办法将其成功利用起来。这时Final states 的保存,Ini-tial states的导入就起到了关键作用。绘制图的数据和仿真的最终状态也得以保存在工作空间中,如图所示。
如图所示,将xFinal 设置为模型的Initial state,仿真时间如图5.1-22所示,将Start time 设为上次仿真的终止时间5 s,终止时间设置为10 s,这5 s 的时间长度足以保证积分值再次到达10。再次运行仿真,得到从上次仿真终止处起始的仿真图,如图所示。
从延续首次仿真终值状态的第二次仿真可以看出,在1.3s左右积分器第二次积分到10并清零。同样,如果想了解之后积分达到10是在多少秒,可以继续保存仿真的Final states再在后面仿真中作为初始状态导入和仿真。应用在仿真特别耗时的模型上(如电子电力方面)将节省很多时间。
导出数据时,在 Data Import/Export页面中勾选时间量和输出量,数据格式保存为Struc-ture with time。数据导出页面设置如图所示。
Workspace 中输出量的保存依赖于Out模块,模型中必须增加Out模块以保存输出变量到工作空间。如果不注重观察波形,可以在保存数据的信号线处仅使用Out而不使用Scope。替换之后的模型如图所示。
示例4
3.参考内容
[1] 孙忠潇.Simulink仿真及代码生成技术入门到精通[M].北京:北京航空航天大学出版社,2015.
本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。
作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙