VCU策略控制之档位管理

VCU档位管理----档位判断

简介:
VCU作为整车控制的核心,通过汽车总线(如CAN/LIN总线)或硬线连接,实现对电池系统、电驱系统、热管理系统等关键部件的集中控制。它负责多个关键功能,包括档位控制、踏板信号管理、局域网内网络管理、车辆驱动管理、高压系统上下电管理以及整车能量管理等。
本文通过MBD开发的方式,通过SIMULINK对该功能进行建模。



需求分析与模块化建模

1.1 输入输出信号

信号定义:

信号名称信号描述信号类型
HW_b_ShfSW1档位输入SW1硬线信号
HW_b_ShfSW2档位输入SW2硬线信号
HW_b_ShfSW3档位输入SW3硬线信号
HW_b_ShfSW4档位输入SW4硬线信号
HW_b_BrkPedSt制动开关硬线信号
ESC_send_VehicleSpd车速CAN信号
MCU_send_MotorSpdFb车速CAN信号

1.2 功能描述

档位器输出4个硬线开关(SW1 SW2 SW3 SW4),有如下功能组合:

SW1SW2SW3SW4
P档0101
R档1100
N档1010
D档0110
Invalidq其他组合

在SIMULINK界面,创建4个硬线输入信号HW_b_ShfSW1~4。
在这里插入图片描述
将4个输入分别根据上表的档位对应的逻辑进行连接,因为每种档位只有唯一的二进制代码,所以用“与”的逻辑进行连接;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为了识别当前档位,我们需要给每个档位定义不同的输出值,比如后面的输出接收到1,那就代表当前的档位为P档。我们利用Enable Subsystem来达到这个效果,Subsystem通过“Enable”来进行触发,其触发的逻辑为:当Enable接收的值为ture时(接收Boolean量),则这个子系统就开始工作了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后通过Merge模块,将这几个档位码收集到一块,给到档位输出GEAR。Merge的规则是“喜新厌旧”,他接收当前时刻最新的值。
我们完成了有效档位的搭建,接下来来搭建无效档位模块。


根据挡位逻辑表,因为有效挡位的二进制档位码是唯一的,那么无效挡位是去除掉这些有效挡位的二进制组合。根据前面搭建的模块逻辑,只要挡位是有效的,那他们相与的结果为1,无效则为0。那么将有效挡位PRND相加的结果不为1时,那这个挡位就是无效的。通过Goto模块来引出之前的档位逻辑信号。
在这里插入图片描述

通过from模块,来将这4个Condition相加,如果结果≠1,则信号无效;这里还有个data type conversion,因为Add模块只接受非Boolean变量,所以要将Boolean变量转成uint8、uint16、single这些变量。
在这里插入图片描述

1.3 挡位切换逻辑

VCU唤醒后的默认状态为P档,上电完成以后直到下电前都会实时读取当前的挡位信息。当挡位信号不是有效值时(非PRND档),如果前一时刻的档位为P档,则系统判断档位仍为P档;若前一时刻档位为其他无效挡位,则系统仲裁为N档;

这里有
一个时序需求:VCU的唤醒后和VCU上电完成后
一个判断需求:当前挡位是有效挡位还是无效挡位。如果是无效挡位还有一个分支,前一时刻的挡位是否有效;

先完成第一个关于时序的需求,假设VCU上电的时间为1s,那么在1s内这段时间可以认为是VCU唤醒之后,也就是VCU上电完成之前;
超过1s的这段时间就是VCU上电完成以后。
我们可以通过累加器的模型来达到这个目的

将系统的定步长调整成0.001s,也就是1ms。那么将本次输入与上次输入的值累加1000次的值再与compare to constant模块进行比较,如果输出为true,那代表时间为1s内,反之输出false,则为1s外。
在这里插入图片描述

在这里插入图片描述

还是利用Enable system这个模块,来触发1S内应该完成的任务。输出挡位为P,如果是1s外,那就要去读取当前时刻的挡位信息了。
再通过switch模块来判断,当前时刻是1s内还是1s外;


然后我们进行第二个需求设计,判断当前挡位的有效性判断。判断的条件是,挡位是否处于无效挡位状态,如果是GEAR_ERR = 0,代表当前挡位有效,走switch上面的路径,如果GEAR_ERR = 1,代表当前挡位无效,走switch下面的路径。
让我门来验证一下路径,假如当前挡位为无效挡位GEAR_ERR = 1,10?=> 为假,输出0;接着进入switch判断0≠0?= = 为假,走下面。ok;
假如当前挡位为无效挡位GEAR_ERR = 0,0 = 0 ?= => 为真,输出1;接着进入switch判断1≠0?
>为真,走上面。ok
在这里插入图片描述

第三个需求设计,当挡位是无效的时候,需要结合前一时刻的挡位信息,如果前一时刻是P档,则输出P档;如果前一时刻的挡位是非PRND档,则系统仲裁为N档。
我们需要完成获取前一时刻的挡位信息,那么就使用Uint delay这个模块,把他接到挡位输出的前面。
为什么不从图示位置接出来?因为图示位置包含了上电前后的信息,就是1s内和1s外都包含了。好像也可以,最终可以通过测试来看看能不能满足我们的需求。
在这里插入图片描述

接着是无效挡位区分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后用merge来组合起来,输出GEAR_REF代表实际输出的挡位


最后,其实可以在挡位确定的模块加入滤波消抖的模块,这样我们的模型可以看着更加合理一些
在这里插入图片描述

后续更新挡位切换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值