4. 固件加速度与速度配置:Marlin 中 Max Acceleration、Max Feedrate、Jerk 的源码位置与修改

好,咱们直接进入正题。前面聊了电机和驱动,现在该碰固件了。很多朋友遇到打印丢步,第一反应是「电流不够」或者「驱动坏了」。其实,固件里那三个参数——最大加速度、最大速度、瞬时加加速度(Jerk)——才是真正的幕后黑手。我调试过的机器里,至少有一半的丢步问题,调完这三个参数就解决了。

4.1 这三个参数到底管什么?

先别急着翻代码,咱们得先搞明白它们各自是干嘛的。说白了,它们就是给电机运动上了三道「紧箍咒」。

  • Max Feedrate (最大速度):电机能跑多快。单位 mm/s。
  • Max Acceleration (最大加速度):电机从 0 加速到目标速度,或者减速到 0,这个过程能有多「猛」。单位 mm/s²。
  • Jerk (瞬时加加速度):这个最绕。它其实是允许的「速度突变」。比如从静止直接跳到某个速度,或者从匀速直接进入减速,这个「跳变」的幅度就是 Jerk。单位 mm/s。

你想想看,如果 Jerk 设得太大,电机在启动瞬间就要承受一个巨大的速度跳变,力矩跟不上,直接就丢步了。我见过有人把 Jerk 设到 20,结果打印小圆点的时候,电机「咔咔」响,跟打桩机似的。

核心逻辑: 这三个参数是层层限制的关系。最终的运动指令,必须同时满足速度、加速度和 Jerk 的限制。任何一个超标,电机就会「抗议」——丢步。

4.2 源码位置:它们藏在哪?

Marlin 固件里,这些参数的定义非常集中。我个人习惯直接去 Configuration.h 里找,这是最直观的入口。当然,如果你用的是 Marlin 2.0 以上的版本,有些参数可能被移到了 Configuration_adv.h 里。咱们一个一个来。

4.2.1 Max Feedrate (最大速度)

在 Configuration.h 中,搜索 DEFAULT_MAX_FEEDRATE。你会看到类似这样的代码:

// 最大速度 (mm/s)
#define DEFAULT_MAX_FEEDRATE          { 300, 300, 100, 25 } // X, Y, Z, E

这个数组分别对应 X、Y、Z 和挤出机 E 的最大速度。注意,Z 轴通常很慢,因为它的丝杆螺距小,跑快了容易丢步。挤出机 E 的 25 mm/s 其实已经偏保守了,有些高速打印头可以到 50 甚至 100,但前提是热端跟得上。

4.2.2 Max Acceleration (最大加速度)

同样在 Configuration.h 中,搜索 DEFAULT_MAX_ACCELERATION:

// 最大加速度 (mm/s²)
#define DEFAULT_MAX_ACCELERATION      { 3000, 3000, 100, 10000 } // X, Y, Z, E

这里有个坑,我一开始也犯过。挤出机 E 的加速度设得特别大(比如 10000),以为这样能快速挤出。结果呢?在回抽的时候,电机瞬间加速,直接就把丝给磨断了。嗯,这里要注意,挤出机的加速度不能只看数字,得结合你的挤出机构造来设。

4.2.3 Jerk (瞬时加加速度)

Jerk 的位置稍微有点变化。在 Marlin 1.1.x 里,它在 Configuration.h 中:

// 瞬时加加速度 (mm/s)
#define DEFAULT_XJERK                 10.0
#define DEFAULT_YJERK                 10.0
#define DEFAULT_ZJERK                  0.3
#define DEFAULT_EJERK                  5.0

但在 Marlin 2.0 之后,它被移到了 Configuration_adv.h 里,并且改成了 CLASSIC_JERK 模式。如果你用的是较新版本,记得去 Configuration_adv.h 里找 #define CLASSIC_JERK 相关的设置。

注意: Marlin 2.0 之后引入了「Junction Deviation」( Junction 偏差)模式,它替代了传统的 Jerk。如果你开启了 #define JUNCTION_DEVIATION,那么 Jerk 参数就不再生效了。两者只能选其一,不能混用。我建议新手先用 Classic Jerk,逻辑更直观。

4.3 怎么改?我的实战经验

光知道位置不够,得知道怎么调。我曾经帮一个用户调他的 CoreXY 机器,打印小零件总是有「鬼影」,后来发现是加速度太高了。下面是我总结的一套「降维打击」法:

  1. 先降 Jerk:把 X、Y 的 Jerk 降到 5-8 mm/s。Z 轴保持 0.3 不动。E 轴降到 3-5。这是最立竿见影的。很多丢步问题,其实就是 Jerk 太大,电机起步那一下没抓住。
  2. 再降加速度:如果你用的是 2020 型材的轻量机器,X/Y 加速度建议从 2000 mm/s² 开始试。如果是重型龙门架,1000 都算高的。别贪快,稳定第一。
  3. 最后调速度:速度其实影响最小。只要加速度和 Jerk 合理,速度高一点通常不会丢步,但会带来共振。所以速度要根据你的机器刚性来。

我的小技巧: 改完参数后,用 M201、M203、M205 这三个 G-code 命令在终端里实时测试,不用每次改完都重新编译固件。比如 M201 X1500 Y1500 就能临时把加速度改成 1500。等找到最佳值了,再写到固件里。

4.4 知识结构图:参数与丢步的关系

下面这张图,是我自己画的一个逻辑关系图。它帮你理清这三个参数到底怎么影响丢步的。

固件参数与丢步关系图 Max Feedrate 最大速度 (mm/s) Max Acceleration 最大加速度 (mm/s²) Jerk 瞬时加加速度 (mm/s) 运动规划 (Planner) 梯形/S曲线速度曲线生成 电机执行结果 ✅ 正常打印 ❌ 丢步/偏移

从图里能看明白:三个参数共同输入到运动规划器,规划器算出实际的速度曲线。如果曲线太「陡」(加速度大)或者有「台阶」(Jerk 大),电机执行时就会丢步。说白了,丢步就是电机「力不从心」的表现。

4.5 避坑指南:我曾经踩过的雷

最后,分享几个我实际调试中遇到的坑,希望能帮你省点时间。

  • 别迷信「高速」:有些用户上来就把加速度设到 5000,觉得这样打印快。结果打印到一半,Y 轴「咔」一声,层全偏了。后来降到 1500,稳如老狗。记住,稳定比速度重要一万倍。
  • Z 轴的 Jerk 要特别小:Z 轴因为要克服重力,Jerk 设大了,电机在换层时容易「点头」,导致层高不均。我一般设 0.2-0.3。
  • 挤出机 E 的加速度别和 XY 一样:挤出机是推塑料的,不是推滑块的。加速度太大,塑料来不及融化,就会「咔咔」响,甚至堵头。我习惯把 E 的加速度设成 XY 的一半左右。

嗯,这一章的内容就到这。参数的位置和改法都给你了,剩下的就是动手试。别怕改坏,大不了重新编译一次固件嘛。