2、T型速度曲线:数学模型、加速/匀速/减速三段式结构、参数计算与边界条件

T型速度曲线,说白了就是运动控制里最基础、最直观的速度规划方式。名字里的「T」不是字母T,而是速度曲线形状像个梯形——先匀加速、再匀速、最后匀减速。我刚开始做运动控制时,第一个手写的速度规划就是它。

别看它简单,很多工业场景至今还在用。为什么?因为它的加速度恒定,电机力矩需求稳定,控制逻辑清晰。你想想看,一个没有抖动、没有冲击的启停过程,在很多设备上已经够用了。

2.1 数学模型:三段式结构

T型曲线由三个阶段组成:加速段、匀速段、减速段。每一段都对应一个简单的运动学方程。

我习惯用以下符号体系:

  • v₀ — 起始速度(通常为0)
  • v_max — 目标最大速度
  • a — 加速度(正值)
  • d — 减速度(正值,减速时取负方向)
  • t₁ — 加速段时间
  • t₂ — 匀速段时间
  • t₃ — 减速段时间
  • S — 总位移

三段的速度公式如下:

加速段 (0 ≤ t ≤ t₁):
  v(t) = v₀ + a·t
  s(t) = v₀·t + ½·a·t²

匀速段 (t₁ < t ≤ t₁+t₂):
  v(t) = v_max
  s(t) = v₀·t₁ + ½·a·t₁² + v_max·(t - t₁)

减速段 (t₁+t₂ < t ≤ t₁+t₂+t₃):
  v(t) = v_max - d·(t - t₁ - t₂)
  s(t) = 前两段位移 + v_max·t₃ - ½·d·t₃²

嗯,这里要注意:减速段的加速度是 -d,所以速度线性下降。如果起始速度和终止速度都是0,那加速段和减速段在时间上是对称的——前提是加速度和减速度相等。

核心要点:T型曲线的本质是「加速度分段恒定」。每一段内,加加速度(Jerk)为无穷大。这就是抖动的根源——我们后面会专门讲怎么优化它。

2.2 参数计算:已知条件怎么算时间?

实际项目中,我们通常知道的是:总位移S、最大速度v_max、加速度a、减速度d。需要计算的是三段各自的时间。

我遇到过很多新手,上来就假设一定能跑到v_max。其实不一定。如果位移太短,可能刚加速就要减速,根本到不了最大速度。这就是边界条件问题。

先看能跑到v_max的情况:

加速段时间: t₁ = v_max / a
减速段时间: t₃ = v_max / d
加速段位移: S₁ = ½·a·t₁²
减速段位移: S₃ = ½·d·t₃²
匀速段位移: S₂ = S - S₁ - S₃
匀速段时间: t₂ = S₂ / v_max

如果S₂算出来是负数,说明位移不够,跑不到v_max。这时候需要重新计算。

我的经验:写代码时一定要先判断「是否可达最大速度」。我早期一个项目里忘了这个判断,结果电机在短距离运动时速度曲线出现负的匀速段时间,直接报错。从那以后,我每次写T型规划都先算这个。

2.3 边界条件:跑不到最大速度怎么办?

当位移S不足以让系统加速到v_max再减速到0时,曲线退化为三角形——只有加速和减速,没有匀速段。

这时候需要求解一个关键问题:实际能达到的最高速度v_peak是多少?

假设起始和终止速度都是0,加速和减速对称(a = d),那么:

v_peak = √(a · S)
t₁ = t₃ = v_peak / a
总时间 T = 2 · v_peak / a

如果a ≠ d,情况稍微复杂一点。我记得有一次做龙门架同步控制,两个轴的加减速度不一样,必须分别计算:

v_peak = √( (2·a·d·S) / (a + d) )
t₁ = v_peak / a
t₃ = v_peak / d

这个公式怎么来的?其实很简单:加速段位移 + 减速段位移 = 总位移,代入各自的位移公式,联立解出v_peak。

避坑指南:我曾经在计算非对称T型曲线时,直接用了对称公式,结果电机在减速段末端速度没降到0,冲出去了一小段。后来排查发现是v_peak算错了。记住:加减速度不等时,峰值速度不是简单的√(a·S),必须用上面的公式。

2.4 完整参数计算流程

我一般把T型曲线的参数计算写成下面这个流程。你可以直接拿去做代码实现:

  1. 输入:S, v_max, a, d, v₀, v_end(通常v₀=v_end=0)
  2. 计算理论加速/减速时间:t₁_raw = (v_max - v₀)/a, t₃_raw = (v_max - v_end)/d
  3. 计算理论加速/减速位移:S₁ = ½·(v₀+v_max)·t₁_raw, S₃ = ½·(v_max+v_end)·t₃_raw
  4. 判断:如果S₁ + S₃ ≤ S,说明能跑到v_max → 进入三段式
  5. 否则:进入三角形模式,计算v_peak
  6. 输出:t₁, t₂, t₃, v_peak

下面这张图展示了完整的决策逻辑:

T型速度曲线参数计算流程 输入:S, v_max, a, d 计算 t₁_raw, t₃_raw, S₁, S₃ S₁+S₃ ≤ S ? (能否到 v_max) 是 三段式: t₁, t₂, t₃, v_max 否 三角形模式: 计算 v_peak 输出:t₁, t₂, t₃, v_peak 提示:三角形模式没有匀速段,t₂ = 0

2.5 参数对比:三段式 vs 三角形

为了让你更直观地理解两种模式的区别,我整理了一个对比表:

对比项 三段式(有匀速段) 三角形(无匀速段)
适用场景 位移足够大,能跑到v_max 位移短,跑不到v_max
峰值速度 v_max(用户设定) v_peak(由S,a,d决定)
匀速段时间t₂ > 0 = 0
总时间 t₁ + t₂ + t₃ t₁ + t₃
计算复杂度 低(直接公式) 中(需解方程)

2.6 实际项目中的注意事项

最后,分享几个我在项目中踩过的坑:

  • 加减速度不相等时,峰值速度不是简单的对称点。我见过有人直接用v_peak = √(a·S),结果减速段末端速度没归零。一定要用非对称公式。
  • 起始速度不为0的情况。比如电机已经在低速运行,需要加速到高速再减速。这时候加速段和减速段的公式要带上v₀和v_end,不能直接套用从0开始的公式。
  • 浮点数精度问题。在嵌入式平台上,float的精度有限。如果S很小(比如0.001mm),计算v_peak时可能出现开方后为0的情况。我建议用double,或者加一个最小位移阈值。
  • 实时性要求高时,预计算。如果运动参数在运行中不变,可以把t₁、t₂、t₃提前算好存起来,运行时只查表插值。我在一个高速贴片机项目里就是这么做的,节省了不少CPU周期。

一个小技巧:调试T型曲线时,我习惯先打印出三段的时间和位移,看看加起来是否等于总位移。如果误差超过1%,说明某个参数算错了。这个习惯帮我抓出过好几次bug。