第四章 被控对象模型(二):变速箱模型(AT/DCT/CVT)建模原理、换挡逻辑与液压系统仿真
变速箱模型,说白了就是动力域控制器HIL测试里的“假腿”。你给控制器发换挡指令,它得像个真变速箱一样响应——升档、降档、锁止、打滑,一个都不能少。我刚开始做HIL测试时,总觉得变速箱模型就是个查表工具,直到有一次台架实测和模型对不上,查了三天才发现是液压响应时间常数设错了。嗯,从那以后我再也不敢小看这个模型了。
4.1 三大变速箱类型:AT / DCT / CVT 的核心差异
先理清一个基本问题:为什么HIL测试里要区分这三种变速箱?因为它们的控制接口和动态特性完全不同。你想想看,AT靠液力变矩器传递扭矩,DCT靠双离合器硬连接,CVT靠钢带和锥轮摩擦——这三者的数学模型,从状态方程到参数标定,几乎没有共同点。
| 特性 | AT(自动变速箱) | DCT(双离合变速箱) | CVT(无级变速箱) |
|---|---|---|---|
| 扭矩传递方式 | 液力变矩器 + 行星齿轮组 | 双离合器 + 平行轴齿轮 | 钢带 + 锥轮摩擦副 |
| 换挡执行机构 | 液压阀体 + 离合器/制动器 | 液压/电液离合器执行器 | 液压锥轮夹紧力控制 |
| 速比变化方式 | 离散档位(6~10速) | 离散档位(6~8速) | 连续速比(2.5~0.4) |
| 换挡过程特征 | 扭矩相 + 惯性相 | 扭矩交替 + 重叠控制 | 速比连续变化 |
| HIL建模难点 | 液力变矩器非线性 | 双离合器扭矩协调 | 钢带滑差与夹紧力耦合 |
我的经验:在HIL测试中,AT模型最容易出问题的是液力变矩器的闭锁滑差控制;DCT模型最头疼的是两个离合器的扭矩重叠区;CVT模型则要特别关注钢带夹紧力与速比变化的耦合关系。这三个坑,我每个都踩过。
4.2 AT变速箱建模:液力变矩器与行星齿轮组
AT变速箱的建模,核心是两个部分:液力变矩器和行星齿轮组。液力变矩器负责扭矩放大和减振,行星齿轮组负责实现不同速比。我个人习惯把这两个模块分开建模,再通过扭矩平衡方程耦合起来。
4.2.1 液力变矩器模型
液力变矩器的特性可以用三个关键参数描述:泵轮扭矩系数、涡轮扭矩系数、以及容量系数。这些参数通常来自台架试验数据,我们把它做成查表模型。
// 液力变矩器模型核心计算(C语言风格伪代码)
// 输入:泵轮转速 Np,涡轮转速 Nt
// 输出:泵轮扭矩 Tp,涡轮扭矩 Tt
float speed_ratio = Nt / Np; // 速比
float K = lookup_capacity_factor(speed_ratio); // 容量系数查表
float Tp = K * Np * Np; // 泵轮扭矩
float TR = lookup_torque_ratio(speed_ratio); // 变矩比查表
float Tt = TR * Tp; // 涡轮扭矩
// 闭锁离合器模型
if (lockup_active) {
float slip = Np - Nt;
float T_lockup = K_lockup * slip; // 闭锁滑差扭矩
Tt += T_lockup;
}
注意:液力变矩器模型在低速比(起步工况)时非线性非常强,查表分辨率不够会导致HIL测试中扭矩波动异常。我曾经因为容量系数表只给了20个点,导致起步工况下模型扭矩和实车偏差超过15%。建议速比0~0.8区间至少每0.05一个点。
4.2.2 行星齿轮组与换挡执行器
行星齿轮组的建模相对直接——根据当前档位确定速比,然后计算输入输出扭矩关系。真正的难点在于换挡过程中的离合器/制动器滑差控制。
换挡过程分为两个阶段:
- 扭矩相:正在分离的离合器扭矩下降,正在结合的离合器扭矩上升,输出扭矩保持不变。
- 惯性相:离合器完全滑差,输入轴转速变化,输出扭矩出现波动。
我建议在HIL模型里用状态机来管理换挡过程,每个阶段对应不同的扭矩分配策略。
4.3 DCT变速箱建模:双离合器扭矩协调
DCT的建模核心是双离合器的扭矩协调控制。说白了,就是两个离合器怎么“交接班”才能不顿挫。我在项目中遇到过一个问题:模型里两个离合器的扭矩重叠区设得太宽,结果HIL测试中换挡时间比实车长了200ms,后来发现是重叠区的扭矩分配系数没调好。
4.3.1 离合器扭矩模型
离合器传递的扭矩取决于压紧力和摩擦系数。在HIL模型里,我们通常用库仑摩擦模型:
// 离合器扭矩计算
// 输入:离合器压紧力 F_clutch,滑差转速 delta_w
// 输出:离合器传递扭矩 T_clutch
float mu = lookup_friction_coeff(delta_w, temperature); // 摩擦系数查表
float T_clutch = mu * F_clutch * R_eff * N_friction; // R_eff: 有效摩擦半径,N_friction: 摩擦面数
// 滑差状态判断
if (fabs(delta_w) < SLIP_THRESHOLD) {
// 结合状态:传递静摩擦扭矩
T_clutch = min(T_input, T_clutch_max);
} else {
// 滑差状态:传递动摩擦扭矩
T_clutch = mu * F_clutch * R_eff * N_friction;
}
技巧:DCT换挡过程中,两个离合器的扭矩之和应该等于输入扭矩。我习惯在模型里加一个扭矩协调模块,实时计算两个离合器的目标扭矩分配,然后通过PID控制器跟踪。这样换挡过程的扭矩波动可以控制在5%以内。
4.3.2 预选档逻辑
DCT的一个关键特性是预选档——当前档位工作时,下一个档位已经挂好。在HIL模型里,预选档逻辑需要模拟变速箱控制单元(TCU)的决策过程:根据车速、油门、驾驶模式,提前确定下一个目标档位,并控制同步器动作。
4.4 CVT变速箱建模:钢带与锥轮夹紧力控制
CVT的建模思路和AT、DCT完全不同。它没有离散档位,速比是连续变化的。核心控制量是锥轮的夹紧力——夹紧力大了,钢带不打滑但效率低;夹紧力小了,效率高但容易打滑。这个平衡点,就是CVT建模的难点。
4.4.1 速比变化模型
CVT的速比变化取决于主动轮和从动轮的半径变化,而半径变化又取决于锥轮的轴向位移。在HIL模型里,我们通常用一阶惯性环节来模拟液压执行机构的响应:
// CVT速比变化模型
// 输入:目标速比 ratio_target,当前速比 ratio_current
// 输出:速比变化率 d_ratio_dt
float tau = lookup_time_constant(ratio_current, oil_temperature); // 时间常数查表
float d_ratio_dt = (ratio_target - ratio_current) / tau;
// 速比限幅
if (d_ratio_dt > RATE_MAX) d_ratio_dt = RATE_MAX;
if (d_ratio_dt < -RATE_MAX) d_ratio_dt = -RATE_MAX;
避坑指南:我曾经在CVT模型里忽略了钢带滑差模型,结果HIL测试中急加速工况下,模型输出的车速比实车高了10%。后来加上滑差模型——滑差率与夹紧力、传递扭矩的关系——才把误差降下来。记住:CVT模型里,钢带滑差不是可选项,是必选项。
4.5 液压系统仿真:从电磁阀到执行器
不管是AT、DCT还是CVT,最终控制执行器都是液压系统。液压系统仿真在HIL测试里是个“隐形杀手”——很多人只关注变速箱的机械特性,忽略了液压响应时间,结果模型和实车对不上。
液压系统建模的核心要素:
- 电磁阀特性:电流-压力特性曲线,通常用查表+一阶滞后模拟
- 油路动态:压力传播延迟,用传输延迟模块模拟
- 执行器响应:活塞/阀芯的位移,用质量-弹簧-阻尼系统建模
- 温度影响:油液粘度变化,影响压力响应时间
// 液压执行器响应模型
// 输入:电磁阀目标电流 I_target
// 输出:离合器压紧力 F_clutch
// 电磁阀响应(一阶滞后)
float tau_valve = 0.005; // 5ms时间常数
float I_actual = low_pass_filter(I_target, tau_valve);
// 电流-压力转换(查表)
float P_valve = lookup_current_to_pressure(I_actual, oil_temperature);
// 压力传播延迟
float P_delayed = transport_delay(P_valve, delay_time);
// 活塞位移计算
float x_piston = (P_delayed * A_piston - F_spring) / K_spring;
// 离合器压紧力
float F_clutch = x_piston * K_clutch_disk;
关键参数:液压系统的响应时间通常在10~50ms之间,具体取决于油路长度、油温和电磁阀类型。在HIL测试中,如果液压模型的时间常数和实车偏差超过5ms,换挡品质的测试结果就会失真。我建议用实车标定数据来校准液压模型的时间常数。
4.6 换挡逻辑与状态机设计
换挡逻辑是变速箱模型的“大脑”。在HIL测试中,我们需要模拟TCU的换挡决策过程,包括:换挡点计算、换挡类型判断(升档/降档/跳档)、以及换挡过程管理。
我个人习惯用有限状态机(FSM)来管理换挡过程:
// 换挡状态机(简化版)
enum ShiftState {
SHIFT_IDLE, // 稳态
SHIFT_TORQUE_PHASE, // 扭矩相
SHIFT_INERTIA_PHASE, // 惯性相
SHIFT_COMPLETE // 换挡完成
};
// 状态转换逻辑
switch (current_state) {
case SHIFT_IDLE:
if (shift_requested) {
start_torque_phase();
current_state = SHIFT_TORQUE_PHASE;
}
break;
case SHIFT_TORQUE_PHASE:
if (torque_phase_complete()) {
start_inertia_phase();
current_state = SHIFT_INERTIA_PHASE;
}
break;
case SHIFT_INERTIA_PHASE:
if (inertia_phase_complete()) {
finalize_shift();
current_state = SHIFT_COMPLETE;
}
break;
case SHIFT_COMPLETE:
current_state = SHIFT_IDLE;
break;
}
我的建议:换挡状态机里一定要加超时保护。我曾经遇到过HIL测试中模型卡在扭矩相出不来,导致整个测试用例超时。加一个看门狗定时器,如果某个阶段超过最大时间,强制进入安全状态。
4.7 变速箱模型知识体系总览
下面这张图总结了变速箱模型的核心知识结构,方便你在HIL测试中快速定位问题。
这张图把变速箱模型从类型选择到HIL验证的完整链路串起来了。你在搭建模型时,可以按这个结构逐层实现:先确定变速箱类型,再实现核心机械模型,然后加上液压系统,最后用状态机管理换挡逻辑。每一层都经过HIL测试验证后,再进入下一层——这样能避免“模型跑通了但不知道哪里有问题”的尴尬局面。