4、运动规划器(Planner)核心:梯形加减速算法原理、速度规划与前瞻(Look-Ahead)机制、加速度与急动度(Jerk)控制
好,我们进入运动规划器的核心地带。如果说步进电机驱动是3D打印机的肌肉,那Planner就是大脑。它决定了机器怎么走、走多快、什么时候停。说白了,没有好的规划器,你的打印机要么抖成筛子,要么丢步到姥姥家。
我个人习惯把Planner比作一个老司机开车。老司机知道前面要转弯了,会提前减速;知道路况好,会平稳加速。梯形加减速、前瞻、Jerk控制,就是这位老司机的驾驶技巧。
4.1 梯形加减速算法原理
梯形加减速,名字很形象。速度曲线像个梯形:先匀加速,再匀速,最后匀减速。这是最基础、最直观的速度规划方式。
为什么需要加减速?因为步进电机有扭矩-频率特性。你想想看,电机在低速时扭矩大,高速时扭矩小。如果一上来就全速跑,电机直接丢步。反过来,高速运行时突然急停,惯性会把转子甩过目标位置。
梯形加减速的核心参数就三个:
- 起始速度(\( V_{start} \)):电机能稳定启动的最低速度
- 最高速度(\( V_{max} \)):目标进给速度
- 加速度(\( a \)):速度变化的快慢
整个运动过程分为三个阶段:
- 加速段:从 \( V_{start} \) 匀加速到 \( V_{max} \),用时 \( t_{acc} = (V_{max} - V_{start}) / a \)
- 匀速段:以 \( V_{max} \) 匀速运动,用时取决于剩余距离
- 减速段:从 \( V_{max} \) 匀减速到 \( V_{start} \)(或0),用时 \( t_{dec} = (V_{max} - V_{start}) / a \)
关键公式:每个时间点的速度 \( V(t) = V_{start} + a \cdot t \)(加速段),位移 \( S(t) = V_{start} \cdot t + \frac{1}{2} a \cdot t^2 \)
我在项目中遇到过一个问题:如果运动距离太短,还没加速到最高速度就得开始减速了。这时候梯形就变成了三角形——只有加速和减速,没有匀速段。嗯,这种情况在3D打印的短线段移动中非常常见。
4.2 速度规划与前瞻(Look-Ahead)机制
单条直线的梯形加减速很简单,但3D打印是成千上万条G-code指令。每条指令之间如果独立做加减速,机器会一停一顿,打印表面全是振纹。
前瞻机制就是解决这个问题的。它提前分析后面几条指令,判断能不能平滑过渡。
我举个例子:
- G1 X10 F3000 // 向右移动10mm,速度3000mm/min
- G1 Y10 F3000 // 向上移动10mm,速度3000mm/min
如果两条指令独立执行,第一条末尾要减速到0,第二条再从0加速。但有了前瞻,Planner发现两条指令夹角不大,可以以某个速度直接拐过去,不用停。
前瞻的核心逻辑:
- 预读缓冲区:Marlin会预读16-32条G-code指令(取决于配置)
- 计算衔接速度:根据两条线段之间的夹角,计算允许的最大衔接速度
- 反向传播:从最后一条指令往前推,确保每条指令的减速距离足够
避坑指南:我曾经把前瞻缓冲区设得太大(128条),结果内存爆了。Marlin运行在资源受限的MCU上,缓冲区大小要权衡。一般16-32条就够用,除非你打印极复杂的模型。
前瞻的数学基础是:两条线段夹角越小,允许的衔接速度越高。夹角为0(同一直线)可以全速通过;夹角180度(掉头)必须减速到0。
衔接速度计算公式(简化版):
// 两条线段夹角 theta
// 允许的最大衔接速度 V_junction
V_junction = sqrt( a * R * (1 - cos(theta)) )
// 其中 R 是急动度限制的等效半径
4.3 加速度与急动度(Jerk)控制
加速度控制的是速度的变化率。但光有加速度还不够——加速度本身的变化率,就是急动度(Jerk)。
你想想看,如果加速度突然从0跳到最大值,电机和机械结构会受到一个冲击。这就是为什么有些打印机打印时会有「咯噔」一下的感觉。
急动度控制,说白了就是让加速度平滑变化。从梯形加减速升级到S形加减速:
- 梯形:加速度突变,速度曲线是折线
- S形:加速度渐变,速度曲线是平滑的S形
Marlin中的Jerk控制其实是个简化版本。它不直接控制急动度,而是通过限制相邻线段之间的速度变化量来间接实现。
注意:Marlin的Jerk参数和物理上的Jerk(加加速度)不是一回事。Marlin的Jerk是「允许的最大瞬时速度变化」。比如Jerk=10mm/s,意味着两条线段衔接时,速度变化不能超过10mm/s。这是一种工程简化,不是严格的数学定义。
我个人习惯这样设置:
- 加速度:根据打印机结构刚度来。CoreXY可以设高些(2000-3000mm/s²),龙门架设低些(500-1000mm/s²)
- Jerk:一般设8-15mm/s。太小了打印慢,太大了有振纹
下面这张图展示了梯形加减速和S形加减速的区别:
从图上能清楚看到:梯形加减速的加速度是突变的,而S形加减速的加速度是渐变的。S形对机械更友好,但计算量更大。
Marlin默认使用梯形加减速(因为计算简单),但可以通过启用SCURVE功能来开启S形加减速。我个人建议,如果你的MCU算力够(比如32位板),一定要开S形。打印质量提升很明显。
实战经验:我在调试一台CoreXY打印机时,梯形加减速下打印速度到150mm/s就有振纹。开启S形加减速后,同样的机械结构能跑到200mm/s还纹丝不动。这就是急动度控制的威力。
最后总结一下三个核心参数的关系:
| 参数 | 作用 | 设置建议 |
|---|---|---|
| 加速度 (Acceleration) | 控制速度变化快慢 | 500-3000 mm/s²,视结构刚度而定 |
| 急动度 (Jerk) | 控制相邻线段速度变化量 | 8-15 mm/s,太大有振纹,太小速度慢 |
| 前瞻缓冲区 (Look-Ahead) | 预读指令做平滑过渡 | 16-32条,内存够可以设大些 |
嗯,运动规划器这部分内容比较多,但理解了梯形加减速和前瞻机制,你就掌握了Marlin运动控制的核心。剩下的就是根据你的打印机硬件去调参了。