4. 电流环(二):带宽设计与抗饱和策略

上一章我们把电流环的PI参数整定讲清楚了。但调参只是第一步,真正让系统跑起来不出问题,还得看两件事:带宽到底设多少合适,以及饱和了怎么办。

带宽设高了,系统响应快,但噪声也跟着进来了。设低了,电机软绵绵的,跟没吃饭一样。而抗饱和策略,说白了就是防止积分项在饱和时“越积越深”,导致系统恢复不过来。我见过不少工程师,PI参数调得漂漂亮亮,一上大负载就震荡,就是因为没处理饱和。

这一章,咱们就把这两个问题彻底讲透。

4.1 电流环带宽设计:不是越高越好

带宽,通俗讲就是系统能跟踪多快的信号。电流环带宽越高,电流响应越快,电机出力越猛。但凡事都有代价。

核心原则:电流环带宽通常设置为PWM开关频率的1/10 ~ 1/20。比如10kHz的PWM,带宽设在500Hz ~ 1kHz之间比较合理。

为什么是这个范围?我简单解释一下。电流环的采样和控制更新是跟PWM同步的。根据奈奎斯特采样定理,你能控制的最高频率是采样频率的一半。但实际工程中,考虑到延迟、死区、非线性等因素,我们通常只用到1/10 ~ 1/20。

我个人习惯,对于通用伺服应用,带宽设在800Hz左右。如果电机惯量小、要求响应快,可以往上提到1.2kHz。但超过1.5kHz就要非常小心了——噪声和延迟会开始捣乱。

带宽设计的三个约束

设计带宽时,我建议你从这三个角度去卡:

约束类型 说明 典型限制
采样频率 电流环更新频率受PWM限制 带宽 ≤ fs / 10
延迟 ADC采样、计算、PWM更新都有延迟 带宽 ≤ 1 / (3 × T_delay)
噪声 电流传感器噪声会被放大 带宽越高,噪声越大

我在项目中遇到过一台设备,带宽设到2kHz,空载跑得好好的。一加上负载,电流波形全是毛刺。后来发现是电流传感器的噪声被放大了,降到1kHz就稳了。嗯,有时候不是调不好,是设太高了。

带宽与PI参数的关系

如果你用的是上一章讲的零极点对消法,带宽和PI参数有直接的数学关系:

Kp = L × ω_bw
Ki = R × ω_bw

其中ω_bw就是你要的带宽(弧度/秒)。比如你要800Hz带宽:

ω_bw = 2π × 800 ≈ 5026 rad/s

代入电机的电感和电阻,就能算出Kp和Ki。这个方法的好处是——你调的不是两个参数,而是一个带宽值。参数之间自动协调,不会出现Kp很大Ki很小这种奇怪组合。

小技巧:如果你不确定带宽设多少,可以从500Hz开始试。慢慢往上加,直到电流波形出现明显振荡或噪声,再往回退10%~20%。这个“试出来的带宽”往往最靠谱。

4.2 饱和问题:积分器为什么“发疯”

讲完带宽,咱们聊聊抗饱和。这个问题在实际项目中比带宽更让人头疼。

什么是饱和?说白了就是控制器输出的电压指令超过了逆变器能提供的最大值。比如母线电压是24V,你算出来要输出30V,那就只能给24V。这时候,误差还在,积分器还在往上积,但输出已经到顶了。

结果是什么?积分项越积越大,等误差反向时,积分器需要很长时间才能“吐”出来。这段时间里,系统就像失控了一样——这就是所谓的积分饱和。

我曾经调试一个风机项目,启动时电流总是过冲。PI参数怎么调都没用。后来发现是启动瞬间积分器饱和了,输出一直顶在限幅值上。加了抗饱和策略后,问题立刻消失。

积分饱和的典型表现

  • 启动过冲:一启动电流就冲过头,然后慢慢回落
  • 恢复缓慢:负载突变后,电流要很久才能回到设定值
  • 低频振荡:系统在饱和和退出之间来回切换,产生振荡

你想想看,如果电机在高速运行时突然减速,反电动势升高,电压指令很容易饱和。这时候没有抗饱和,电流环就会“发呆”几十毫秒。对于高性能应用,这几十毫秒足以让系统失稳。

4.3 三种主流抗饱和策略

抗饱和的方法有很多,我挑三种最实用、最常用的来讲。这三种我都实际用过,各有优缺点。

策略一:积分冻结法

这是最简单的方法。检测到输出饱和时,直接把积分累加停掉。等退出饱和再恢复。

// 积分冻结法伪代码
if (输出未饱和) {
    积分累加 += Ki × 误差 × Ts;
} else {
    // 冻结积分,不累加
    积分累加 = 积分累加;
}
输出 = Kp × 误差 + 积分累加;
限幅输出();

优点:实现简单,计算量小。
缺点:退出饱和时可能不够平滑,会有小冲击。

我个人习惯在简单项目里用这个方法。比如风机、水泵这些对动态响应要求不高的场合,积分冻结法完全够用。

策略二:反向计算法(Back-Calculation)

这个方法更优雅一些。饱和时,把实际输出和理想输出的差值,按一定比例反馈到积分器,让积分项主动“泄气”。

// 反向计算法伪代码
理想输出 = Kp × 误差 + 积分累加;
实际输出 = 限幅(理想输出);
差值 = 理想输出 - 实际输出;

if (差值 != 0) {
    积分累加 -= Kc × 差值 × Ts;
}
输出 = 实际输出;

这里的Kc是反向计算增益,一般取1/Kp ~ 2/Kp。Kc越大,积分泄气越快,但太大可能引起振荡。

注意:反向计算法的Kc需要调试。设太小了抗饱和效果不明显,设太大了积分器抖得厉害。我一般从1/Kp开始试,效果不好再往上调。

策略三:条件积分法

这个方法结合了前两者的思路。只有在一定条件下才允许积分累加。条件通常是:误差在某个范围内,且输出未饱和。

// 条件积分法伪代码
if (|误差| < 误差阈值 && 输出未饱和) {
    积分累加 += Ki × 误差 × Ts;
} else {
    // 不累加,或者按反向计算泄气
    积分累加 -= Kc × (输出 - 限幅值) × Ts;
}
输出 = Kp × 误差 + 积分累加;
限幅输出();

优点:兼顾了快速响应和抗饱和,效果最好。
缺点:参数多了一个误差阈值,调试稍微复杂一些。

我在伺服驱动项目里常用条件积分法。虽然多调一个参数,但换来的是更平滑的电流响应,值得。

4.4 三种策略对比

为了方便你选型,我把三种策略放在一起对比:

策略 实现难度 抗饱和效果 适用场景
积分冻结法 ★☆☆ ★★☆ 风机、水泵等低动态场合
反向计算法 ★★☆ ★★★ 通用伺服、机器人关节
条件积分法 ★★★ ★★★ 高性能伺服、精密运动控制

说白了,如果你刚入门,从积分冻结法开始。等遇到性能瓶颈了,再换成反向计算法或条件积分法。

4.5 带宽与抗饱和的协同设计

带宽和抗饱和不是孤立的。带宽越高,系统越容易饱和。因为高带宽意味着高增益,稍微大一点的误差就会让输出冲到限幅值。

所以我的建议是:先定带宽,再配抗饱和。带宽决定了系统的响应速度,抗饱和保证系统在极限工况下不失控。

具体步骤:

  1. 根据PWM频率和应用需求,确定目标带宽(比如800Hz)
  2. 用零极点对消法算出Kp和Ki
  3. 在仿真或实际系统中测试,观察是否容易饱和
  4. 如果饱和频繁,选择合适的抗饱和策略
  5. 调试抗饱和参数,直到饱和时的响应满足要求

一个经验值:对于大多数伺服应用,带宽设在600Hz~1kHz,配合反向计算法(Kc = 1.5/Kp),效果就很好了。我最近几个项目都是这么配的,没出过问题。

下面这张图总结了电流环带宽设计与抗饱和策略的整体逻辑:

电流环带宽设计与抗饱和策略 带宽设计 采样频率约束 延迟约束 噪声约束 积分饱和问题 启动过冲 恢复缓慢 低频振荡 抗饱和策略 积分冻结法 反向计算法 条件积分法

这张图把本章的核心逻辑串起来了。从上到下看:先确定带宽,带宽受三个约束限制;带宽高了容易饱和,饱和有三种典型表现;最后用三种抗饱和策略来解决问题。