3. 速度环PI参数整定:模型、抗饱和、前馈与变增益

速度环调参,是电机控制里最磨人的环节之一。很多人上来就调比例增益、积分时间,调了半天系统还是抖,或者一加载就飞。其实问题往往出在——你没搞清楚速度环到底在干什么。

我个人习惯,拿到一个新平台,先不急着调参数。先把速度环模型在脑子里过一遍,再决定用什么策略。今天我们就从模型开始,一步步把速度环PI整定这件事讲透。

3.1 速度环的简化模型

速度环的输入是速度指令,输出是电流指令(通常是iq)。中间经过PI控制器、电流环、电机本体、负载,最后反馈回来。

实际系统是非线性的,但工程上我们常用一阶惯性加积分环节来近似:

G(s) = K / (J·s + B)   ≈   K / (J·s)   (忽略阻尼B)

其中J是转动惯量,K是转矩常数与电流环增益的乘积。说白了,速度环被控对象就是一个积分器加一个增益。

所以PI控制器的传递函数是:

C(s) = Kp + Ki/s

闭环后,系统变成典型的二阶系统。这时候你调Kp和Ki,本质上就是在调二阶系统的自然频率和阻尼比。

核心结论:速度环PI参数整定的本质,就是根据系统惯量和期望带宽,计算出合适的Kp和Ki。

我在项目中遇到过,有人把Kp调得很大,觉得响应快。结果系统高频振荡,电机嗡嗡响。为什么?因为忽略了电流环的延迟和采样噪声。你想想看,Kp太大,相当于给系统加了一个高增益的比例反馈,相位裕度不够,必然振荡。

3.2 抗积分饱和(Anti-Windup)

积分饱和,是速度环最隐蔽的坑。我刚开始做伺服驱动时,就吃过这个亏。

情况是这样的:速度指令突然从0跳到1000rpm,积分项开始疯狂累积。等速度到达目标时,积分项已经积了一大堆,输出早就饱和了。结果速度超调很大,甚至来回震荡好几秒才稳定下来。

为什么会这样?因为积分器没有限幅,或者限幅方式不对。

常用的抗积分饱和方法有三种:

方法 原理 适用场景
积分限幅 直接限制积分项的输出范围 简单系统,对动态要求不高
条件积分 只在误差较小时才积分 需要快速响应的场合
反馈积分(Back-Calculation) 将饱和差值反馈回积分器 高性能伺服,动态响应好

我个人最常用的是反馈积分法。代码实现也很简单:

// 反馈积分抗饱和
float error = speed_ref - speed_fb;
float pi_out = Kp * error + integral;

// 限幅
float pi_out_limited = clamp(pi_out, -limit, limit);

// 计算饱和差值,反馈回积分器
float sat_diff = pi_out - pi_out_limited;
integral += Ki * error * dt - Kc * sat_diff * dt;

// 最终输出
float iq_ref = pi_out_limited;

这里Kc是反馈增益,一般取1/Kp左右。我曾经在一个项目中,Kc没调好,导致积分器反而震荡。后来改成Kc = 1.2/Kp,效果就好了很多。

小技巧:抗积分饱和的反馈增益Kc,可以先取1/Kp,然后根据实际响应微调。如果超调还是大,增大Kc;如果响应变慢,减小Kc。

3.3 前馈补偿

PI控制器本质上是误差驱动的。也就是说,只有出现误差了,控制器才会动作。这导致一个问题——对于快速变化的指令,PI总是慢半拍。

前馈补偿就是解决这个问题的。它直接根据指令的变化,提前给一个补偿量,让系统提前动作。

速度环的前馈通常有两种:

  • 加速度前馈:根据速度指令的微分(加速度),补偿惯量带来的转矩需求
  • 摩擦力前馈:根据速度方向,补偿静摩擦和库仑摩擦

加速度前馈的公式很简单:

iq_ff = J * (dω_ref/dt) / Kt

其中J是惯量,Kt是转矩常数。实际应用中,我们通常加一个低通滤波器,防止微分噪声放大。

我记得有一次调试高速主轴,速度指令从0到30000rpm只要0.1秒。纯PI控制根本追不上,速度误差一直很大。加了加速度前馈后,误差直接降了70%。

注意:前馈补偿不能替代PI控制器。前馈处理已知的、可预测的扰动;PI处理未知的、残余的误差。两者是互补关系,不是替代关系。

3.4 变增益PI

固定增益的PI控制器,在宽调速范围内往往表现不佳。低速时增益太大容易振荡,高速时增益太小响应慢。

变增益PI就是让增益随工况变化。常见的策略有:

策略 实现方式 优点 缺点
速度相关增益 Kp = f(ω),低速小增益,高速大增益 实现简单 对负载变化不敏感
误差相关增益 Kp = f(e),大误差大增益,小误差小增益 动态响应好 容易引入非线性振荡
模型参考自适应 根据实际响应在线调整增益 自适应能力强 计算量大,调试复杂

我个人在工业项目中,最常用的是速度相关增益加误差相关增益的组合。比如这样:

// 变增益PI
float speed_factor = 1.0 + alpha * fabs(speed_fb) / speed_max;
float error_factor = 1.0 + beta * fabs(error) / error_max;

float Kp_adaptive = Kp_base * speed_factor * error_factor;
float Ki_adaptive = Ki_base * speed_factor;  // 积分项只随速度变化

// 限幅
Kp_adaptive = clamp(Kp_adaptive, Kp_min, Kp_max);
Ki_adaptive = clamp(Ki_adaptive, Ki_min, Ki_max);

alpha和beta是两个可调系数。alpha控制速度对增益的影响程度,beta控制误差对增益的影响程度。我一般先调alpha,让系统在高低速都有合适的响应,再调beta改善动态跟踪。

避坑指南:变增益PI的增益变化不能太剧烈。我曾经把alpha设得太大,结果速度一变化,增益突变,系统直接啸叫。后来加了增益变化率限制,问题就解决了。

3.5 知识体系总览

下面这张图,把速度环PI整定的核心知识点串起来了。你可以把它当作调试时的检查清单。

速度环PI参数整定知识体系 速度环PI整定 1. 速度环模型 一阶惯性 + 积分环节 本质:调阻尼比和自然频率 2. 抗积分饱和 积分限幅 / 条件积分 反馈积分法(Back-Calculation) 3. 前馈补偿 加速度前馈 + 摩擦力前馈 前馈不能替代PI,是互补 4. 变增益PI 速度相关 / 误差相关 / 自适应 组合策略 + 增益变化率限制 调试顺序:先模型 → 再抗饱和 → 加前馈 → 最后调变增益

调试的时候,我建议按这个顺序来:先根据模型估算出基础Kp和Ki,然后加上抗积分饱和防止超调,再根据动态响应加前馈补偿,最后用变增益PI覆盖全速域。每一步都验证过了,再往下走。

嗯,速度环PI整定就讲到这里。记住,没有万能参数,只有适合你系统的参数。多动手,多记录,慢慢就有感觉了。