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 带宽与抗饱和的协同设计
带宽和抗饱和不是孤立的。带宽越高,系统越容易饱和。因为高带宽意味着高增益,稍微大一点的误差就会让输出冲到限幅值。
所以我的建议是:先定带宽,再配抗饱和。带宽决定了系统的响应速度,抗饱和保证系统在极限工况下不失控。
具体步骤:
- 根据PWM频率和应用需求,确定目标带宽(比如800Hz)
- 用零极点对消法算出Kp和Ki
- 在仿真或实际系统中测试,观察是否容易饱和
- 如果饱和频繁,选择合适的抗饱和策略
- 调试抗饱和参数,直到饱和时的响应满足要求
一个经验值:对于大多数伺服应用,带宽设在600Hz~1kHz,配合反向计算法(Kc = 1.5/Kp),效果就很好了。我最近几个项目都是这么配的,没出过问题。
下面这张图总结了电流环带宽设计与抗饱和策略的整体逻辑:
这张图把本章的核心逻辑串起来了。从上到下看:先确定带宽,带宽受三个约束限制;带宽高了容易饱和,饱和有三种典型表现;最后用三种抗饱和策略来解决问题。