3、电流环PI控制器设计:从传递函数到工程实现

电流环是永磁同步电机控制的“内环”,也是整个系统动态响应的基石。说白了,位置环和速度环再花哨,如果电流环没调好,一切都是空中楼阁。我个人习惯把电流环设计看作一场“带宽与稳定性的博弈”——你希望它响应快,但又不能让它振荡。

这一节,我们聚焦四个核心问题:电流环的数学模型长什么样?PI参数怎么用极点配置法算出来?积分饱和怎么处理?带宽到底选多少合适?

3.1 电流环传递函数推导

先看d-q轴下的电压方程。忽略反电动势交叉耦合项(工程上常用前馈补偿),d轴和q轴的模型是对称的:

v_d = R_s · i_d + L_d · (di_d/dt)
v_q = R_s · i_q + L_q · (di_q/dt)

拉普拉斯变换后,被控对象的传递函数就是典型的一阶惯性环节:

G_p(s) = i_d(s) / v_d(s) = 1 / (L_d · s + R_s)

加上逆变器的延迟(通常等效为一个采样周期T_s的零阶保持器),再加上PI控制器,整个电流环的开环传递函数可以写成:

G_open(s) = (K_p + K_i/s) · [1 / (L_d · s + R_s)] · [1 / (T_s · s + 1)]

嗯,这里要注意:逆变器延迟环节我用一阶惯性近似,实际工程中也可以用e^(-T_s·s)的Pade近似,但一阶惯性已经够用了。

核心结论:电流环被控对象是一阶惯性,加上PI控制器后,闭环系统是二阶系统。这为极点配置法提供了完美的数学基础。

3.2 极点配置法整定PI参数

极点配置法的思路很简单:我们希望闭环系统的极点落在某个理想位置,然后反推PI参数。对于二阶系统,理想极点位置由自然频率ω_n和阻尼比ζ决定。

我建议把电流环的闭环传递函数设计成典型的二阶系统形式:

G_close(s) = ω_n² / (s² + 2ζω_n · s + ω_n²)

令ζ = 0.707(临界阻尼),此时系统超调量约4.3%,响应速度和稳定性取得良好平衡。我在项目中踩过坑——曾经为了追求响应速度把阻尼比降到0.5,结果电流波形出现明显振荡,电机嗡嗡响。后来老老实实回到0.707。

推导过程不展开,直接给结论公式:

参数 表达式 说明
比例增益 K_p L_d · ω_n ω_n = 2π · f_bw,f_bw为电流环带宽
积分增益 K_i R_s · ω_n 注意:这里ω_n是自然频率,不是电气角速度

举个例子:某电机L_d = 0.5 mH,R_s = 0.1 Ω,目标带宽f_bw = 500 Hz。则:

ω_n = 2π × 500 ≈ 3141.6 rad/s
K_p = 0.5e-3 × 3141.6 ≈ 1.57
K_i = 0.1 × 3141.6 ≈ 314.16

你看,计算过程就这么简单。但实际工程中,我从来不会直接把这些值写进代码——后面还要考虑离散化、抗饱和、以及实际调试中的微调。

我的调试习惯:先用极点配置法算出一组初始值,然后在示波器上观察电流阶跃响应。如果超调偏大,适当增大K_p或减小K_i;如果响应太慢,增大ω_n。但每次只调一个参数,别同时动两个。

3.3 抗饱和积分设计(Anti-Windup)

积分饱和,说白了就是积分项“积过头”了。当控制器输出达到限幅值时,误差还在继续积分,积分项越积越大。等误差反向时,积分项需要很长时间才能“吐”出来,导致系统出现大超调甚至振荡。

我曾经在一个伺服项目里吃过这个亏。电机启动时电流限幅设得太紧,积分项直接饱和到上限,结果每次启动都冲过头,差点撞了限位开关。从那以后,抗饱和设计成了我代码里的标配。

常用的抗饱和方法有两种:

  1. 条件积分法:当控制器输出超出限幅时,停止积分更新。简单粗暴,但效果不错。
  2. 反馈抑制法(Back-Calculation):将实际输出与限幅前的差值反馈到积分输入端,让积分项“退回来”。

我个人更推荐反馈抑制法,因为它更平滑。实现代码如下:

// 反馈抑制法抗饱和积分
float pi_controller(float error, float *integral, float Kp, float Ki, float Kb, float limit) {
    float output, output_sat, diff;

    // 正常PI计算
    *integral += Ki * error * dt;
    output = Kp * error + *integral;

    // 限幅
    if (output > limit) {
        output_sat = limit;
    } else if (output < -limit) {
        output_sat = -limit;
    } else {
        output_sat = output;
    }

    // 反馈抑制:将饱和差值按Kb系数反馈到积分项
    diff = output_sat - output;
    *integral += Kb * diff * dt;

    return output_sat;
}

这里Kb是反馈增益,一般取1/τ,τ是积分时间常数。实际调试时,我通常从Kb = 1开始,然后观察积分项的恢复速度。

注意:抗饱和积分不是可选项,而是必选项。只要你的系统有输出限幅(几乎都有),就必须做抗饱和。否则,积分饱和会让你在启动、急停、限流等工况下吃尽苦头。

3.4 电流环带宽选择

带宽是电流环最重要的设计指标。选高了,响应快但噪声敏感;选低了,响应慢但鲁棒性好。怎么选?我总结了一个经验法则:

应用场景 推荐带宽范围 备注
通用伺服 500 Hz ~ 1 kHz 兼顾响应和稳定性
高速主轴 1 kHz ~ 2 kHz 需要快速电流响应
机器人关节 300 Hz ~ 800 Hz 更注重平稳性
大功率牵引 100 Hz ~ 300 Hz 开关频率低,带宽受限

带宽的上限受限于两个因素:

  • 开关频率:理论上,电流环带宽不能超过开关频率的1/10。比如10 kHz的开关频率,带宽最多1 kHz。
  • 采样延迟:数字控制器的采样和计算延迟会引入相位滞后,带宽越高,相位裕度越小。

你想想看,如果开关频率只有5 kHz,你非要把带宽设到2 kHz,那系统肯定振荡。我在一个低压电机项目里就犯过这个错——开关频率8 kHz,我贪心设了1.5 kHz带宽,结果电流波形抖得像心电图。后来降到800 Hz,一切正常。

我的建议:先按开关频率的1/10初选带宽,然后用极点配置法算出PI参数。上机调试时,从低到高逐步增加带宽,直到电流波形出现轻微振荡,然后回调20%。这个“临界带宽”就是你的最优值。

3.5 电流环设计知识体系

下面这张图总结了电流环PI控制器设计的核心逻辑,从数学模型到工程实现,每一步都环环相扣:

电流环PI控制器设计知识体系 电流环PI控制器设计知识体系 电机参数 (L_s, R_s) 电流环传递函数建模 极点配置法:ζ=0.707, ω_n=2π·f_bw K_p = L_d · ω_n K_i = R_s · ω_n 工程实现:离散化 + 抗饱和积分 电流环闭环控制 关键:带宽选择受限于开关频率(≤1/10)和采样延迟,实际调试时从低到高逐步逼近

从这张图可以看得很清楚:整个设计流程是线性的,但每个环节都有工程细节。传递函数是理论基础,极点配置是数学工具,抗饱和积分是工程保障,带宽选择是性能权衡。缺了任何一个,你的电流环都跑不顺畅。

最后说一句:电流环调好了,速度环和位置环的调试会轻松很多。我见过太多人一上来就调速度环,结果电流环抖得像筛子,速度环怎么调都调不好。所以,踏踏实实把电流环做好,这是整个控制系统的根基。