4. 速度环PI参数整定:带宽选择、整定步骤与抗饱和策略
速度环是弱磁控制三环里的“承上启下”环节。位置环给它指令,电流环替它执行。速度环调好了,系统跑起来才稳、准、快。我个人习惯把速度环整定分成三块:带宽怎么选、PI参数怎么算、饱和了怎么办。咱们一个一个说。
4.1 速度环带宽选择——不是越快越好
速度环带宽,说白了就是它响应指令的速度。带宽越高,电机转速跟踪越快,抗扰动能力也越强。但这里有个坑——带宽不是越高越好。
为什么?因为速度环的带宽受限于电流环的响应速度。你想想看,速度环的输出就是电流环的指令,如果速度环带宽比电流环还高,那速度环要的电流,电流环根本给不出来,系统就会振荡。
我在项目中遇到过一台伺服驱动器,客户抱怨高速运行时转速波动大。查了半天,发现速度环带宽设到了200Hz,而电流环带宽只有800Hz。速度环指令变化太快,电流环跟不上,结果就是转速来回抖。后来把速度环带宽降到120Hz,问题就解决了。
具体选多少,还得看负载特性:
| 应用场景 | 负载特性 | 推荐带宽范围 | 说明 |
|---|---|---|---|
| 机床主轴 | 大惯量、恒转矩 | 30~80 Hz | 带宽低些,避免机械谐振 |
| 机器人关节 | 变惯量、频繁加减速 | 80~150 Hz | 需要快速响应,但要注意稳定性 |
| 纺织/包装 | 轻载、恒速运行 | 50~100 Hz | 带宽适中,重点在稳态精度 |
| 电动汽车驱动 | 宽调速、变负载 | 100~200 Hz | 弱磁区带宽会下降,需折中 |
4.2 PI参数整定步骤——从理论到实操
确定了带宽,接下来就是算PI参数。速度环PI控制器的传递函数是:
G_speed(s) = Kp + Ki/s
其中Kp是比例增益,Ki是积分增益。整定的核心思路是:把速度环校正成典型I型或II型系统。我个人偏爱用“对称最优法”,步骤清晰,不容易出错。
步骤一:获取系统等效惯量和阻尼
速度环的被控对象是电机+负载的机械系统。你需要知道两个参数:
- 等效转动惯量 J_eq(单位:kg·m²)——电机转子惯量+负载惯量折算到电机轴
- 粘滞摩擦系数 B(单位:Nm·s/rad)——通常很小,可忽略
如果没有精确数据,可以用“自整定”功能让驱动器自动辨识。我早期做项目时没有自整定功能,就用手动加减速法测惯量,虽然麻烦,但结果也挺准。
步骤二:计算PI参数
假设你选定了速度环带宽 ω_sc(单位:rad/s),那么:
Kp = J_eq × ω_sc
Ki = Kp × ω_sc / 4 (对称最优法,阻尼比0.707)
举个例子:电机转子惯量0.001 kg·m²,负载惯量0.002 kg·m²,J_eq=0.003。选定带宽100Hz(即628 rad/s)。
Kp = 0.003 × 628 = 1.884
Ki = 1.884 × 628 / 4 = 295.8
嗯,这里要注意:算出来的Ki值通常比较大,实际使用时需要做限幅,不然积分饱和会搞死你。
步骤三:空载调试
把算好的参数写进驱动器,让电机空载运行。给一个阶跃转速指令(比如从0到1000rpm),观察响应曲线:
- 超调量 < 5% —— 参数合适
- 超调量 > 10% —— 降低Kp,或者增加Ki(但Ki增加会加剧超调,要小心)
- 响应太慢 —— 增加Kp,或者提高带宽重新算
- 有振荡 —— 带宽选高了,或者机械谐振,先降带宽试试
步骤四:带载验证
空载调好了,不代表带载也行。我曾经遇到过空载响应完美,一加上负载就抖得不行。原因是负载惯量变化导致系统增益改变。
带载后如果出现振荡,可以适当降低Kp(比如降20%),或者增加微分前馈(如果驱动器支持)。对于变惯量负载(比如机器人),建议用“自适应增益调度”,根据负载状态切换PI参数。
4.3 抗饱和策略——积分饱和是隐形杀手
速度环的输出是电流指令,而电流指令是有上限的(受限于驱动器额定电流和电机额定电流)。当速度误差很大时(比如急加速或堵转),积分项会一直累积,导致输出超过限幅值。等误差减小后,积分项还需要时间“退回来”,这段时间里输出仍然饱和,系统就会失控——这就是积分饱和。
我见过最惨的一次:一台起重机起升机构,积分饱和导致电机在减速阶段反而加速,差点把吊物甩出去。从那以后,我对抗饱和策略格外重视。
常用抗饱和方法
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 积分限幅 | 限制积分项的最大值 | 实现简单 | 限幅值不好选,影响稳态精度 |
| 积分冻结 | 输出饱和时停止积分 | 效果明显,不损失精度 | 需要判断饱和状态,有切换噪声 |
| 反向计算 | 饱和时重新计算积分值 | 平滑退出饱和 | 计算复杂,需要模型准确 |
| 条件积分 | 误差大时减小积分系数 | 兼顾动态和稳态 | 参数整定麻烦 |
我个人最推荐积分冻结+反向计算的组合策略。具体做法:
- 实时检测速度环输出是否达到限幅值
- 如果达到限幅,冻结积分项(Ki不累加)
- 同时计算“理想输出”和“实际输出”的差值,用这个差值修正积分项
代码实现大概是这样的:
// 速度环PI控制器(带抗饱和)
float speed_pi_control(float err_speed) {
// 比例项
float p_out = Kp * err_speed;
// 积分项(带冻结)
if (!is_saturated) {
integral += Ki * err_speed * dt;
}
// 总输出
float output = p_out + integral;
// 限幅判断
if (output > LIMIT_MAX) {
output = LIMIT_MAX;
is_saturated = 1;
// 反向计算:修正积分项
integral = LIMIT_MAX - p_out;
} else if (output < LIMIT_MIN) {
output = LIMIT_MIN;
is_saturated = 1;
integral = LIMIT_MIN - p_out;
} else {
is_saturated = 0;
}
return output;
}
4.4 速度环整定知识体系
下面这张图把速度环整定的核心逻辑串起来了。你可以把它当作调试时的检查清单。
速度环整定说难不难,说简单也不简单。核心就三件事:带宽选对、参数算准、饱和管好。你按这个流程走一遍,大部分系统都能调稳。如果还出问题,大概率是机械谐振或者电流环没调好——那就是另外的话题了。