4. 电流环PI控制:PI控制器原理、电流环解耦、PI参数整定方法、抗积分饱和实现

电流环,是电机控制三环中最内的一环,也是响应最快的一环。说白了,位置环和速度环的指令最终都要靠电流环去执行。如果电流环调不好,外面两环再漂亮也是空中楼阁。今天我们就来把电流环的PI控制彻底聊透。

4.1 PI控制器原理:从比例到积分

PI控制器,全称比例-积分控制器。它的输出由两部分组成:

  • 比例项(P):对当前误差做出即时反应。误差大,输出就大;误差小,输出就小。但纯比例控制会有静差,也就是永远差那么一点点。
  • 积分项(I):对过去误差的累积。只要误差存在,积分项就会一直增长,直到把静差消除。

数学表达式很简单:

u(t) = Kp * e(t) + Ki * ∫e(t)dt

其中 e(t) 是目标电流与实际电流的差值,Kp 是比例增益,Ki 是积分增益。

我的经验: 刚开始做电流环时,我总想把Kp调得很大,觉得响应越快越好。结果电机嗡嗡响,电流波形像锯齿。后来才明白,电流环的带宽受限于PWM频率和采样频率,Kp不是越大越好。

4.2 电流环解耦:为什么需要它?

在同步电机(PMSM)的dq坐标系下,d轴和q轴并不是独立的。你想想看,d轴电压方程里含有q轴电流项,q轴电压方程里也含有d轴电流项。这就是交叉耦合。

如果不做解耦,会出现什么情况?

  • 你调节q轴电流(控制转矩),d轴电流会跟着波动。
  • 你调节d轴电流(控制弱磁),q轴电流也会受影响。
  • 两个环路互相干扰,调试起来非常痛苦。

解耦的核心思想很简单:把耦合项当作前馈补偿掉。

标准的解耦公式如下:

Vd_ref = Vd_pi - ω * Lq * Iq
Vq_ref = Vq_pi + ω * Ld * Id + ω * ψf

其中:

  • Vd_pi、Vq_pi 是PI控制器输出的原始电压
  • ω 是电角速度
  • Ld、Lq 是d/q轴电感
  • ψf 是永磁体磁链
关键点: 解耦的精度取决于电机参数的准确性。如果Ld、Lq、ψf与实际偏差太大,解耦效果反而会变差。我在项目中遇到过参数不准导致解耦失效的情况,后来用离线辨识+在线修正才解决。

4.3 PI参数整定方法:从理论到实战

参数整定是电流环调试中最磨人的环节。我常用的方法有三种,按推荐顺序排列:

4.3.1 基于带宽的整定法(推荐)

这种方法从系统带宽出发,直接计算出Kp和Ki。公式如下:

Kp = L * ω_bw
Ki = R * ω_bw

其中:

  • L 是电机电感(d轴或q轴)
  • R 是电机相电阻
  • ω_bw 是你期望的电流环带宽(rad/s)

带宽怎么选?一般取PWM频率的1/10到1/20。比如10kHz的PWM,带宽可以设在500~1000Hz(约3140~6280 rad/s)。

避坑指南: 我曾经把带宽设得太高,结果电流环出现振荡。后来发现是采样延迟和PWM更新延迟导致的相位裕度不足。建议从低带宽开始,逐步往上加,直到电流波形出现轻微振荡,再回调20%。

4.3.2 试凑法(适合没有电机参数的场景)

如果你手头没有准确的电机参数,可以用试凑法:

  1. 先把Ki设为0,只调Kp。
  2. 逐渐增大Kp,直到电流响应出现临界振荡。
  3. 记录此时的Kp值,记为Kp_crit。
  4. 取Kp = 0.6 * Kp_crit,然后加入Ki。
  5. Ki从0开始增加,直到静差消除且不产生超调。

4.3.3 基于模型的自整定(进阶)

一些高端驱动器支持自动测量电机参数并计算PI参数。原理是注入高频信号,通过响应反推L和R,然后套用带宽法公式。这个方法我用的不多,因为大多数项目没有这个条件。

4.4 抗积分饱和实现:别让积分“飞”了

积分饱和,是电流环调试中最容易踩的坑之一。你想想看,当电流指令突然增大,PI输出会迅速达到电压限幅值。此时积分项还在继续累积,等电流误差反向时,积分项需要很长时间才能退回来,导致严重的超调甚至振荡。

常用的抗积分饱和方法有:

方法 原理 实现复杂度 效果
积分限幅法 给积分项设置上下限 低 一般
条件积分法 只在未饱和时积分 低 较好
反计算法 饱和时反向修正积分 中 优秀
积分分离法 误差大时停止积分 低 较好

我个人最推荐反计算法(Back-Calculation),实现起来也不复杂:

// 反计算法抗积分饱和
float pi_controller(float error, float *integral, float Kp, float Ki, float Kc, float limit) {
    float output = Kp * error + *integral;
    
    // 限幅
    float output_sat = clamp(output, -limit, limit);
    
    // 计算饱和差值
    float diff = output_sat - output;
    
    // 用饱和差值反向修正积分
    *integral += Ki * error + Kc * diff;
    
    return output_sat;
}

其中Kc是反计算增益,一般取1/Kp左右。这个方法的妙处在于:饱和时积分项会被“拉回来”,不会越积越大。

注意: 抗积分饱和不能完全依赖算法,硬件上也要留够电压裕量。我见过一个案例,算法写得再好,但母线电压本身就偏低,电流环一启动就饱和,神仙也救不了。

4.5 电流环PI控制知识体系

下面这张图总结了电流环PI控制的核心知识点和它们之间的关系:

电流环PI控制知识体系 电流环PI控制 PI控制器原理 电流环解耦 参数整定方法 抗积分饱和 比例项:即时响应误差 积分项:消除静差 d-q轴交叉耦合 前馈补偿公式 带宽法:Kp=L*ω, Ki=R*ω 试凑法:临界比例度 反计算法(推荐) 积分限幅/条件积分 调试建议 先调P再调I → 确认解耦参数准确 → 加入抗积分饱和 → 从低带宽逐步提升

4.6 实战中的几个坑

最后,分享几个我在项目中踩过的坑,希望能帮你少走弯路:

  • 采样噪声放大:Kp太大时,电流采样中的噪声会被放大,导致PWM占空比抖动。建议在电流采样后加一阶低通滤波,截止频率设为电流环带宽的2~3倍。
  • 积分项初始化:电机启动时,积分项应该从0开始。我见过有人忘了初始化,积分项残留了上次停机的值,一启动就冲出去。
  • 参数切换平滑:如果要在运行中切换PI参数(比如弱磁区和非弱磁区),一定要做线性过渡,否则电流会突变。
  • 电压前馈:在高速区,反电动势很大,PI控制器需要输出很高的电压。加上电压前馈可以减轻PI的负担,让响应更快。

电流环的调试没有捷径,但掌握了这些原理和方法,至少能让你少走弯路。嗯,今天就先聊到这里,剩下的我们实战中见。