3. 汽车控制算法常用数学与逻辑模块

在 Simulink 中搭建汽车控制算法,本质上就是把控制律拆解成一组可复用、可验证的基础模块,再用信号线把它们按数据流方向连接起来。本节聚焦八类最常用的数学与逻辑模块:增益、求和、积分、微分、查表、饱和、死区、状态机。理解它们的输入输出关系、参数含义和典型用法,是后续搭建巡航、扭矩管理、热管理、车身稳定等控制逻辑的基础。

一、连续域四件套:增益、求和、积分、微分

增益(Gain)是最简单的比例环节,输出 y = K·u。在汽车控制中,它常用来把物理量换算成控制量,例如把车速误差(km/h)乘以增益 Kp = 0.8 得到扭矩请求(N·m/(km/h))。Gain 模块的“Multiplication”参数可选 Element-wise(K.*u) 或 Matrix(K*u),前者用于标量或逐元素缩放,后者用于多输入多输出的矩阵运算。若增益是随工况变化的,应改用 Product 或查表模块实现变增益。

求和(Sum)实现加减运算,输出 y = ±u1 ±u2 ±…。符号由“List of signs”参数决定,例如“+-”表示 u1 − u2。典型用法是计算误差:设定车速减去实际车速。需要注意 Sum 模块的输入端口顺序与符号列表一一对应,接错端口是常见错误。当输入较多时,建议用矩形图标并合理设置端口位置,避免连线交叉。

积分(Integrator)输出为输入的累积:y(t) = y(0) + ∫u dτ。它是消除稳态误差的关键,例如 PI 控制中的 I 项。Integrator 模块需要关注三个参数:Initial condition(初值,默认 0)、Limit output(输出限幅,防止积分饱和)、External reset(外部复位,如使能条件触发时清零)。在汽车控制中,积分器常配合抗饱和逻辑使用,否则执行器达到物理极限后积分项会持续累积,导致退出饱和时产生大幅超调。

微分(Derivative)输出为输入的近似变化率:y ≈ du/dt。它用于获取加速度、变化趋势,但纯微分对噪声极其敏感。Simulink 的 Derivative 模块采用数值差分,在离散或含噪声信号中容易产生尖峰。工程上更推荐用“高通滤波 + 差分”或直接用 Discrete Derivative 配合低通滤波,例如对车速信号先做 5 Hz 一阶低通,再差分得到加速度估计。

二、非线性环节:查表、饱和、死区

查表(Lookup Table)用一维或多维表格描述非线性映射,输出 y = f(x)。汽车控制中大量使用查表:发动机扭矩 MAP 是转速与负荷的二维表,换挡规律是车速与油门的二维表,电机效率是转速与扭矩的二维表。Simulink 提供 1-D、2-D、n-D Lookup Table。配置时要明确:断点向量(Breakpoints)必须单调递增;外插方法(Extrapolation)通常选 Clip 或 Linear,避免超出标定范围后输出异常;表格数据建议用标定工具生成后导入,而不是手工逐个填写。

饱和(Saturation)把输出限制在 [Lower limit, Upper limit] 区间内,超出部分被截断。它模拟执行器的物理极限,例如扭矩请求限制在 −200 N·m 到 300 N·m,电机功率限制在 0 到 150 kW。饱和模块本身不产生误差,但会与积分器耦合产生积分饱和,因此常与 Anti-windup 逻辑配合:当饱和发生时,停止积分或反向修正积分项。

死区(Deadzone)在输入绝对值小于阈值时输出为零,超过阈值后输出为输入减去阈值。它用于模拟机械间隙、传感器不敏感区或避免执行器频繁微动。例如方向盘转角小于 2° 时视为直行,不触发车道保持修正;踏板开度小于 3% 时视为未踩下。死区会引入非线性,在闭环中可能引起极限环振荡,需要结合具体对象评估。

三、状态机基础:从连续控制到逻辑切换

汽车控制中很多功能不是连续调节,而是按状态切换:上电自检、待机、就绪、运行、故障、下电。Stateflow 是 Simulink 中实现状态机的主要工具,其核心要素包括状态(State)、转移(Transition)、条件(Condition)、动作(Action)和默认转移。一个典型例子是巡航控制状态机:

Off  --[使能开关==1 && 车速>30]--> Standby
Standby --[Set键按下]--> Active
Active --[Cancel键 || 制动踏板>5%]--> Standby
Active --[故障标志==1]--> Fault
Fault --[故障清除 && 使能开关==0]--> Off

状态机与连续模块的接口通常通过 Simulink Function 或 Data Store Memory 传递变量。设计时要明确:状态互斥、转移条件无冲突、默认转移唯一、每个状态有明确进入/退出动作。状态机不宜过度复杂,单个 Chart 建议控制在 10 个状态以内,超出时应拆分为多个层次化状态机。

汽车控制算法常用模块:信号流与非线性环节 连续域控制链 设定值 r 目标车速 求和 Sum e = r − y 增益 Gain Kp = 0.8 积分 Integrator Ki = 0.15 求和 Sum P + I 被控对象 车辆动力学 反馈 y(实际车速) 非线性环节(作用于控制量) 饱和 Saturation [−200, 300] N·m 死区 Deadzone |u| < 2° 输出 0 查表 Lookup 转速×负荷 → 扭矩 微分 Derivative du/dt → 加速度 状态机(巡航控制逻辑切换) Off Standby Active Fault 使能&车速>30 Set键 故障 Cancel / 制动>5% 故障清除 & 使能关

四、模块组合的工程要点

把上述模块组合成完整控制律时,有几个反复出现的工程问题值得注意。第一,采样时间一致性:连续模块与离散模块混用时,必须明确各模块的采样周期,避免代数环和过零检测导致的仿真步长过小。第二,数据类型:汽车 ECU 常用定点或单精度浮点,Simulink 中应显式设置数据类型,避免自动推导出 double 导致代码生成后资源超限。第三,积分抗饱和:积分器与饱和模块串联时,应使用 Integrator 的 Limit output 或外接 Anti-windup 逻辑,典型做法是当饱和标志为真时把积分器输入置零。第四,查表断点单调性:断点必须严格递增,否则仿真报错或结果异常;标定数据导入前应做单调性检查。第五,状态机与连续模块的接口:状态切换瞬间可能引起控制量跳变,必要时在状态机输出后加速率限制或一阶滤波。

建议在模型中使用 Signal Logging 记录关键中间信号(误差、P 项、I 项、饱和标志、状态机当前状态),便于回放和问题定位。对于查表模块,可用 Lookup Table Editor 直接观察曲线形状,快速判断标定是否合理。
死区和饱和都会引入非线性,在闭环中可能引起极限环或持续振荡。若仿真中出现等幅振荡,应优先检查死区阈值是否过大、饱和限值是否与执行器实际能力匹配、积分器是否发生饱和。