速度环(中环):承上启下的调速核心

位置环管位置,电流环管力矩。那中间的速度环管什么?说白了,它管的是「转多快」和「怎么转」。我做了这么多年伺服驱动,最深的体会就是:速度环调好了,整个系统就稳了一半。很多新手一上来就调位置环,结果发现系统抖得像筛子——其实根子在速度环没整明白。

速度环的作用与目标

速度环的核心目标就一个:让电机的实际转速,紧紧跟随你给的目标转速。听起来简单,但实际跑起来,干扰太多了——负载突变、摩擦力变化、电压波动……速度环就是那个「不管外面怎么变,我都要稳住转速」的看门人。

具体来说,速度环要干三件事:

  • 抗扰动:负载突然加重,转速不能掉太多,掉下去要快速拉回来。
  • 无静差:稳态时,实际转速和目标转速之间的误差要趋近于零。
  • 响应快:目标转速变化时,电机要能迅速跟上,不能拖泥带水。

我个人的经验:速度环的带宽通常设定在电流环的 1/5 到 1/10。为什么?因为速度环的输出是电流环的输入,如果速度环太快,会给电流环发一堆「急刹车」指令,系统反而会震荡。这个比例我踩过坑,后来才摸清楚。

速度环的输入与输出

搞清楚输入输出,是理解速度环的第一步。我画了一张图,帮你把信号流理清楚:

速度环信号流与输入输出关系 目标速度 ω* − PI 控制器 (速度环核心) 电流指令 i* (输出给电流环) 电机 + 编码器 (被控对象) 反馈速度 ω_fb (编码器计算) 输入: 目标速度 ω* 与反馈速度 ω_fb 的误差 e = ω* − ω_fb 输出: 电流指令 i*(即电流环的目标值)

从图上可以看得很清楚:

  • 输入:目标速度 ω* 和反馈速度 ω_fb 的差值(误差 e)。
  • 处理核心:PI 控制器(比例+积分),对误差进行运算。
  • 输出:电流指令 i*,直接喂给电流环作为目标。

一个小技巧:速度环的反馈速度通常来自编码器。但编码器测速有量化误差,尤其是低速时。我建议在低速段用「M/T 法」测速,高速段用「M 法」,这样全速域都能保证精度。

速度环与位置环的关系

位置环和速度环是什么关系?我打个比方你就懂了:

  • 位置环是「老板」:它说「我要去 1000 个脉冲的位置」。
  • 速度环是「司机」:老板说去哪,司机负责「以多快的速度开过去」。

位置环的输出,就是速度环的目标。位置环算出一个速度指令,速度环负责执行。所以速度环的响应速度,直接决定了位置环的跟踪精度。

这里有个关键点:速度环的带宽必须远高于位置环。我一般把速度环带宽设在位置环的 5~10 倍。为什么?因为位置环要依赖速度环先稳定下来,才能做位置调整。如果速度环慢吞吞的,位置环就会「等不及」,产生超调甚至震荡。

我曾经踩过的坑:有一次做龙门同步,两个轴的位置环参数一模一样,但一个轴速度环带宽低了 20%。结果一跑起来,两个轴的位置误差越来越大,最后触发了跟随误差报警。后来我把两个轴的速度环参数统一校准,问题才解决。所以记住:速度环是位置环的「地基」,地基不稳,上面盖什么都是歪的。

速度环的典型应用

1. 匀速运动

匀速运动是速度环最基础的应用。比如传送带、印刷辊、离心机——这些场景要求电机以恒定转速运行,不受负载波动影响。

匀速运动对速度环的要求:

  • 稳态精度高:转速波动要小,通常要求 < 0.1%。
  • 抗扰动强:负载突变时,转速恢复时间要短。

我一般这样调匀速场景的速度环:

// 速度环 PI 参数整定(匀速场景)
// 先调比例,再调积分

// 1. 积分置零,只留比例
Kp = 0.5;  // 从 0 开始慢慢加
Ki = 0;

// 2. 增大 Kp 直到出现轻微震荡
// 记录此时的 Kp_critical
Kp_critical = 2.3;  // 举例值

// 3. 设置最终参数(经验法)
Kp = 0.45 * Kp_critical;  // 0.45
Ki = 0.5 * Kp / T_sample; // 积分时间常数取 2 倍采样周期

我个人的习惯:匀速场景下,积分项不要太大。积分太强反而会引起低频振荡。我一般把积分时间常数设在 20~50ms 之间,具体看机械系统的惯量。

2. 加减速控制

加减速控制比匀速复杂得多。比如机械臂、数控机床、电梯——这些场景需要频繁启停、变速,对速度环的动态响应要求很高。

加减速控制的核心问题有两个:

  1. 加速度限制:速度变化不能太猛,否则机械冲击大,甚至损坏设备。
  2. 速度超调:减速时如果速度环响应太慢,容易冲出目标位置。

我常用的加减速曲线有三种:

曲线类型 特点 适用场景 缺点
梯形加减速 加速度恒定,速度线性变化 简单传送、点对点定位 启停瞬间有冲击
S 形加减速 加速度连续变化,速度平滑 精密加工、机器人 计算量大
指数加减速 速度按指数趋近目标 软启动、风机类负载 响应偏慢

我重点说说 S 形加减速。它把加速度的变化率(加加速度)也限制住了,所以运动最平滑。但代价是算法复杂一些。

// S 形加减速的速度规划(伪代码)
// 输入:起始速度 v0,目标速度 v1,最大加速度 amax,最大加加速度 jmax

float S_curve_plan(float v0, float v1, float amax, float jmax) {
    // 1. 计算加速段时间
    float ta = (v1 - v0) / amax;  // 匀加速段时间
    float tj = amax / jmax;       // 加加速度段时间

    // 2. 分段计算速度
    // 加加速度段:速度按二次曲线上升
    // 匀加速段:速度线性上升
    // 减加速度段:速度按二次曲线趋近目标

    // 3. 输出当前时刻的速度指令
    return v_current;
}

一个实用建议:加减速控制中,速度环的积分项要适当减弱。因为加减速时误差变化快,积分容易「过冲」。我通常在加减速阶段把积分系数降到匀速阶段的 50%~70%,等进入匀速再恢复。

最后说一句:速度环调好了,你的系统就成功了一半。别急着调位置环,先把速度环的 PI 参数摸透,把加减速曲线选对。相信我,后面会省很多事。