第四节:速度规划与加减速控制

各位工程师朋友,今天我们来聊聊运动控制里最基础也最要命的一环——速度规划。说白了,就是让电机怎么跑得又快又稳,还不抖。

我刚开始做运动控制那会儿,觉得速度规划不就是给个加速度、减速度嘛,简单。结果第一次调试龙门架,电机一启动,整个架子都在抖,工件直接飞出去了。嗯,从那以后,我再也不敢小看加减速控制了。

4.1 梯形速度曲线:简单但粗暴

梯形速度曲线,顾名思义,速度曲线像个梯形。分为三个阶段:匀加速、匀速、匀减速。

它的数学表达很简单:

// 梯形速度规划伪代码
if (t < t_acc) {
    v(t) = v0 + a * t;          // 加速段
} else if (t < t_acc + t_const) {
    v(t) = v_max;               // 匀速段
} else {
    v(t) = v_max - a * (t - t_acc - t_const); // 减速段
}

优点很明显:计算量小,实时性好。我在做低端点胶机的时候,就用梯形曲线,跑得挺欢。

但缺点也很致命——加速度在拐点处突变。你想想看,加速度从0瞬间跳到a,再瞬间回到0,这相当于给机械系统一个冲击力。我见过一个案例,某厂用梯形曲线跑高速传送带,半年换了三套联轴器。

⚠ 避坑指南: 我曾经在高速冲压机上用过梯形曲线,结果模具寿命缩短了30%。后来换成S型曲线,问题才解决。如果你的负载超过5kg,或者要求定位精度在0.1mm以内,建议慎用梯形曲线。

4.2 S型速度曲线:平滑才是王道

S型曲线,说白了就是把梯形曲线的尖角磨圆了。它引入了加加速度(Jerk)的概念,让加速度也平滑变化。

S型曲线通常分7段:加加速、匀加速、减加速、匀速、加减速、匀减速、减减速。听着复杂,但核心思想就一个——让速度的二阶导数连续。

我习惯用这种分段方式:

// S型曲线7段规划
// 参数:v0, v_max, a_max, j_max (加加速度)
// 第1段:加加速段
t1 = a_max / j_max;
v1 = v0 + 0.5 * j_max * t1^2;

// 第2段:匀加速段
t2 = (v_max - 2*v1) / a_max;

// 第3段:减加速段
t3 = t1;
// ... 后续段类似
💡 个人经验: 实际项目中,我很少用完整的7段S型曲线。大多数情况下,5段就够了——去掉中间的匀速段。因为很多运动距离短,根本跑不到最高速。你想想看,如果行程只有10mm,你规划个7段曲线,还没加速完就该减速了。

4.3 Jerk控制:被忽视的关键参数

Jerk,加加速度,就是加速度的变化率。单位是m/s³。很多人只关注加速度,忽略了Jerk,这是大忌。

为什么Jerk重要?因为机械系统有弹性。你加速度变化太快,相当于给机械结构一个冲击波。这个波会在机构里来回反射,造成振动。

我做过一个实验:同样的运动轨迹,Jerk=1000 m/s³时,末端振动幅度0.5mm;Jerk=100 m/s³时,振动幅度降到0.05mm。差了10倍!

Jerk值 (m/s³) 加速度变化 机械冲击 适用场景
> 10000 剧烈 低精度搬运
1000 ~ 10000 中等 通用工业
100 ~ 1000 平滑 精密定位
< 100 极平滑 极小 晶圆搬运、医疗
🔧 调试技巧: 我建议先设一个较大的Jerk值(比如5000),跑一下看看振动情况。然后逐步降低,直到振动可接受。别一上来就设很小,那样运动太慢,效率低。

4.4 实时速度规划:应对不确定性的利器

前面讲的都是离线规划——提前算好速度曲线。但实际中,很多情况需要实时调整速度。比如视觉引导的抓取,目标位置随时在变。

实时速度规划的核心是:在运动过程中,根据当前状态和目标,动态计算剩余路径的速度曲线

我常用的方法是「前瞻+重规划」:

  1. 前瞻窗口:提前看未来N个插补周期的路径
  2. 约束检查:检查当前速度能否在窗口内安全减速
  3. 速度修正:如果发现减速距离不够,立即降低当前速度
// 实时速度规划核心逻辑
void RealtimeSpeedPlan(float current_pos, float current_v, 
                       float target_pos, float max_a) {
    // 计算剩余距离
    float remain_dist = target_pos - current_pos;
    
    // 计算安全减速距离
    float decel_dist = current_v^2 / (2 * max_a);
    
    // 如果减速距离不够,立即降速
    if (decel_dist > remain_dist) {
        float safe_v = sqrt(2 * max_a * remain_dist);
        current_v = min(current_v, safe_v);
    }
    
    // 正常加速/匀速/减速判断
    // ...
}
⚠ 注意: 实时规划最怕的是「规划震荡」。我曾经遇到过,因为传感器噪声,速度规划在加速和减速之间来回切换,电机嗡嗡响。解决办法是加一个滞回区,比如速度误差在5%以内不切换。

4.5 知识体系总览

下面这张图,是我自己总结的速度规划知识框架。你看一眼,心里就有谱了。

速度规划与加减速控制知识体系 梯形速度曲线 三段式:加-匀-减 计算简单 加速度突变 机械冲击大 适用:低精度、轻负载 S型速度曲线 七段式平滑过渡 加速度连续 冲击小 计算量大 适用:精密定位 Jerk控制 加速度变化率 抑制振动 延长机械寿命 参数难调 适用:高速高精度 实时速度规划 动态调整速度 前瞻+重规划 适应不确定性 防规划震荡 适用:视觉引导 核心原则 精度要求高 → 用S型 + 小Jerk | 效率优先 → 用梯形 + 大Jerk | 动态环境 → 实时规划

这张图把四个核心模块串起来了。你从左上角开始看,梯形是最基础的,S型是升级版,Jerk控制是精细调节,实时规划是应对变化。实际项目中,我通常这样选型:

  • 普通搬运:梯形曲线 + 固定加减速
  • 精密装配:S型曲线 + Jerk限制
  • 视觉跟踪:实时规划 + 前瞻窗口

最后说一句,速度规划没有银弹。每个项目都要根据负载、精度、速度要求来权衡。我见过有人非要在低速设备上用7段S型曲线,结果计算周期太长,反而影响了性能。合适才是最好的。


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