3.档位控制子系统 Gear
是不是发现自己不会的模块越来越少?其实学习任何一项技能,只要敢于去尝试,每天进步一丢丢,就会发现压根没有自己想象的那么难。
这里主要讲下Matlab Fcn和Memory模块:
MATLAB Function 用户自定义模块
MATLAB Function是一个支持用户自定义编程的模块,用户可以使用M语言编写模块功能,并能够将所编写的M语言生成C代码,用于嵌入式开发。
双击该模块不会弹出之前类似的设置对话框,而是M代码编辑窗,和MATLAB脚本格式视窗相似。
我们对图中所示简单程序一行行来解释:
Function Gear_Out = fcn(Gear_In, brake, Vehicle_Speed, Gear)
该行定义模块的输入输出变量,如果你新建一个MATLAB Function模块就会发现其
中的套路。
y代表用户定义的输出变量,u代表输入变量,显然u可以是多个变量。
那么模型中就定义了Gear_In, brake, Vehicle_Speed, Gear四个输入变量,和Gear_Out一个输出变量,所以代码敲完回到Simulink窗口看到的模块就是下面这个模样:
第二行%#codegen,对程序没有实际影响,目的是为了让静态代码分析器Code Analyzer对代码进行诊断并提示用户修改可能在代码生成过程中导致错误的书写格式。
第四行开始就是程序主体,只要之前有一点编程基础应该就能理解这个函数的意思:当满足条件brake==1&&Vehicle_Speed<3时,就输出gear_in,否则输出gear。
实际工程开发中为什么这么定义?大家知道电动车通常只有R,N,D,P四个挡位,车辆行驶过程中前进用D挡后退用R挡,而两者在速度较高时是不允许切换的,否则会破坏减速器的齿轮机构,所以要加上踩制动和速度限制的前提条件。
Memory 记忆模块
Memory模块将前一步或者前一采样时刻的输入作为输出,即采用保持功能。放在这个模型中,就是当条件不满足时,挡位不进行切换,依然保持前一时刻的挡位。
这个子系统中除了MATLAB Function,其余部分都是对挡位输入有效性的判断,同一时刻如果D, R挡都置1,则会报错(即满足下图>=2的判断条件),因为不可能出现驾驶员同时要前进和后退的情况。
而除了这种错误,D, R挡的信号都要正确,才能输出挡位的变化,即满足D == 1 & R == 0或D == 0 & R == 1,这都是工程应用上功能安全和防错的考虑。
4.主继电器控制子系统 Main_Relay_C
这个部分主要是判断有无系统故障发生,以准许进行高压上电,从而使车辆进入Ready On模式。
上图模块都已经在前面的章节讲到过,我们分别看下其中两个子系统:
上图最上方有个阶跃信号模样的图标,表示这个是使能子系统模块。
Enabled Subsystem 使能子系统
这个模块可以从模块库中直接拷贝,如下图,也可以在普通的子系统中通过添加Enabled模块来实现。
当输入使能端口的值大于0时,则子系统被执行,否则子系统不执行。不执行时可以通过选择held还是reset来实现输出的保持或者重置。
再看下另外一个Overtime子系统:
5.车速计算子系统 V_velocity
由简单的Gain模块、Constant模块、四则运算模块等构成。