4、电流环实战:参数整定与抗饱和策略

电流环是电机三环控制中最内层、响应最快的环。说白了,位置环和速度环的性能天花板,就是由电流环决定的。我见过不少工程师花大量时间调位置环参数,结果发现是电流环没整好,带宽上不去——嗯,那真是白费功夫。

这一章我们聚焦电流环的实战调参。我会把比例增益、积分增益的整定方法,限幅与抗饱和策略,以及调试中常见的波形问题,一次性讲清楚。

核心观点:电流环整定的目标是——快、准、稳。快指响应速度,准指稳态误差小,稳指不振荡、不饱和。

电流环整定知识体系 电流环整定 比例增益 Kp 整定 积分增益 Ki 整定 限幅策略 抗饱和策略 带宽与相位裕度 稳态误差消除 输出限幅 积分限幅 积分冻结 反向积分补偿 条件积分 整定顺序:先 Kp 后 Ki → 再设限幅 → 最后加抗饱和

4.1 比例增益 Kp 整定:找到带宽的边界

比例增益决定了电流环的响应速度。Kp 越大,系统对误差的反应越快,但过大会引起振荡甚至发散。

我个人习惯的整定方法是——先纯比例,后加积分。具体步骤:

  1. Ki 先设为 0,只保留比例项。
  2. 从小到大增加 Kp,同时观察电流反馈波形。
  3. 找到临界振荡点——当 Kp 增大到电流反馈开始出现等幅振荡时,记下这个值 Kp_crit。
  4. 取 Kp = 0.5 ~ 0.7 × Kp_crit,留出相位裕度。

我的经验:在伺服驱动器上调试时,我习惯用阶跃响应法。给一个 1A 的电流阶跃指令,看反馈电流的上升时间和超调量。一般上升时间控制在 1~2 个 PWM 周期,超调量不超过 5%,就算合格。

你可能会问:为什么不用更大的 Kp?我在一个项目中试过把 Kp 推到临界值的 90%,结果电机在低速时出现高频啸叫——那是电流环振荡的声音。嗯,从那以后我再也不敢把 Kp 往死里推了。

4.2 积分增益 Ki 整定:消除稳态误差

比例环节再大,也无法完全消除稳态误差。积分项就是干这个活的——它把过去的误差累积起来,持续修正输出。

Ki 的整定原则:

  • Ki 太小:稳态误差消除慢,响应有静差。
  • Ki 太大:积分过冲,系统出现低频振荡。

我常用的经验公式:Ki = Kp × (采样周期 / 时间常数)。时间常数一般取电流环期望带宽的倒数。比如期望带宽 1000 rad/s,时间常数就是 1ms。

实战建议:先设 Ki = 0.1 × Kp,观察稳态误差。如果 0.5 秒内误差还没消除,再逐步增大 Ki,每次增加 20%。直到稳态误差在 0.1 秒内收敛到 1% 以内。

我记得有一次调试一个 2kW 的伺服电机,Ki 设得偏大,结果电流波形像波浪一样起伏。用示波器一看,频率大概 20Hz——典型的积分振荡。把 Ki 砍掉一半,波形立刻平了。

4.3 限幅策略:保护你的硬件

电流环的输出最终要送到 PWM 调制器。如果输出值超过 PWM 的占空比范围(比如 0~100%),就会发生饱和。饱和不可怕,可怕的是饱和后积分项还在累积——这就是积分饱和问题。

限幅分两层:

限幅类型 位置 作用
输出限幅 PI 控制器输出端 限制最终输出值,防止 PWM 过调制
积分限幅 积分项内部 限制积分累积值,防止积分饱和

注意:输出限幅值一般设为 PWM 最大占空比的 95%~98%,留一点余量。积分限幅值通常设为输出限幅值的 80%~90%。

4.4 抗饱和策略:别让积分失控

积分饱和是电流环最常见的坑。当输出饱和时,误差还在,积分项继续累积,等误差反向时,积分项需要很长时间才能退回来——这就造成了很大的超调和滞后。

我常用的三种抗饱和方法:

  1. 积分冻结(Integral Clamping):输出饱和时,停止积分累积。这是最简单的方法,适合大多数场合。
  2. 反向积分补偿(Back-calculation):当输出饱和时,把实际输出与饱和值的差值反馈到积分输入端,快速退积分。适合对动态响应要求高的场合。
  3. 条件积分(Conditional Integration):只在误差小于某个阈值时才积分。适合需要快速响应的系统。

代码实现上,我习惯这样写:

// 电流环 PI 控制器(含抗饱和)
float current_pi_control(float err, float kp, float ki, float ts) {
    static float integral = 0.0f;
    float output, output_sat;
    
    // 比例项
    float p_out = kp * err;
    
    // 积分项(先累积)
    integral += ki * err * ts;
    
    // 积分限幅
    if (integral > INTEGRAL_LIMIT) integral = INTEGRAL_LIMIT;
    if (integral < -INTEGRAL_LIMIT) integral = -INTEGRAL_LIMIT;
    
    // 总输出
    output = p_out + integral;
    
    // 输出限幅
    if (output > OUTPUT_LIMIT) {
        output_sat = OUTPUT_LIMIT;
        // 积分冻结:饱和时停止积分
        integral -= ki * err * ts;  // 回退本次积分
    } else if (output < -OUTPUT_LIMIT) {
        output_sat = -OUTPUT_LIMIT;
        integral -= ki * err * ts;
    } else {
        output_sat = output;
    }
    
    return output_sat;
}

我的习惯:在量产项目中,我偏爱积分冻结 + 反向补偿的组合。冻结防止积分无限增长,补偿让退出饱和的速度更快。你可以在调试时先用冻结,如果发现退出饱和后响应太慢,再加补偿。

4.5 调试常见问题与波形分析

调试电流环,示波器是最好的老师。我总结了几个典型波形问题:

现象 波形特征 可能原因 解决方法
高频振荡 电流反馈叠加高频正弦波(几百 Hz 以上) Kp 过大,带宽超过系统极限 降低 Kp,或增加低通滤波
低频振荡 电流波形缓慢起伏(10~50 Hz) Ki 过大,积分环节引入低频极点 降低 Ki,或检查积分限幅
阶跃响应过冲大 电流阶跃后超过目标值 20% 以上 Kp 偏大,或积分饱和 降低 Kp,检查抗饱和策略
稳态误差不消除 电流始终差一点到目标值 Ki 太小,或积分限幅太小 增大 Ki,或放宽积分限幅
输出饱和后恢复慢 电流从饱和区退出后长时间回不到目标 积分饱和,无抗饱和策略 添加积分冻结或反向补偿

避坑指南:我曾经在一个项目中,电流环怎么调都有 10% 的稳态误差。折腾了两天,最后发现是电流采样偏置没校准——ADC 零点漂了 50mV。所以,调电流环之前,先确认采样通道是干净的。这个坑我踩过,你别再踩了。

还有一个容易被忽略的点——PWM 死区时间。死区会造成电流波形在过零点附近出现畸变,表现为电流波形有「台阶」。如果发现电流波形在过零处不平滑,先检查死区补偿是否开启。