1. 速度环控制基础

大家好,我是老张。做伺服驱动这块十几年了,今天咱们聊聊速度环。说实话,速度环是整个伺服系统里最「承上启下」的一环。你想想看,位置环要它跑多快,电流环要它出多大力,它夹在中间,既要听话又要稳当。

1.1 速度环在伺服系统中的角色

速度环的核心任务就一个:让电机按照你给定的速度指令转起来,而且转得稳。听起来简单?我在项目里见过太多「速度抖得像筛子」的案例了。

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

  • 跟踪指令:你给1000rpm,它就得跑到1000rpm,误差越小越好
  • 抑制扰动:负载突然变了,或者摩擦力不均匀,它得扛得住
  • 平滑输出:不能因为编码器分辨率不够,就让速度波形一跳一跳的

我个人习惯:调速度环之前,先用手转动电机轴,感受一下机械阻力。如果手感「卡顿」或者「松紧不一」,那速度环多半调不好。先解决机械问题,再谈控制算法。

1.2 速度环与电流环、位置环的关系

这三者的关系,说白了就是「三层嵌套」的结构。我画个图你一看就明白:

位置环(最外层) 输入:位置指令 → 输出:速度指令 速度指令 速度环(中间层) 输入:速度指令 → 输出:电流指令 电流指令 电流环(最内层) 输入:电流指令 → 输出:PWM占空比 → 电机

你看这个结构,位置环在最外面,速度环在中间,电流环在最里面。每个环都有自己的任务:

控制环 输入 输出 带宽要求
位置环 位置指令 速度指令 最低(通常10-50Hz)
速度环 速度指令 电流指令 中等(通常50-200Hz)
电流环 电流指令 PWM占空比 最高(通常500-2000Hz)

一个小经验:速度环的带宽通常设置为电流环的1/5到1/10。我曾经在一个项目里把速度环带宽设得太高,结果电流环跟不上,系统直接啸叫了。嗯,那次教训挺深刻的。

1.3 速度环的典型应用场景

速度环的应用场景,我归纳为三大类。每一类我都踩过坑,咱们一个一个说。

场景一:恒速控制

这是最常见的场景。比如传送带、主轴电机、风机水泵。要求就是:给定一个速度,电机就老老实实跑这个速度

我记得有个项目是做印刷机的主轴驱动。印刷辊筒要求速度波动小于0.1%,而且负载会随着纸张厚度变化。当时我用了PI控制器加前馈补偿,才勉强达标。说白了,恒速控制考验的是速度环的抗扰动能力。

场景二:速度跟随

这种场景下,速度指令是实时变化的。比如机器人关节、数控机床的进给轴。要求是:指令变,速度就得跟着变,延迟越小越好

我曾经调试一个六轴机器人的腕部关节,速度指令是正弦波。一开始速度环带宽不够,相位滞后严重,机器人画圆画成了椭圆。后来把速度环带宽从80Hz提到150Hz,才勉强跟上。

注意:速度跟随场景下,带宽不是越高越好。带宽太高,噪声会被放大,速度波形反而变差。我见过有人把带宽调到200Hz以上,结果速度波形全是毛刺。

场景三:速度与位置切换

有些应用需要速度环和位置环来回切换。比如点焊机的电极头:快速接近工件时用速度环,接触后切换到位置环进行压力控制。

这种场景最麻烦的是切换瞬间的冲击。我建议在切换时做「无扰切换」——把速度环的输出作为位置环的初始值,这样就不会有跳变。

1.4 速度环的典型结构

说了这么多,咱们看看速度环具体长什么样。下面是一个典型的PI速度环代码框架:

// 速度环PI控制器 - 典型实现
typedef struct {
    float Kp;           // 比例增益
    float Ki;           // 积分增益
    float integral;     // 积分累加器
    float limit;        // 输出限幅
    float Ts;           // 控制周期
} SpeedLoop_t;

float SpeedLoop_Update(SpeedLoop_t *loop, float speed_ref, float speed_fb) {
    float error = speed_ref - speed_fb;
    
    // 比例项
    float p_out = loop->Kp * error;
    
    // 积分项 - 带抗饱和
    loop->integral += loop->Ki * error * loop->Ts;
    // 积分限幅
    if (loop->integral > loop->limit) loop->integral = loop->limit;
    if (loop->integral < -loop->limit) loop->integral = -loop->limit;
    
    // 总输出
    float output = p_out + loop->integral;
    
    // 输出限幅
    if (output > loop->limit) output = loop->limit;
    if (output < -loop->limit) output = -loop->limit;
    
    return output;
}

这里有个坑:积分限幅一定要做,而且限幅值要小于输出限幅。我曾经在一个项目里忘了做积分限幅,结果积分项越积越大,输出饱和后恢复不过来,电机直接飞车了。嗯,那次差点把设备搞坏。

1.5 速度环的性能指标

评价一个速度环好不好,我一般看三个指标:

  1. 带宽:决定了系统能响应多快的指令变化。带宽越高,响应越快,但噪声也越容易被放大。
  2. 稳态精度:速度稳定后的误差大小。纯比例控制会有静差,加积分才能消除。
  3. 抗扰动能力:负载突变时,速度跌落多少、恢复多快。这个指标在实际项目中往往比带宽更重要。

这三个指标其实是互相制约的。你想提高带宽,可能噪声就大了;你想提高抗扰动能力,可能稳态精度就差了。调速度环,说白了就是在这些指标之间找平衡。

我个人习惯:先保证稳态精度,再调抗扰动,最后才考虑带宽。因为大多数应用场景下,稳态精度是硬指标,带宽是软指标。带宽差一点,顶多响应慢一点;稳态精度差,产品可能直接不合格。

好了,这一章咱们把速度环的基础讲完了。下一章我会详细讲速度环的数学模型和传递函数,到时候咱们用公式说话,把「为什么这么调」讲清楚。


公众号:蓝海资料掘金营,微信deep3321