一、T型速度规划概述
什么是T型速度规划?
T型速度规划,说白了就是让电机按照「梯形」的速度曲线来运动。你想想看,速度从零开始匀加速,到达目标速度后匀速跑一段,最后匀减速到零。把速度-时间图画出来,就是个梯形——所以叫T型。
我刚开始做运动控制那会儿,第一个接触的就是T型规划。为什么?因为它简单、直观、好理解。你不需要什么高深的数学,加减速过程就是匀加速和匀减速,中间段就是匀速。每个工程师都能一眼看懂。
但简单归简单,T型规划有个硬伤——加速度会突变。嗯,这里要注意,加速度突变意味着什么?意味着冲击力。我在做数控机床项目时,就因为这个吃过亏。
T型曲线的数学模型
咱们先看数学表达。T型速度规划的核心参数就三个:
- 最大速度 \( v_{max} \) —— 你允许电机跑多快
- 加速度 \( a \) —— 加/减速的速率
- 总位移 \( S \) —— 目标位置
整个运动过程分成三段:
| 阶段 | 时间区间 | 速度公式 | 位移公式 |
|---|---|---|---|
| 加速段 | \( 0 \le t \le t_a \) | \( v(t) = a \cdot t \) | \( s(t) = \frac{1}{2} a t^2 \) |
| 匀速段 | \( t_a \le t \le t_a + t_c \) | \( v(t) = v_{max} \) | \( s(t) = v_{max} \cdot (t - t_a) + s_a \) |
| 减速段 | \( t_a + t_c \le t \le T \) | \( v(t) = v_{max} - a \cdot (t - t_a - t_c) \) | \( s(t) = v_{max} \cdot (t - t_a - t_c) - \frac{1}{2} a (t - t_a - t_c)^2 + s_a + s_c \) |
其中 \( t_a \) 是加速时间,\( t_c \) 是匀速时间,\( T = t_a + t_c + t_d \) 是总时间。如果加速和减速的加速度大小相等,那么 \( t_a = t_d \)。
关键公式:加速段位移 \( s_a = \frac{v_{max}^2}{2a} \),减速段位移 \( s_d = \frac{v_{max}^2}{2a} \)。如果总位移 \( S < s_a + s_d \),那就到不了最大速度——这就是「三角形」速度曲线,T型的一种退化情况。
物理意义:加速度突变意味着什么?
咱们聊聊物理意义。T型规划里,加速度在三个时刻发生突变:
- 启动瞬间:加速度从0跳到 \( a \)
- 加速结束:加速度从 \( a \) 跳到 0
- 减速开始:加速度从 0 跳到 \( -a \)
- 停止瞬间:加速度从 \( -a \) 跳到 0
加速度突变,对应的是加加速度(Jerk)无穷大。加加速度是加速度的变化率,数学上就是速度的三阶导数。物理上,加加速度直接对应冲击力。
我记得有一次做精密定位平台,用的就是T型规划。平台到位后总是有微小的抖动,怎么调PID都没用。后来发现,就是加减速切换时的冲击力激起了机械共振。换成S型规划后,问题就解决了。
避坑指南:我曾经在高速龙门铣项目上吃过亏。T型规划在高速切换时,加速度突变产生的冲击力直接导致丝杠螺母松动。从那以后,但凡负载较大或精度要求高的场合,我都会优先考虑S型规划。
T型规划的适用场景
虽然T型有冲击问题,但它不是一无是处。我个人习惯这样选型:
- 适合用T型的场景:
- 负载轻、刚性好的系统(比如小步进电机驱动)
- 对到位精度要求不高的场合
- 计算资源受限的MCU(T型计算量小)
- 低速运动(冲击力小,可以忽略)
- 不建议用T型的场景:
- 重负载或大惯量系统
- 高精度定位(比如光刻机、贴片机)
- 机械结构刚性不足
- 对振动敏感的应用
我的经验:如果你不确定该用T型还是S型,先算一下加加速度。T型的加加速度是无穷大,S型是有限值。对于大多数工业应用,加加速度控制在 \( 1000 \, m/s^3 \) 以内就比较安全。当然,具体数值要看你的机械特性。
代码实现:最简单的T型规划
下面是一个C语言的T型规划实现,我习惯把它封装成一个结构体:
typedef struct {
float v_max; // 最大速度
float a; // 加速度
float s_total; // 总位移
float t_acc; // 加速时间
float t_const; // 匀速时间
float t_dec; // 减速时间
float t_total; // 总时间
float s_acc; // 加速位移
float s_const; // 匀速位移
float s_dec; // 减速位移
} T_Profile;
void T_Profile_Calc(T_Profile *p) {
// 计算加速和减速所需位移
p->s_acc = (p->v_max * p->v_max) / (2.0f * p->a);
p->s_dec = p->s_acc;
// 判断是否能达到最大速度
if (p->s_acc + p->s_dec <= p->s_total) {
// 能达到最大速度,梯形曲线
p->t_acc = p->v_max / p->a;
p->t_dec = p->t_acc;
p->s_const = p->s_total - p->s_acc - p->s_dec;
p->t_const = p->s_const / p->v_max;
} else {
// 达不到最大速度,三角形曲线
float v_peak = sqrtf(p->a * p->s_total);
p->t_acc = v_peak / p->a;
p->t_dec = p->t_acc;
p->t_const = 0.0f;
p->s_const = 0.0f;
p->s_acc = v_peak * v_peak / (2.0f * p->a);
p->s_dec = p->s_acc;
}
p->t_total = p->t_acc + p->t_const + p->t_dec;
}
这段代码我用了很多年,逻辑很清楚。先算能不能到最大速度,能到就是梯形,到不了就是三角形。实际项目中,你还需要考虑加减速时间是否满足系统的最小时间要求——这个后面章节会讲。
小结
T型速度规划是运动控制的基础,理解它才能理解更复杂的S型规划。它的优点是简单、计算量小,缺点是加速度突变带来冲击。下一章我会详细讲S型规划,看看它是怎么解决这个问题的。
嗯,最后说一句:别因为T型有缺点就轻视它。很多场合下,T型规划完全够用,而且调试起来比S型快得多。选型的关键是「合适」,不是「高级」。