1. 速度规划基础:运动控制中的速度曲线

做运动控制这些年,我越来越觉得速度规划就像给机器「铺路」。路铺得平不平,直接决定了机器跑得稳不稳、停得准不准。今天咱们就从最基础的速度曲线说起。

1.1 什么是速度曲线?

说白了,速度曲线就是描述「速度随时间怎么变化」的一条线。你想想看,电机从静止加速到目标速度,再减速到零,这个过程画出来就是一条速度曲线。

我刚开始做项目时,觉得只要给个速度指令就行了。结果机器一跑,要么抖得像筛子,要么到位后过冲一大截。后来才明白——速度曲线没选对,后面全是坑。

核心概念:速度曲线 = 位置对时间的一阶导数。它决定了运动过程的平滑度、效率和冲击力。

1.2 T型曲线 vs S型曲线

实际工程中最常用的就两种:T型和S型。咱们直接对比着看。

对比项 T型曲线 S型曲线
加速度变化 阶跃突变 连续渐变
加加速度(Jerk) 无穷大(冲击) 有限值(可控)
运动时间 最短 稍长(约10%~20%)
机械冲击 大 小
适用场景 低速、低精度、刚性好的系统 高速、高精度、柔性系统

我记得有一次做高速贴片机项目,用的T型曲线。速度一上去,整个机架都在抖。后来换成S型曲线,抖动直接降了60%。选型选对了,事半功倍。

1.3 加加速度(Jerk)的物理意义

加加速度,英文叫Jerk,是加速度对时间的导数。单位是 m/s³。

为什么要关心Jerk?因为加速度突变会产生冲击力。你想想看,加速度从0瞬间跳到某个值,相当于力突然施加到机械结构上。这个冲击力会激发机械共振,造成抖动和定位误差。

我的经验:在半导体设备中,Jerk值通常限制在 100~500 m/s³ 之间。超过这个范围,晶圆很容易出现微裂纹。

我曾经遇到一个案例:一台精密点胶机,点胶位置总是偏移。排查了所有硬件都没问题,最后发现是Jerk太大,导致胶头到位前有微小反弹。把Jerk从 800 降到 200 m/s³,问题立刻解决。

1.4 三种曲线的速度-时间图

下面这张图直观展示了T型、S型以及带Jerk限制的曲线在速度-时间平面上的区别。

速度曲线对比:T型 vs S型 vs Jerk限制型 时间 t 速度 v T型(加速度突变) S型(加速度连续) Jerk限制型(加速度渐变) T型 S型 Jerk限制型

从图上能清楚看到:T型曲线在加速起点和终点有「尖角」,这就是加速度突变的位置。S型曲线把尖角磨圆了,但加速时间变长。Jerk限制型则是在S型基础上进一步控制加速度的变化率。

1.5 实际工程中的选择策略

那到底该用哪种?我个人习惯按这个优先级来选:

  1. 先看机械刚性:刚性好的(比如铸铁机架),T型也能用。刚性差的(比如铝型材搭建),必须上S型或Jerk限制型。
  2. 再看精度要求:定位精度在 0.1mm 以上的,建议用S型。0.01mm 级别的,必须用Jerk限制型。
  3. 最后看节拍:如果时间允许,尽量用S型。时间紧张时,可以适当放宽Jerk限制,但不要完全用T型。

避坑指南:我曾经在一个项目中,为了赶节拍把Jerk设得很大。结果机器跑起来后,螺丝都松了。后来花了三天重新拧紧所有螺丝,还换了两个损坏的导轨。教训就是——Jerk不是越大越好,要找到机械能承受的极限。

1.6 速度规划的核心流程

下面这张流程图展示了速度规划从需求到实现的完整链路。

速度规划核心流程 1. 需求分析 2. 曲线选型 3. 参数计算 4. 仿真验证 5. 实际调试 参数调整 关键输入 • 最大速度 • 最大加速度 • 最大Jerk 关键输出 • 速度曲线 • 加速度曲线 • Jerk曲线

这个流程我用了很多年。每次做新项目,都按这个步骤走一遍。特别是第4步仿真验证,千万别跳过。我见过太多人直接上机调试,结果把机械搞坏了才回头做仿真。

1.7 一个简单的代码示例

下面是一个T型速度规划的Python实现,帮你理解核心逻辑:

def t_curve_profile(v_max, a_max, total_distance):
    """
    T型速度曲线规划
    参数:
        v_max: 最大速度 (m/s)
        a_max: 最大加速度 (m/s²)
        total_distance: 总位移 (m)
    返回:
        加速时间、匀速时间、减速时间
    """
    # 加速到最大速度所需距离
    acc_distance = v_max**2 / (2 * a_max)
    
    # 如果加速距离超过总距离的一半,说明无法达到最大速度
    if 2 * acc_distance > total_distance:
        # 三角形速度曲线(没有匀速段)
        v_peak = (a_max * total_distance) ** 0.5
        t_acc = v_peak / a_max
        t_const = 0
        t_dec = t_acc
    else:
        # 梯形速度曲线(有匀速段)
        t_acc = v_max / a_max
        t_dec = t_acc
        const_distance = total_distance - 2 * acc_distance
        t_const = const_distance / v_max
    
    return t_acc, t_const, t_dec

# 示例:总位移0.5m,最大速度0.3m/s,加速度0.5m/s²
t1, t2, t3 = t_curve_profile(0.3, 0.5, 0.5)
print(f"加速时间: {t1:.2f}s, 匀速时间: {t2:.2f}s, 减速时间: {t3:.2f}s")

这段代码虽然简单,但包含了速度规划的核心思想:先判断能不能达到最大速度,再决定用梯形还是三角形。实际工程中,还要考虑Jerk限制、位置补偿、前馈控制等,但基础逻辑是一样的。

小技巧:调试时先把Jerk设得保守一点(比如 100 m/s³),等机械运行稳定了,再逐步增大。每次增加 50 m/s³,观察抖动情况。找到临界点后,再往回退 20% 作为安全余量。