第三章 EPS控制策略:基础助力、回正与阻尼控制

各位工程师朋友,今天我们聊聊EPS控制策略的核心三件套。说实话,这三个东西搞明白了,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控制策略的这三个核心模块,你搞懂了吗?下一章我们聊聊更高级的——主动安全控制与功能安全,那才是真正考验系统架构能力的地方。


专注资料整理