4、T型曲线:T型速度曲线原理、数学模型、优缺点分析

说到电子凸轮的速度规划,T型曲线绝对是最基础、最直观的一种。我刚开始做运动控制那会儿,第一个接触的就是它。说白了,T型速度曲线就是让电机先匀加速、再匀速、最后匀减速,速度-时间图像看起来像个梯形,所以叫T型曲线。

你想想看,一个运动轴从A点跑到B点,最自然的想法是什么?先加速到目标速度,保持一会儿,再减速停下来。这就是T型曲线的核心思路。虽然现在有S型、多项式等更平滑的曲线,但T型曲线在简单场景下依然很实用。

核心要点:T型速度曲线由三段组成——加速段、匀速段、减速段。三段的时间可以相等,也可以不等,取决于实际需求。

4.1 数学模型

我们先建立数学模型。假设总位移为 S,最大速度为 Vmax,加速度为 Aacc,减速度为 Adec。注意,加速和减速的绝对值可以不同,但实际项目中我习惯设成一样,方便调试。

整个运动过程分为三个阶段:

  1. 加速段:速度从 0 线性增加到 Vmax,时间 t1 = Vmax / Aacc
  2. 匀速段:速度保持 Vmax,时间 t2 = (S - Sacc - Sdec) / Vmax
  3. 减速段:速度从 Vmax 线性减小到 0,时间 t3 = Vmax / Adec

其中,加速段位移 Sacc = ½ · Aacc · t1²,减速段位移 Sdec = ½ · Adec · t3²。

这里有个关键点:如果 S 太小,可能还没加速到 Vmax 就得开始减速了。这种情况叫「三角形速度曲线」,是T型曲线的一个特例。我在做贴片机项目时就遇到过,行程太短,Vmax 根本达不到,最后只能用三角形曲线。

个人经验:实际编程时,先判断能否达到 Vmax。如果 S < Sacc + Sdec,就按三角形曲线处理,峰值速度会低于设定值。

4.2 位置与速度的数学表达式

用分段函数描述更清楚。设总时间 T = t1 + t2 + t3,任意时刻 t 的速度和位置为:

// 加速段:0 ≤ t < t₁
v(t) = A_acc · t
s(t) = ½ · A_acc · t²

// 匀速段:t₁ ≤ t < t₁ + t₂
v(t) = V_max
s(t) = S_acc + V_max · (t - t₁)

// 减速段:t₁ + t₂ ≤ t ≤ T
v(t) = V_max - A_dec · (t - t₁ - t₂)
s(t) = S_acc + S_const + V_max · (t - t₁ - t₂) - ½ · A_dec · (t - t₁ - t₂)²

嗯,这里要注意,减速段的位置公式里 Sconst 是匀速段的位移。写代码时最好用累加方式,避免浮点误差累积。我早期用分段公式直接算,结果在段切换点总有微小跳变,后来改成增量式更新就稳了。

4.3 优缺点分析

任何曲线都有两面性,T型曲线也不例外。咱们客观分析一下。

维度 优点 缺点
计算复杂度 极低,加减乘除就能搞定 无
加速度连续性 加速度恒定,电机力矩利用率高 加速度在段切换点突变,产生冲击
运动平滑性 匀速段速度稳定,适合加工 加加速度(Jerk)无穷大,有振动风险
实现难度 代码简单,调试容易 不适合高速高精度场景
适用场景 低速、大惯量、对冲击不敏感的设备 精密定位、高速取放、人机交互

说白了,T型曲线最大的问题就是加速度突变。在加速段结束的瞬间,加速度从 Aacc 直接跳到 0,加加速度(Jerk)理论上无穷大。这会导致什么?机械振动、噪音、甚至螺丝松动。

避坑指南:我曾经在一个高速分拣项目里用了T型曲线,结果运行半小时后联轴器就松了。后来换成S型曲线,问题才解决。如果你的设备对振动敏感,或者运行速度超过 0.5 m/s,建议慎用T型曲线。

4.4 什么时候该用T型曲线?

虽然T型曲线有缺点,但别一棍子打死。我总结了几种适合的场景:

  • 大惯量设备:比如重型转台、大型龙门架,本身惯性大,加速度突变的影响被系统阻尼吸收
  • 低速运动:速度低于 0.2 m/s 时,冲击能量小,T型曲线完全够用
  • 简单点位运动:从A到B,中间没有复杂的路径约束
  • 资源受限的控制器:老式PLC或低端运动控制器,算力有限,T型曲线最省资源

反过来,如果设备要求高速、高精度、低振动,比如半导体设备、精密装配、医疗仪器,那就别省事了,直接上S型曲线或更高阶曲线。

4.5 T型曲线知识体系

下面这张图帮你理清T型曲线的核心逻辑:

T型速度曲线知识体系 T型速度曲线知识体系 T型速度曲线 原理 数学模型 优缺点分析 加速段 匀速段 减速段 速度公式 位置公式 三角形特例 优点 缺点 适用场景 核心判断逻辑 行程是否足够达到 V_max? → 是:T型曲线;否:三角形曲线

4.6 一个简单的实现示例

最后给一段C语言风格的伪代码,展示T型曲线的核心计算逻辑。实际项目中我会加上限位保护、急停处理等,这里只展示骨架。

// T型曲线规划函数
// 输入:总位移 S,最大速度 Vmax,加速度 A
// 输出:每个插补周期的目标位置
void T_Curve_Plan(float S, float Vmax, float A) {
    float t_acc = Vmax / A;          // 加速时间
    float S_acc = 0.5f * A * t_acc * t_acc;  // 加速位移
    float S_dec = S_acc;             // 假设加减速对称
    float S_const = S - S_acc - S_dec;       // 匀速位移
    
    // 判断是否达到 Vmax
    if (S_const < 0) {
        // 三角形曲线:达不到 Vmax
        float t_tri = sqrtf(S / A);
        float V_peak = A * t_tri;
        // 按三角形曲线生成位置...
    } else {
        float t_const = S_const / Vmax;
        float T_total = t_acc + t_const + t_acc;
        // 按T型曲线分段生成位置...
    }
}

个人习惯:我一般把加减速时间设为相同值,这样代码简单,调试也方便。如果设备对减速有特殊要求(比如急停),再单独设置减速度。

好了,T型曲线就讲到这里。它虽然简单,但理解透了,后面学S型曲线、多项式曲线就会轻松很多。毕竟,复杂的东西往往是从简单的基础上长出来的。