Simulink美学之Bus模块

发布于:2025-07-26 ⋅ 阅读:(17) ⋅ 点赞:(0)

浏览过很多模型,信号之间的计算错乱复杂,所以很容易使用From,Goto这一对模块,导致模型看起来臃肿难以阅读。如果能够使用Bus模块把所有的模块有序的连接起来,信号流看起来会更加清晰,模型逻辑也更容易追溯。

下面以一个简单的车辆动力学的模型为例子。

01--驾驶员模块

①输入信号:1.目标车速  2.实际车速 3.P项参数 4.I项参数 5.采样时间

输出信号:1.油门踏板 2.制动踏板 3.车速速差

②基本逻辑:目标车速与实际车速差值进行PID计算,得到的正值为油门,负值为制动,且进行0-1范围的限幅,负值需要取绝对值。

比例环节输出为正值时,说明目标车速>实际车速,此时车辆有加速需求;

比例环节输出为负值时,说明目标车速<实际车速,此时车辆有制动需求;

③建模:

模块进行创建子系统:

02--控制器模块

①输入信号:1.油门踏板 2.制动踏板 3.驱动电机转速 4,.减速器速比 5.减速器效率

输出信号:1.驱动电机请求扭矩 2.制动扭矩

②基本逻辑:主要完成基本的电、液制动扭矩分配及驱动扭矩计算,根据车辆运行需求给电机发动扭矩指令。驱动扭矩=加速踏板开度×电机驱动外特性。当电机能满足制动需求时,由电机制动;当电机不能满足制动需求时,优先由电机制动,不足的制动扭矩由液压系统补足。当制动需求扭矩<=电机最大制动扭矩,则电机制动扭矩=制动需求扭矩,液压制动扭矩=0;当制动需求扭矩>电机最大制动扭矩,则电机制动扭矩=电机最大制动扭矩, 液压制动扭矩=制动需求扭矩-电机制动扭矩.

电机端制动需求扭矩=轮端制动需求扭矩/减速器速比/减速器效率

③建模:

创建子系统:

03--电机模块

①输入信号:1.驱动电机请求扭矩 2.驱动电机转速

输出信号:1.电机扭矩指令 2.电机输出功率

②基本逻辑:电机转速,将电机转速作为Lookup Table模块的输入,分别求出电机当前状态下的驱动外特性转矩数据和发电外特性转矩。将扭矩指令与驱动外特性转矩取小,然后再与发电外特性取大。

P=T×n/9550计算输出功率(机械功率)

③电机扭矩指令建模:

创建子系统:

电机输出功率建模:

创建子系统:

电机模块创建子系统:

04--齿轮模块

①输入信号:1.电机扭矩指令 2.轮边转速

输出信号:1.轮边扭矩 2.电机转速

②基本逻辑:通过速比有电机扭矩计算轮边扭矩,通过速比由轮边转速计算电机转速

③建模:

创建子系统:

05--轮边力计算模块

①输入信号:1.轮边扭矩 2.制动扭矩 3.车速

输出信号:1.轮边力 2.轮边转速

②通过公式及速比计算得到轮边力及轮边转速

③建模:

创建子系统:

 06--车速计算模块

①输入信号:1.轮边力 2.整车质量 3.重力加速度 4.滚动阻力 5.风阻系数 6.迎风面积 7.空气阻力 8.道路坡度角 9.质量换算系数

输出信号:1.车速 2.行程

基本逻辑:根据公式求得加速度

上式参数从左到右上到下分别为:加速度,车辆驱动力,行驶阻力,质量换算系数,整车质量

汽车行驶阻力的计算公式:

行驶阻力的计算公式

汽车行驶时受到滚动阻力、空气阻力和坡道阻力,如下式所示:

③建模:

行驶阻力:

创建子系统:

加速度计算:

创建子系统:

07--电池模块

①输入信号:1.驱动电机输出功率 2.单体电池内阻 3.单体电池串数 4.单体电池容量 5.SOC初始值 6.SOC最小值

输出信号:1.SOC

②基本逻辑:通过安时积分法求得消耗的SOC,初始SOC-消耗的SOC等于剩余SOC

③建模:

创建子系统:

08--子系统常规连接

那么现在我们有如下7个子系统了

找到对应信号进行连线,如下图:

09--参数设置

①Driver模块

veh_spd_Kp = 0.5;(可标定)

veh_spd_Ki = 0.02;(可标定)

Dt = 0.01;

如下3个饱和模块直接按照下标设置参数。

②控制器模块

gear_ratio = 9.7;减速器速比

gear_efficiency = 0.97;减速器效率

三个查表模块参数如下:

③电机模块

Tq Calc子系统内的查表模块参数MaxTq和MinTq和控制器模块内的一致

Pwr Calc子系统的查表模块参数设置如下

可以创建m脚本,把参数填进去

饱和模块参数如下设置:

④齿轮模块

无参数设置,速比和效率参照前面模块

⑤轮边力模块

roll_rad = 0.327;轮胎的滚动半径,单位:m

⑥车速计算模块

veh_mass = 1500 kg;车辆整备质量

g = 9.8 m/s^2;重力加速度

f = 0.01;车辆滚动阻力系数

Cd = 0.28;车辆风阻系数

A = 2.3;车辆迎风面积,单位:m^2

slpoe = 0;坡度,单位:%

rot_coeff = 0.05;质量换算系数

饱和模块设置如下:

0.377*电机最大转速*轮胎半径*减速器速比*3.6

⑦电池模块

batt_ns = 100;串联个数

cell_resis = 0.003;电池内阻,Ω

batt_np = 40;并联个数

cell_cap = 4.5;电池单体容量,Ah

soc_ini = 95;初始SOC,%

soc_min = 5;最低许用SOC

OCV 电压设置如下:

饱和模块设置如下

10--运行仿真

设置求解器如下:

参数配置好之后总体如下:

tgt_veh_spd = 100;目标速度设置常数100

观测电机转速

观测轮边转速

观测行驶距离

观测soc

发现SOC的值不是从初始值95开始,而是从0开始,导致右边SOC在消耗过程中因为纵轴值过大看上去而没有什么变化。

需要把如下delay模块的初始值从0改为95

再仿真

11--Bus模块提供模型可读性

这个模块搭建完成后,线条杂乱,输入输出不够清晰,可以使用Bus模块来进行模型的美化

①整理输入信号集中进Bus模块

②处理驾驶员模块

输入通过Bus Selector模块进行输入信号的选择

输出信号通过Bus Creator 进行集中起来

这里还有个act_veh_spd的接口等会再处理

 ③处理控制器模块

同样的方式处理

这里还有个mot_spd_act接口等会再处理

 ④电机模块

⑤齿轮模块

这里的whl_spd的信号等会处理

⑥轮边力模块

这里的act_veh_spd信号等会处理

⑦电池模块

⑧车速计算模块

⑨输出信号梳理

这里需要使用3个Goto模块,作为前面有些模块的输入信号

把这些信号也可以并入到最开始的输入bus信号内

再把之前的遗留未处理的信号进行处理即可,此处只举下列一个例子,其他同理

 最终整体效果如下:

 运行仿真,和之前的模型进行对比,结果一致

将子系统外观替换如下:

将子系统进行封装,在封装选项卡中使用下面的代码

text(.52,.01,char(get_param(gcb,'Tag') ), 'horizontalAlignment','center','verticalAlignment','bottom' )
disp(get_param(gcb,'Name'))

 总体效果如下:

12--小结 

没使用Bus之前,

使用Bus之后,

 

 可以看到每个功能非常清晰,信号线之间没有任何交叉,输入输出都在一起比较明确,这样做的好处是能够大大提高模型阅读的可读性,增加工作效率,尤其是适配较为复杂的模型任务时尤为重要。


网站公告

今日签到

点亮在社区的每一天
去签到