本来还想继续把MBD有关代码生成的开发的细节再讲讲,后来我的“产品经理”炸了,开始催更物理模型的文章了,那就先来说说物理模型的话题,后面再去补全代码生成的部分。
那首先来说说为什么要建立物理模型,物理模型一方面可以快速建立被控对象的模型,去支持算法和功能的仿真。另一方面物理模型也可以用来支持Mil / Hil测试,对于真实刷写到XCU中的算法代码进行验证。 本文先从0D/1D的系统仿真的层面介绍物理模型的搭建。
首先从系统层面来看,车辆系统级别的需求是整车需要有正常行驶的功能,分解到下一个级别的需求就是,车需要有电机,发动机,电池,变速箱等部件去使车辆能够运行起来。所以整车动力系统级别的物理模型的架构基本就搭建出来了。如下图所示,此处做个说明,图中所示的并未显示出feedback的信号,具体的架构以后续的具体模型为准。
本文所使用的是Simscape的工具箱,有人可能会问对于系统级别的仿真来说,用Excel表格或者简单的公式列出用simulink搭建不就可以了,为什么还要使用工具箱?首先从时间成本上考虑,汽车纵向动力学的基本公式simscape已经封装在了模型中,直接使用能够省去simulink搭建模型和调试的时间,更为重要的方面来说,对于动力系统开发和仿真,后续对于精度更高的功能更全的物理模型,可能还需要热仿真和液压以及电力电子的仿真。目前来说Mathworks的工具箱中已经有这些方面的工具可以使用诸如 Simdriveline, SimFlulid, SimElectrical以及Thermal的模块,在做联合仿真的时候可以得到更为精确的仿真模型,也使得仿真的精度更高。
这个系列的第一篇文章主要就是实现汽车动起来的功能,为了方便阐述,接下来选择使用单动力源去驱动车辆的最简单的模型来做一个说明。也算是Simscape的一个基础的讲解。
首先我们以matlab2018b为例在Simscape的库中找到Tires & Vehicle
如上图所示,建立车辆与轮胎的模型,这里使用的是魔术轮胎和车辆模型的连接。在轮胎模型中可以设置轮胎相关的参数,实际工程中最实用的除了设置轮胎的半径之外,最重要的就是滑阻的设置,一般来说在系统仿真阶段都会有对标车型的滑阻数据,输入后就可以进行动力性仿真。
参数的具体说明,在help文档中做了很清楚的介绍。这样通过实验所得的滑阻曲线进行仿真会比传统的阻力建模的模型更加精确。
说完参数再来介绍下具体的连线,A端口是机械连接的输入所以连接port_A,在完整的车辆模型中A的外层连接的就是差速器或者减速器。A端连接后与车辆模型的NR或者NF相连,NR和NF分别表示的是前驱或者后驱的模式,如果是四轮驱动那么可以在这里再添加两个轮胎连接到NF端,做一个四驱仿真的模型。H端就是起到一个车桥的作用,两轮连接后同时连接到车辆的H端。S端口可以用来测量车辆运动后轮胎的滑移率,从而来判断轮胎是否出现打滑的现象。
说完车轮,再来说整车部分。在整车部分Simscape就提出了一个整车模型,
在模型中可以输入图中所示的参数,参数越准确越能够在仿真结果中看到更加准确的经济型和动力性的数据。通常在工程上表格中的数据可以用参数定义,然后在M脚本中进行具体数值的定义。举个例子,这样的好处是可以实现多个不同车辆的自动化仿真,对于仿真或者系统工程师来说省事很多,不需要每仿真一个车型就要打开模型进行一个参数设置。
这个封装模型的具体方程在help文档中也有具体的解释和推导,对工程师来说工具用起来都是简单的,但是具体参数为什么要这么设置,还是要从源头上进行思考的。
上面介绍的时候已经提到轮胎模型中设置了具体的滑阻,所以风速在这里可以设置为0,道路的坡度在正常动力性仿真中可以设置为0,如果后期在做爬坡度仿真的时候可以在这里进行设置。
这样我们的整车和轮胎模型已经搭建完成。这时候可能有人会提出问题,simulink和simscape怎么进行交互,其实在模型里面已经出现了这个模块,
“PS-S”的一个图标,PS表示的是物理模型,s代表simulink。PS-S自然是物理模型转换到simulink进行输出,如果是S-PS则表示的是simulink信号转换到物理模型进行输入。在上图所示中很重要的一点就是物理量意义的转换,无论是S-PS 还是PS-S都需要进行物理意义也就是单位的设置,这样在仿真的时候才不会出错。
接下来要介绍的就是下图所示的ideal torque source的部分,
在这个模块的上方,我也同时列出了ideal angular velocity source的模块。这两个模块都可以用来简单的表示一个动力源,从名称上也很容易看出,torque source表示的是对系统进行扭矩的输入,而angular source则是输入的转速。对于整车仿真来说通常逻辑部分是驾驶员有踏板输入转换到动力源的扭矩输出,所以在整车的仿真中通常使用torque source作为动力源的输入,这样将这个模块暂时替代掉port A作为系统输入。这时候如果进行仿真很容易出现如下的报错,
在整个模型中,还忽略掉了最重要的一点,需要进行求解器的配置,simscape模块有自己的求解器,添加过后如下图所示。
对于Simscape模块,可以独立于simulink的仿真模块独立设置自己的仿真求解器。这样就完成了整车部分的物理模块的建模。这时候就可以点击RUN看一下仿真结果,
仿真结果表明,我们在给了100Nm的输入后系统是可以给出位移和车辆速度的输出,证明整车模型的建模没有问题。在下一篇文章中,我们添加完整的动力源和变速箱后就可以完成整车模型的建模了。