第三章 EPS控制策略:基础助力、回正与阻尼控制
各位工程师朋友,今天我们聊聊EPS控制策略的核心三件套。说实话,这三个东西搞明白了,EPS系统开发你就入门了八成。
我个人习惯把EPS控制策略分成三个层次:基础助力控制是骨架,回正控制是灵魂,阻尼控制是血肉。三者缺一不可,配合好了才能给驾驶员一个「高级感」的转向手感。
3.1 基础助力控制:助力曲线标定
基础助力控制,说白了就是回答一个问题:驾驶员转方向盘用了多大力,电机该出多大力来帮他?
这个对应关系,就是助力曲线。我见过很多刚入行的工程师,上来就想着搞复杂的算法。其实啊,助力曲线标定才是EPS调校的「基本功」,就像练武先扎马步一样。
3.1.1 助力曲线的数学表达
典型的助力曲线是一个二维查表函数:
// 助力曲线查表函数(伪代码)
float lookupAssistCurve(float torque_handwheel, float vehicle_speed) {
// torque_handwheel: 方向盘扭矩 (Nm)
// vehicle_speed: 车速 (km/h)
// 定义助力曲线表 [车速索引][扭矩索引]
static const float assist_table[SPEED_BINS][TORQUE_BINS] = {
// 0 km/h 20 km/h 40 km/h 60 km/h 80 km/h 120 km/h
{ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // 0 Nm
{ 3.5, 3.0, 2.5, 2.0, 1.5, 1.0 }, // 1 Nm
{ 7.0, 6.0, 5.0, 4.0, 3.0, 2.0 }, // 2 Nm
{ 10.5, 9.0, 7.5, 6.0, 4.5, 3.0 }, // 3 Nm
{ 14.0, 12.0, 10.0, 8.0, 6.0, 4.0 }, // 4 Nm
{ 17.5, 15.0, 12.5, 10.0, 7.5, 5.0 }, // 5 Nm
// ... 更多数据点
};
// 二维线性插值
return interpolate2D(assist_table, torque_handwheel, vehicle_speed);
}
核心原则:
- 低速大助力:停车、挪车时,方向盘要轻,助力给到最大
- 高速小助力:高速行驶时,方向盘要稳,助力逐渐减小
- 中间过渡平滑:从低速到高速,助力变化不能有「台阶感」
3.1.2 标定中的坑
我在项目中遇到过一个问题:某款车低速时方向盘轻得「发飘」,高速时又重得「发涩」。查来查去,发现是助力曲线在40km/h附近有个拐点太陡了。
避坑指南:
我曾经因为助力曲线在60km/h处斜率突变,导致车辆在高速变道时方向盘出现「卡顿感」。后来花了整整两周重新标定曲线,才把这个问题解决。
记住:助力曲线的二阶导数要连续,这是手感平顺的关键。
3.2 回正控制:主动回正与阻尼控制
方向盘转过去之后,能不能自己回到中间位置?这就是回正控制要解决的问题。
你想想看,如果回正太慢,驾驶员会觉得车子「黏」;回正太快,又会「过冲」甚至震荡。这里面的平衡,全靠算法来拿捏。
3.2.1 主动回正控制
主动回正,就是当驾驶员松开方向盘后,系统主动施加一个力矩,帮助方向盘回到中间位置。
// 主动回正控制算法(简化版)
float calcReturnControl(float steering_angle, float steering_speed) {
// steering_angle: 方向盘角度 (deg)
// steering_speed: 方向盘转速 (deg/s)
// 回正力矩 = 角度比例项 + 速度阻尼项
float return_torque = Kp * steering_angle + Kd * steering_speed;
// 限幅保护
return clamp(return_torque, -MAX_RETURN_TORQUE, MAX_RETURN_TORQUE);
}
我的经验:
主动回正的Kp和Kd参数,我建议在实车上用「扫频法」来标定。先固定Kp,从小到大调Kd,找到临界阻尼点。然后再微调Kp,直到手感「跟手」为止。
3.2.2 阻尼控制
阻尼控制是回正控制的「刹车」。它防止方向盘回正时出现震荡,尤其是在低速大角度回正时。
我记得有一次,某款车在倒车入库时,方向盘回正后居然左右晃了三下才停住。这就是阻尼不够的表现。
| 工况 | 阻尼需求 | 典型参数 |
|---|---|---|
| 低速大角度回正 | 高阻尼(防震荡) | 阻尼系数 0.8~1.2 |
| 中速小角度回正 | 中阻尼(平顺感) | 阻尼系数 0.4~0.6 |
| 高速微调 | 低阻尼(响应快) | 阻尼系数 0.1~0.3 |
3.3 阻尼控制:高速阻尼与摩擦补偿
这一节我们专门聊聊「阻尼」——这个在EPS里无处不在却又容易被忽视的家伙。
3.3.1 高速阻尼控制
高速行驶时,方向盘如果太轻,驾驶员稍微一动车子就偏了,非常危险。高速阻尼控制就是为了解决这个问题。
说白了,就是给方向盘增加一个「虚拟的阻力」,让它在高速时更沉稳。
// 高速阻尼控制
float calcHighSpeedDamping(float vehicle_speed, float steering_speed) {
// 车速越高,阻尼越大
float speed_factor = lookupSpeedDampingFactor(vehicle_speed);
// 阻尼力矩与转向速度成正比
float damping_torque = speed_factor * steering_speed;
return damping_torque;
}
关键点:
- 高速阻尼不能太大,否则驾驶员会觉得「方向盘卡住了」
- 阻尼变化要平滑,不能有「突然变重」的感觉
- 建议在100km/h以上才开始显著增加阻尼
3.3.2 摩擦补偿
机械系统里总有摩擦——转向管柱的轴承摩擦、齿条与齿轮的摩擦、万向节的摩擦……这些摩擦会让方向盘手感「发涩」。
摩擦补偿,就是通过电机主动输出一个力矩,把这些「讨厌的摩擦力」抵消掉。
我曾经踩过的坑:
有一次做摩擦补偿标定,我直接把摩擦力测出来,然后全量补偿。结果呢?方向盘手感变得「发飘」,因为摩擦力被完全抵消后,系统失去了「机械感」。
后来我学乖了:摩擦补偿只补偿70%~80%,留一点摩擦力给驾驶员「手感反馈」。
3.3.3 摩擦补偿的数学模型
// 摩擦补偿算法
float calcFrictionCompensation(float steering_speed) {
// 库仑摩擦模型 + 粘滞摩擦模型
float coulomb_friction = FRICTION_COULOMB * sign(steering_speed);
float viscous_friction = FRICTION_VISCOUS * steering_speed;
// 总摩擦力估计
float total_friction = coulomb_friction + viscous_friction;
// 补偿比例(70%~80%)
float compensation = total_friction * 0.75f;
return compensation;
}
我的建议:
摩擦补偿的标定,最好在台架上做。用测力计测量不同转速下的摩擦力,拟合出库仑摩擦系数和粘滞摩擦系数。这样上实车后只需要微调补偿比例就行了。
3.4 三个控制的协同工作
讲到这里,你可能已经发现了:基础助力、回正控制、阻尼控制,它们不是各自为战的。
举个例子:高速变道时——
- 基础助力:提供适中的转向助力,让驾驶员轻松转动方向盘
- 回正控制:变道完成后,帮助方向盘自动回正
- 阻尼控制:防止回正过程中出现震荡,同时保持高速稳定性
这三个控制器的输出最终叠加在一起,送给电机执行。我习惯在代码里这样写:
// 最终电机目标力矩
float final_torque = assist_torque // 基础助力
+ return_torque // 回正控制
+ damping_torque // 阻尼控制
+ friction_comp; // 摩擦补偿
// 限幅保护
final_torque = clamp(final_torque, -MAX_TORQUE, MAX_TORQUE);
嗯,这里要注意:叠加顺序很重要。我一般先算基础助力,再叠加回正和阻尼,最后做摩擦补偿。因为摩擦补偿是「修正项」,放在最后可以避免它被其他控制量放大。
好了,这一章的内容就到这里。EPS控制策略的这三个核心模块,你搞懂了吗?下一章我们聊聊更高级的——主动安全控制与功能安全,那才是真正考验系统架构能力的地方。