4、电流环设计:PI控制器参数整定、电流环带宽分析

好,咱们接着聊电流环的设计。前面我们把电流采样、坐标变换这些基础打好了,现在要动真格的了——调PI参数。

说实话,我刚入行那会儿,觉得PI参数整定就是玄学。调来调去,要么电机嗡嗡响,要么电流波形像锯齿。后来做多了才发现,其实背后是有清晰逻辑的。今天我就把这套逻辑掰开揉碎了讲给你听。

4.1 PI控制器的基本形式

先看最常用的数字PI控制器表达式。在电流环里,我们用的是增量式PI,避免积分饱和带来的麻烦。

// 增量式PI控制器
float pi_controller(float error, float kp, float ki, float ts)
{
    static float integral = 0.0f;
    float output;

    // 积分项累加
    integral += error * ts;

    // 限幅,防止积分饱和
    if (integral > INTEGRAL_MAX) integral = INTEGRAL_MAX;
    if (integral < -INTEGRAL_MAX) integral = -INTEGRAL_MAX;

    // PI输出
    output = kp * error + ki * integral;

    return output;
}

这里有个细节——ts是电流环的采样周期。我见过不少新手直接把ki当常数用,结果换了个采样频率,系统就崩了。嗯,这里要注意:ki的单位是V/(A·s),它和采样周期是耦合的。

4.2 参数整定的工程方法

理论上的零极点对消法、对称最优法,咱们课程里会讲。但今天我想先说说我实际项目中最常用的方法——带宽法

说白了,就是先定电流环的带宽,再反推PI参数。你想想看,电流环的本质是个一阶惯性系统,它的闭环传递函数可以近似为:

G_cl(s) ≈ 1 / (1 + s / ω_c)

其中ω_c就是电流环带宽(单位:rad/s)。

那怎么定这个带宽呢?我个人习惯遵循两个原则:

  • 带宽不能超过开关频率的1/10。比如你PWM频率是10kHz,那电流环带宽最多设1kHz(约6283 rad/s)。再高就控制不住了,会出现振荡。
  • 带宽要高于速度环带宽的3~5倍。这样才能保证速度环看到的是“理想”的电流响应。

核心公式:

对于表贴式永磁同步电机(Ld = Lq = Ls),PI参数与带宽的关系:

Kp = ω_c * Ls
Ki = ω_c * Rs

其中Ls是定子电感,Rs是定子电阻。

这个公式怎么来的?其实就是把PI控制器的零点对消掉电机的电气极点。我在一个伺服驱动器项目里用过这套参数,效果相当不错,电流响应几乎没有超调。

4.3 带宽分析——到底能跑多快?

带宽不是你想设多高就设多高的。有几个硬约束:

限制因素 说明 典型值
PWM开关频率 电流环采样率通常等于PWM频率,带宽上限约为f_sw/10 10kHz PWM → 1kHz带宽
数字控制延迟 包括采样延迟、计算延迟、PWM更新延迟,约1.5~2个采样周期 2个Ts的延迟
反电动势干扰 高速时反电动势会耦合到电流环,降低有效带宽 随转速升高而恶化
电感饱和 大电流时电感下降,实际带宽会变高,容易振荡 注意降额设计

我曾经踩过的坑:

有一次做高速主轴电机,我把电流环带宽设到了1.5kHz(PWM 12kHz)。仿真时波形漂亮得很,结果一上电,电机高频啸叫,电流波形全是毛刺。后来用示波器抓PWM更新时刻才发现——数字延迟导致相位裕度不够了。最后老老实实降到800Hz,问题解决。

所以我的建议是:理论计算值打七折,留足裕量

4.4 实际整定步骤

好,理论讲完了,咱们来点实操。我一般按下面几步走:

  1. 先测电机参数:用LCR表测Rs和Ls,或者用自整定程序。别信铭牌数据,那玩意儿误差能到20%。
  2. 初算PI参数:按上面公式,带宽取开关频率的1/15作为起点。比如10kHz PWM,带宽取666Hz(约4189 rad/s)。
  3. 上电调试:给一个阶跃电流指令(比如1A),看响应波形。
  4. 微调Kp:如果上升时间太慢,增大Kp;如果有超调或振荡,减小Kp。
  5. 微调Ki:如果稳态误差大,增大Ki;如果积分引起低频振荡,减小Ki。

小技巧:

调试时可以用示波器观察VdVq的波形。如果Vq上有明显的6倍频波动,说明电流环带宽不够,跟不上反电动势的变化。这时候适当提高带宽,或者加入前馈补偿。

4.5 离散化带来的影响

别忘了,我们是在数字处理器上实现的。连续域的PI参数到了离散域,需要做变换。常用的方法是双线性变换(Tustin变换)。

// 离散域PI参数转换(双线性变换)
float kp_d = kp;
float ki_d = ki * ts / 2.0f;

// 实际代码实现
float pi_digital(float error)
{
    static float integral_prev = 0.0f;
    static float error_prev = 0.0f;
    float output;

    // 梯形积分
    integral_prev += (error + error_prev) * ts / 2.0f;
    error_prev = error;

    output = kp_d * error + ki_d * integral_prev;
    return output;
}

为什么用梯形积分而不是矩形积分?因为梯形积分在高频段更接近连续积分,相位滞后更小。我在一个要求高动态响应的项目中对比过,梯形积分能让带宽再往上提10%左右。

4.6 总结一下

电流环设计,说白了就是三个字:快、准、稳

  • :带宽要高,但别超过数字系统的极限。
  • :稳态误差要小,靠Ki来消除。
  • :相位裕度要够,别振荡。

我个人习惯是先保守再激进。第一次调参数,带宽设低一点,确保系统稳定。然后慢慢往上提,直到出现振荡的临界点,再往回退20%。这个“临界点”就是你的系统能达到的极限带宽。

下一章我们会讲速度环的设计,到时候你会发现——速度环的带宽受限于电流环,所以电流环调好了,速度环就成功了一半。