第四节:运动控制核心参数与加减速算法

各位同学好,我是老张。今天咱们聊聊3D打印运动控制里最核心的几个参数——加速度、速度、加加速度,以及两种经典的加减速算法。这些概念听起来有点抽象,但说白了,它们直接决定了你的打印件表面质量、打印时间,甚至机器会不会「跳舞」。

4.1 速度与加速度:最基础的「快」与「变快」

先讲速度。速度就是喷头移动的快慢,单位是 mm/s。这个好理解,你设置 60mm/s,喷头就每秒走 60 毫米。但问题来了——速度不能瞬间从 0 跳到 60,对吧?

这就引出了加速度。加速度描述的是速度变化的快慢,单位是 mm/s²。我打个比方:你开车从静止加速到 60km/h,如果 3 秒完成,加速度就是 20km/h/s。3D 打印里也一样,电机需要时间从 0 加速到目标速度。

关键点:加速度越大,加速时间越短,但冲击力也越大。我见过不少新手为了省时间,把加速度设到 5000mm/s² 以上,结果打印时机器抖得像筛子,表面全是振纹。

实际项目中,我一般建议加速度控制在 800~1500mm/s² 之间。具体数值取决于你的机器结构——龙门架结构可以稍高,悬臂结构就得保守些。

4.2 加加速度(Jerk):被忽视的「温柔」参数

加加速度,英文叫 Jerk,单位是 mm/s³。这名字挺有意思,字面意思就是「急动度」。它描述的是加速度的变化率。

为什么会需要这个参数?你想想看,如果加速度从 0 瞬间跳到 1000mm/s²,电机和机械结构会承受一个冲击。就像你开车时猛踩油门,乘客会往后一仰。加加速度就是控制这个「猛踩」的力度。

我的经验:加加速度设得太小,打印效率会明显下降,因为每个拐角都要花时间「温柔」地加速减速。设得太大,机器会震动。我通常从 8~12 mm/s³ 开始调试,然后根据打印效果微调。

嗯,这里要注意:不同固件对 Jerk 的定义略有不同。Marlin 固件里,Jerk 其实是「瞬时速度变化的最大允许值」,而不是严格意义上的加加速度。但概念是相通的——它限制了速度变化的剧烈程度。

4.3 梯形加减速:简单粗暴但有效

梯形加减速是最基础的算法。它的速度曲线像个梯形:先匀加速,再匀速,最后匀减速。

我画个图帮你理解:

时间 t 速度 v 加速段 匀速段 减速段 梯形加减速速度曲线

梯形算法的优点是简单、计算量小、容易实现。缺点也很明显——加速度在拐点处突变,会产生冲击。你看图上加速段结束的地方,速度曲线有个明显的「折角」,那就是加速度突变的位置。

我曾经用梯形算法做一台高速打印机,速度设到 150mm/s,结果打印小零件时,每个拐角都「咯噔」一下,声音听着就心疼。后来换成 S 形加减速,问题就解决了。

4.4 S形加减速:平滑如丝

S 形加减速,顾名思义,速度曲线像字母 S。它把加速过程分成了三个阶段:加加速度逐渐增大、加加速度恒定、加加速度逐渐减小。这样加速度本身也是平滑变化的,没有突变。

看这个图:

时间 t 速度 v 加加速 匀加速 减加速 匀速 S形加减速速度曲线

看到区别了吗?S 形曲线的拐角是圆滑的,没有「折角」。这意味着加速度是连续变化的,机械冲击小得多。

实际效果对比:

对比项 梯形加减速 S形加减速
加速度变化 突变(有冲击) 连续(平滑)
打印表面质量 可能有振纹 表面更细腻
计算量 较大
适用场景 低速、大尺寸打印 高速、精细打印

4.5 代码实现:梯形 vs S形

光说不练假把式。我写两段伪代码,帮你理解它们的区别。

梯形加减速核心逻辑:

// 梯形加减速 - 计算当前速度
float calcTrapezoidalSpeed(float currentPos, float startPos, float endPos, 
                           float maxSpeed, float accel) {
    float distToEnd = endPos - currentPos;
    float distFromStart = currentPos - startPos;
    float totalDist = endPos - startPos;
    
    // 加速阶段
    float accelDist = (maxSpeed * maxSpeed) / (2 * accel);
    if (distFromStart < accelDist) {
        return sqrt(2 * accel * distFromStart);
    }
    // 减速阶段
    if (distToEnd < accelDist) {
        return sqrt(2 * accel * distToEnd);
    }
    // 匀速阶段
    return maxSpeed;
}

S形加减速核心逻辑:

// S形加减速 - 使用正弦曲线平滑过渡
float calcSShapeSpeed(float t, float totalTime, float maxSpeed) {
    // 归一化时间 [0, 1]
    float ratio = t / totalTime;
    
    // 使用正弦函数生成S形曲线
    // 加速段 (0 ~ 0.5)
    if (ratio < 0.5) {
        return maxSpeed * (1 - cos(PI * ratio)) / 2;
    }
    // 减速段 (0.5 ~ 1.0)
    else {
        return maxSpeed * (1 + cos(PI * (ratio - 0.5))) / 2;
    }
}

我的建议:如果你用的是 Marlin 固件,它默认就是梯形加减速。想用 S 形,可以试试 Klipper 固件,它对 S 形曲线支持更好。我去年把一台老机器从 Marlin 换成 Klipper,打印速度从 60mm/s 提到了 120mm/s,表面质量反而更好了。

4.6 参数调优实战经验

最后分享几个调参的「土办法」,都是我用真金白银换来的教训:

  • 先调加速度,再调速度:很多人上来就调速度,结果机器抖得不行。我习惯先把加速度降到 800,然后慢慢提速,找到机器不抖的临界点。
  • Jerk 从 10 开始:加加速度我一般从 10 mm/s³ 起步,打印一个 20mm 的立方体,观察拐角处有没有「过冲」或「欠冲」。
  • 听声音判断:机器运行时如果有「嗡嗡」的低频共振声,说明加速度或 Jerk 太高了。正常的打印声应该是均匀的「沙沙」声。

避坑指南:我曾经为了追求极致速度,把加速度调到 3000,Jerk 调到 20,结果打印到一半,皮带直接从同步轮上跳出来了!从那以后我学乖了——速度可以快,但机械极限不能碰。建议你调参时留 20% 的安全余量。

好了,这一节的内容就到这里。记住:运动控制不是越快越好,而是越稳越好。你调参时多花十分钟,打印时就能省下几个小时。


公众号:蓝海资料掘金营,微信deep3321