3. 速度环PI参数整定:速度环带宽设计、PI参数计算、积分限幅与抗饱和
速度环调参,说白了就是让电机听话。你让它转多快,它就转多快,不能抖,不能慢,更不能飞车。我刚开始做FOC那会儿,觉得调个PI参数嘛,不就是调个P和I嘛,结果一上电,电机嗡嗡响,跟要散架似的。后来才明白,速度环的整定,背后是有一套严谨的工程逻辑的。
3.1 速度环带宽设计:你到底想要多快?
带宽,是速度环的灵魂。它决定了系统能响应多快的速度指令。我个人习惯把带宽理解成“电机的反应速度”。
- 带宽越高:电机响应越快,抗扰动能力越强。但噪声也更容易传进来,系统容易抖。
- 带宽越低:系统越稳定,越平滑。但反应慢,像个“慢性子”。
那怎么选?我给大家一个经验法则:
| 应用场景 | 推荐带宽 (Hz) | 我的备注 |
|---|---|---|
| 工业伺服(高精度) | 50 - 100 | 我做过一个印刷机项目,带宽设到80Hz,效果很好 |
| 机器人关节 | 20 - 50 | 注意机械谐振,我曾经被这个坑过 |
| 风机、泵类 | 5 - 20 | 对动态响应要求不高,稳就行 |
| 大惯量负载 | 10 - 30 | 惯量越大,带宽要越低,否则必抖 |
3.2 PI参数计算:从带宽到Kp和Ki
有了目标带宽,我们就可以算PI参数了。这里我推荐用“对称最优法”,简单实用。
先看公式:
Kp = 2 * π * BW * J / Kt
Ki = Kp * ωc / (2 * π * BW)
其中:
BW:你设定的带宽 (Hz)J:系统总惯量 (kg·m²)Kt:电机转矩常数 (N·m/A)ωc:电流环的截止频率 (rad/s)
嗯,这里要注意,J 和 Kt 必须准确。我习惯先做一次惯量辨识,或者用电机手册上的数据。如果数据不准,算出来的参数就是空中楼阁。
举个例子:
假设:
BW = 50 Hz
J = 0.001 kg·m²
Kt = 0.1 N·m/A
ωc = 1000 rad/s
计算:
Kp = 2 * 3.14 * 50 * 0.001 / 0.1 = 3.14
Ki = 3.14 * 1000 / (2 * 3.14 * 50) = 10.0
算出来Kp≈3.14,Ki≈10.0。这只是一个起点,实际调试时我会在这个值附近微调。
3.3 积分限幅:别让积分“飞”起来
积分项是好东西,它能消除静差。但积分项也是“双刃剑”,如果限幅没做好,积分会一直累加,直到饱和。这时候,电机就会出现“超调大”、“响应慢”甚至“失控”的现象。
积分限幅怎么设?我一般这样:
- 限幅值 = 最大允许转矩 / Kt
- 或者直接设为额定电流的1.2倍
举个例子,如果电机额定电流是5A,最大允许转矩对应的电流是6A,那积分限幅就设在6A左右。
3.4 抗饱和:让积分“知进退”
抗饱和,英文叫Anti-Windup。说白了,就是当积分已经饱和了,我们要让它“退”回来,而不是继续傻傻地累加。
常用的方法有两种:
- 条件积分法:当输出达到限幅值时,停止积分累加。
- 反馈积分法:将实际输出与理想输出的差值,反馈回积分器,让它“泄放”掉多余的积分。
我个人更推荐反馈积分法,因为它更平滑。代码实现也很简单:
// 伪代码示例
float integral = 0;
float output = Kp * error + Ki * integral;
// 限幅
if (output > max_output) {
output = max_output;
} else if (output < -max_output) {
output = -max_output;
}
// 抗饱和:反馈积分法
float saturation_error = output - (Kp * error + Ki * integral);
integral += (error - K_aw * saturation_error) * dt;
这里的 K_aw 是抗饱和系数,一般取1到10之间。我习惯取2,效果比较温和。
3.5 知识体系总览
为了让大家更直观地理解速度环整定的全貌,我画了一张图:
这张图把速度环整定的四个核心环节串起来了。你想想看,从带宽设计开始,到PI参数计算,再到积分限幅和抗饱和,每一步都环环相扣。少了任何一个,系统都跑不稳。
好了,速度环的整定就讲到这里。记住,理论是基础,但最终还是要靠示波器看波形、靠手感去微调。多试几次,你就能找到感觉了。
公众号:蓝海资料掘金营,微信deep3321