☰
Marlin固件配置全攻略:从主板到PID,避坑指南
2026/10/5 4:56:25 网站建设 项目流程

写固件配置这种事,最怕的就是一上来就闷头改参数。我见过太多人把主板换了、驱动换了,结果刷完固件屏幕不亮、温度乱跳、Z轴反向、限位失效,最后跑来问怎么回事。一问才知道,Configuration.h里十几个关键宏压根没动,或者抄了一份不知道哪来的配置就往自己机器上套。Marlin固件这东西看着是改配置,实际上是在告诉主板:你的机器长什么样、有哪些硬件、各自什么特性。配置不匹配,固件编译得再干净也是废的。

这篇内容不讲废话,就把我从 RAMPS 一路玩到 SKR、帮朋友调过各种“僵尸机”之后,整理下来的一套 Marlin 固件配置思路摊开讲。从刷写前的准备、Configuration.h里的核心宏、温度与传感器、电机与行程参数,到编译烧录流程和上电后的验证顺序,一次性说清楚。适合正准备刷固件的新手,也适合那些改完硬件不知道怎么改固件的玩家。

1. 刷写前必须搞清楚的硬件清单与固件版本选择

很多人第一步就栽了。不是不会改配置,而是压根没搞清楚自己机器上是什么硬件。Marlin 的引脚定义跟主板型号强绑定,填错一个宏,编译可能照样通过,但上电后就是一片死寂或者行为诡异。所以在打开配置文件之前,先把自己机器的硬件底细摸清楚。

1.1 主板与驱动芯片的确认,这决定后面几乎所有引脚定义

先确认三件事:主板的型号和版本、步进驱动芯片的型号、主控芯片是 8 位还是 32 位。

主板型号直接决定了#define MOTHERBOARD后面的板号。Marlin 在Marlin/src/core/boards.h里维护了一长串板号列表,像BOARD_RAMPS_14_EFB、BOARD_BTT_SKR_MINI_E3_V2_0、BOARD_BTT_SKR_V1_4_TURBO这种。每个板号对应Marlin/src/pins/目录下的一个引脚文件,比如pins_BTT_SKR_MINI_E3_V2_0.h。也就是说,只要板号选对,主板上的加热棒引脚、风扇引脚、限位开关引脚、LCD 接口就全都映射好了,后面要改的东西少一大半。

我曾经见过有人用 SKR Mini E3 V3.0 的主板,结果MOTHERBOARD填的是 V2.0 的板号。编译能过,但风扇一转就报错,热敏电阻读数直接漂到 300 多度。原因就是两个板子虽然外形一样,但几个引脚的复用关系变了。所以买主板的时候,型号尾缀一定要记清楚,V2.0 就是 V2.0,V3.0 就是 V3.0,别想当然。

驱动芯片型号同样关键。A4988、DRV8825、TMC2208、TMC2209 这些驱动芯片的工作方式不一样,寄存器配置也不一样。Marlin 2.x 里通过X_DRIVER_TYPE、Y_DRIVER_TYPE、Z_DRIVER_TYPE、E0_DRIVER_TYPE这些宏来告诉固件你用的什么驱动。如果用的是 TMC2209 却配置成 A4988,静音模式根本不生效,驱动芯片还会在运行一段时间后过热甚至烧毁。反过来,如果明明用 A4988 却声明成 TMC2209,固件会尝试走 UART 通信,驱动芯片没有对应的协议引脚,电机就会抖动或者干脆不动。

确认硬件之后还有个容易被忽略的点:主控芯片架构。Marlin 2.0 之后同时支持 8 位的 AVR(比如 ATmega2560)和 32 位的 ARM Cortex-M 系列(比如 STM32F103、STM32F407)。在 PlatformIO 的platformio.ini里,每个主板对应一个编译环境,比如 RAMPS 1.4 对应mega2560环境,SKR Mini E3 V2.0 对应STM32F103RC_btt环境。这个环境选错,就算Configuration.h里板号写对了也编不出来。选环境这种事在第一轮编译的时候最容易被卡住,后面第 5 节我会专门说。

1.2 固件版本选择:bugfix-2.1.x 与 stable 2.1.x 的差异

Marlin 官方仓库有两个主要分支:stable-2.1.x和bugfix-2.1.x。稳定版推送频率低,适合追求省心、不想频繁更新的人;修补版几乎每天都有提交,会提前引入一些新功能和硬件支持,但偶尔也会冒出新的 bug。

我的建议是:如果你只是给现成机器刷固件,用稳定版就够了,少很多折腾。你要是打算经常折腾新硬件、追新功能,或者手上的主板太新、稳定版里还没有对应的引脚文件,那就用bugfix-2.1.x。

还有一个很多新手不知道的地方:Marlin 官网的自动下载页会自动打包最新的bugfix-2.1.x源码。你点下载的时候,拿到的不一定是稳定版。如果你心里想要稳定版,最好去 GitHub 仓库直接切分支下载 zip 包,别用自动下载页。另外,下载完源码之后,Marlin/目录下只有Configuration.h和Configuration_adv.h两个示例配置,不要直接拿来编译,得先改成和你机器匹配的配置。

1.3 编译环境:PlatformIO 为主,Arduino IDE 作为备选

Marlin 2.x 官方主推的编译方式是 VSCode 加 PlatformIO 插件。原因很简单:Marlin 2.x 的 32 位主板支持依赖 PlatformIO 的框架,PlatformIO 会自动处理编译器、库依赖、上传工具链,省掉很多手工配置的麻烦。

第一次用 PlatformIO 编译,会经历一个比较长的依赖下载过程,可能持续几分钟到几十分钟,取决于网络状况。这里提前说一下,免得你以为电脑卡死了。下载完成后会生成.pio目录,里面是编译环境和中间文件,后续编译就快了。

Arduino IDE 不是不能编 Marl in 2.x,但对于 32 位主板需要额外装 STM32 的板卡支持包,流程比较繁琐,而且容易遇到库冲突。所以除非你的机器特别老、只能用 Arduino IDE 编 AVR 版本,否则我建议直接上 PlatformIO。说句实话,我在帮别人远程排查固件问题的时候,十个里有八个是 Arduino IDE 环境下没装对支持包导致的。

2. Configuration.h 里那些决定能不能开机的主板与驱动配置

Configuration.h是 Marl in 的主配置文件,新手打开后容易懵,因为里面全是#define和注释。但其实它的排版非常有条理,从上到下依次是:主板、驱动、温度、电机、行程、速度、加速度、LCD 等。先把影响“开机能不能跑”的这部分讲透。

2.1 MOTHERBOARD 宏:填错一个字符主板就不干活

主板宏写在Configuration.h靠前的位置:

//#define MOTHERBOARD BOARD_RAMPS_14_EFB #define MOTHERBOARD BOARD_BTT_SKR_MINI_E3_V2_0

注意MOTHERBOARD前面有个注释掉的旧板号。改的时候一定要把不用的那行注释掉,不要留两个#define MOTHERBOARD,否则编译的时候会报重复定义错误。

这个宏的作用是告诉 Marl in 去加载哪个引脚文件。它不像普通业务代码那样有复杂的逻辑,就是一个“查表”的过程。板号填对了,后面几乎不用碰引脚映射;填错了,轻则温度传感器读数异常,重则 Mosfet 直接全开、加热棒失控。

提一个我踩过的坑:BOARD_RAMPS_14_EFB结尾的EFB代表的是“Extruder, Fan, Bed”的接口分配方式。部分 RAMPS 1.4 的套件会把风扇接口定义成EFF(两个风扇),板号就得换成BOARD_RAMPS_14_EFF。如果你发现刷完固件后风扇不受控制、或者第二个风扇没反应,大概率是这里没对上。选板号的时候顺便瞄一眼你的 RAMPS 板上丝印,是 EFB 还是 EFF,能省掉后面很多排查时间。

2.2 步进驱动配置:A4988、TMC2208/2209 的不同玩法

Marlin 2.x 配置驱动的位置比 1.x 清晰了很多,直接在Configuration.h里搜DRIVER_TYPE:

#define X_DRIVER_TYPE TMC2209 #define Y_DRIVER_TYPE TMC2209 #define Z_DRIVER_TYPE TMC2209 #define E0_DRIVER_TYPE TMC2209

这个配置决定了固件用什么样的 API 去控制驱动。很多人以为换 TMC2209 就是为了静音,接上就完事。实际上 TMC2209 的静音靠的是不同模式,Marlin 里用#define STEALTHCHOP相关配置来控制。

A4988 和 DRV8825 走的是最简单的 STEP/DIR 模式,固件只要给出脉冲和方向信号就行。TMC2208、TMC2209、TMC5160 则多了一个 UART 配置的选项。开了 UART 模式之后,固件可以实时读取驱动芯片的温度、电流、堵转状态,甚至可以通过 M122 命令查看驱动信息。这些功能对排查电机丢步、过热问题非常有帮助。

再说一个很多人忽略的点:驱动电流。A4988 的电流靠板子上的电位器调,TMC2209 在 UART 模式下可以通过固件里的#define X_CURRENT这类宏设置。电流设低了,电机没力,打印速度快了会丢步;设高了,驱动芯片发热严重,甚至触发过热保护直接停工。我用 TMC2209 的经验值一般是 X/Y 轴 580mA 到 650mA,Z 轴 650mA 到 750mA,挤出机 600mA 到 700mA。不同电机参数不一样,这个值不是绝对的,但可以作为一个起步参考。

2.3 LCD 与串口:连不上电脑时的排查顺序

很多人刷完固件发现电脑连不上打印机,第一反应是数据线坏了。其实那时候应该先检查 Mbps 相关的配置。Marlin 2.x 里,#define BAUDRATE 115200是默认串口波特率。如果你用 Cura 或者 Pronterface 连接时软件里选的波特率和固件不一致,连不上是必然的。

还有一个点是,某些主板的 USB 接口走的是板载 USB,比如 SKR Mini E3 用的就是 STM32 的 USB CDC。这种板子在 Windows 里会识别成一个串口,设备管理器里能看到COMx。第一次插上去可能需要装驱动,装好后再连接。如果你在设备管理器里根本看不到端口,那大概率是 USB 线的问题——不是所有 USB 线都带数据线芯,有些只能充电。这个问题我一年能帮人远程排查十几次,真不是段子。

LCD 方面,如果你是官方或者兼容的 12864 液晶屏,一般需要在Configuration.h里打开对应的显示器宏。比如:

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

这个宏决定 Marlin 用哪个 LCD 驱动库和菜单布局。如果忘了开,屏幕可能亮也不亮,或者一直白屏。如果是触摸屏,比如 TFT35,通常还需要设置串口屏相关的选项,这就更复杂一些,新手不建议一开始就上触摸屏,先把基础文本屏调通再说。

3. 热床热端与传感器配置:温度失控往往从这里开始

温度部分是我最不敢马虎的。3D 打印机一旦温度失控,轻则打印失败,重则起火。Marlin 的温控逻辑其实很成熟,但前提是你得把传感器类型和保护参数配对。

3.1 热敏电阻类型选择和温度表匹配

先看热敏电阻配置:

#define TEMP_SENSOR_0 1 #define TEMP_SENSOR_BED 1

后面的数字代表热敏电阻的类型。Marlin 内置了几种常见热敏电阻的阻值-温度对照表,比如 1 代表 100K NTC 3950,5 代表 100K NTC 100K 3988 之类的。这个值不能靠猜。

如果你用的是原装热头,先查一下是用什么热敏电阻。常见的 Ender 3 原厂热敏电阻大致对应 1 号表。如果你换过热敏电嘴,那就要看买的时候商品页写的传感器类型。实在查不到,还有一个土办法:刷完固件之后看常温下的温度读数。

正常情况下,室温 25 度左右时,热敏电阻读数应该在室温附近。如果读出来是 -14 或者 300 多,那很可能就是温度表类型不对。这个判断方法我在后边的校准部分还会提。

有的热敏电阻需要上拉电阻配置。Marlin 默认已经加上了,正常不用动。但是如果你自己换过主板的模拟电路部分,就要留意THERMISTORHEATER_0相关的PULLUP配置了。

3.2 THERMAL_PROTECTION 参数与误报警的处理

Marlin 的温控保护主要集中在Configuration_adv.h里:

#define THERMAL_PROTECTION_HOTENDS #define THERMAL_PROTECTION_BED

这两个宏默认是打开的,含义是:当温度变化速率异常、实测温度和目标温度偏差过大时,固件会强制切断加热输出并报错。这是一道安全底线,我不建议关掉。

但有时候保护机制太灵敏也会造成困扰。比如打印高导热材料的时候,喷嘴温度可能在 200 度到 220 度之间快速波动,触发了保护阈值,机器直接暂停。这时候不要一上来就关保护,正确做法是调整保护参数本身。比如:

#define THERMAL_PROTECTION_HOTEND_PERIOD 40 #define THERMAL_PROTECTION_HOTEND_HYSTERESIS 4

PERIOD代表检测周期,HYSTERESIS代表允许的偏差范围。把周期适当拉长、偏差范围稍微放大,可以减少误报。但是放大范围也意味着温度失控时更晚才会被感知到,所以我不建议把HYSTERESIS调到 10 以上。

还有一个常见的问检是加热慢导致超时报警。WATCH_HOTEND_TEMP、WATCH_HOTEND_PERIOD这些参数定义了“升温没有达到预期就报警”。如果电压偏低、加热棒功率不够,实际升温速度达不到固件的预期,它就会在加热过程中掉链子。这时候可以适当加大WATCH_HOTEND_PERIOD。

3.3 PID 参数与自整定:别照抄默认值

PID 是温度控制的核心。Marlin 自带一组 PID 参数,但那是针对官方测试平台的,你自己的机器结构不同,PID 参数必然不同。直接照抄默认值,打印时温度波动大,层间粘合差,严重时出层纹、拉丝甚至过热。

获取自己机器 PID 参数的命令是:

M303 E0 S200 C8

意思是让挤出机在 200 度目标下进行 8 个周期的 PID 自整定。整定完成后固件会在串口打印出类似这样的结果:

P: 21.73 I: 1.14 D: 103.03

把这三个值填进Configuration.h里:

#define DEFAULT_Kp 21.73 #define DEFAULT_Ki 1.14 #define DEFAULT_Kd 103.03

热床也可以做 PID 自整定。用M303 E-1 S60 C8这样的命令,目标温度设成你平时打印常用的床温。整定完之后填到对应的DEFAULT_bedKp、DEFAULT_bedKi、DEFAULT_bedKd里。

这里有个细节:做热床 PID 自整定的时候不要让风扇吹到热床表面,否则测出来的参数反复横跳。整定过程通常要几分钟,别急着拔线。

4. 行程、速度与加速度:改完这三组参数打印质量立竿见影

温度搞定了,打印机能动了,下一步就是让 XYZ 轴和挤出机按照正确的轨迹运动。这一节里的参数直接决定打印尺寸是否正确、有没有层纹振纹、电机有没有异响。

4.1 打印尺寸与限位开关方向

Configuration.h里有两个关键区域:一个是机器尺寸,一个是限位开关逻辑。

#define X_BED_SIZE 220 #define Y_BED_SIZE 220 #define Z_MAX_POS 250

X_BED_SIZE和Y_BED_SIZE是打印平台的有效尺寸,Z_MAX_POS是 Z 轴最大行程。要是不够长,切片软件里选的模型尺寸即使小于机器标称值,实际打印也可能撞到边框。

限位开关的配置包括:

#define X_MIN_ENDSTOP_INVERTING false #define X_MAX_ENDSTOP_INVERTING false

这个true/false取决于限位开关在触发状态下输出的是高电平还是低电平。机械开关一般是常开,碰触后导通接地,所以触发时是低电平,对应的INVERTING值通常是false。如果刷完固件后发现限位指示灯的状态完全相反,也就是常亮、碰触后熄灭,那就要把对应的INVERTING值反过来。

更值得注意的一点:你的限位开关到底是装在最小端还是最大端。大多数 Cartesian 结构的机器,X 和 Y 限位装在最小端,Z 限位也装在最小端。但有些机型(比如部分 CoreXY)可能 X 限位在最大端。这时候除了要配置对应的X_MAX_ENDSTOP_INVERTING,还要改X_MIN_POS和X_MAX_POS这两个行程边界的含义。很多人忽略这一点,结果点“回原点”的时候,机器往反方向撞。

4.2 加速度与急停速度对打印质量的实际影响

速度参数集中在DEFAULT_MAX_FEEDRATE、DEFAULT_MAX_ACCELERATION、DEFAULT_ACCELERATION这几个宏。

一个常见误区是盲目把速度和加速度往上提,觉得全速跑就是好事。实际上 Marlin 的运动规划是实时计算加减速曲线的,加速度设太高,步进电机会失步,电机“咔咔”响,严重影响打印质量。加速度太低,打印速度又起不来,一个 20 小时的模型变成 30 小时。

我常用的参考值(针对常见 220×220 机型):

  • 打印速度DEFAULT_MAX_FEEDRATE:X/Y 轴 400 到 500,Z 轴 10 到 20,挤出机 80 到 100
  • 打印加速度DEFAULT_MAX_ACCELERATION:X/Y 轴 1000 到 1500,Z 轴 100,挤出机 1000 左右
  • 回程急停DEFAULT_RETRACT_ACCELERATION:1000 到 2000

这些不是固定的,要根据你的机器结构、皮带松紧、电机扭矩来微调。我之前调过一台改装机,同样 1500 的加速度求,打印出来的件表面就是有一圈一圈的纹路,后来把 X 轴加速度降到 800,纹路就消失了。这种问题在切片软件里很难看出来,因为切片设置的加速度如果比固件设的高,固件会按照自己的限制值执行,但如果你打印的模型有大量小半径圆弧,ACC 不够也会造成“挤出停顿感”。

4.3 挤出机每毫米步数计算与回抽配置

挤出机每毫米步数(DEFAULT_AXIS_STEPS_PER_UNIT中的 E 值)是新手最容易算错的地方。这个值的计算公式不复杂:

steps_per_mm = (电机步距角步数 × 驱动细分数) / (挤出机齿轮有效周长)

举个例子。一个 1.8 度的步进电机,360 度除以 1.8 等于 200 步。驱动如果设 16 细分,那 200 × 16 = 3200 步。如果挤出机齿轮的有效周长为 20mm(相当于直径约 6.37mm 的齿轮),那么每毫米的步数就是 3200 ÷ 20 = 160 步/mm。

但很多挤出机的齿轮直径不是那么好量,比如 BMG 双驱动挤出机用的齿轮组有固定速比。BMG 的有效周长大约 50mm 左右,配合 16 细分/200 步电机就是 3200 ÷ 50 = 64,然后因为双驱动有减速比,实际值通常在 400 到 415 步/mm 之间。这个我没法给你一个统一的数字,因为不同挤出机速比不同。最好的办法是先设一个估算值,然后实际挤 100mm 耗材,再测量真实挤出长度,反推步数。

回抽参数也直接影响打印质量。回抽距离太短,拉丝严重;太长,热端堵塞甚至把耗材磨断。不同挤出机回抽距离差异很大,直驱挤出机通常只有 1mm 到 2mm,远程挤出机可能要 5mm 到 8mm。回抽速度一般设在 30mm/s 到 60mm/s 之间。这些在切片软件里设置就够了,固件里的DEFAULT_RETRACT只是提供一个兜底默认值。

5. 编译烧录的完整流程与常见报错

配置改完,接下来就是编译和烧录。这一步会比想象的曲折一些,因为 Marlin 的编译依赖好几层工具链,一个环境变量不对都能卡半天。

5.1 PlatformIO 编译流程与首次依赖下载

如果你用的是 VSCode + PlatformIO,打开 Marlin 源码根目录,PlatformIO 会自动识别platformio.ini文件。先找到自己主板对应的环境。以 SKR Mini E3 V2.0 为例,环境名一般是STM32F103RC_btt。在 PlatformIO 的项目列表里选中这个环境作为默认环境。

然后点击底部的 ✔(Build)按钮开始编译。首次编译会下载 STM32 的框架库,体积比较大。这里我要提醒一下:编译报错不等于你的配置有问题,很多报错其实是环境问题。比如最常见的:

Error: Unknown board 'STM32F103RC_btt'

这个错误通常意味着 PlatformIO 的板卡包没装全,或者platformio.ini里的board参数写错了。先更新 PlatformIO 的核心,再检查platformio.ini里[env:STM32F103RC_btt]下方的board = btt_skr_mini_e3_v2_0是否匹配。实在不行,直接把.pio目录删掉重新编译,强制重新下载。

另一种常见报错是:

error: 'struct ...' has no member named '...'

这类报错大多是配置文件里宏的组合冲突,比如同时启用了两个显示器驱动,或者Configuration_adv.h里的某个高级选项和Configuration.h的基础选项互相打架。这种情况要是不确定是哪一个,可以先从默认配置开始,一项一项勾选,每次编译成功后再加上一个选项。

5.2 不同主板的烧录路径:USB、SD 卡、ISP

编译成功后会生成.bin或者.hex文件。生成的文件在哪取决于主板平台。RAMPS 这类 AVR 主板生成的是.hex,可以通过 Arduino IDE 直接上传,或者用 USBASP 等烧录器。SKR 这类 STM32 主板生成的是.bin文件。

对于 STM32 主板来说,最常见的烧录方式就是 SD 卡烧录。具体操作如下:

  1. 用读卡器把 TF 卡格式化为 FAT32,最好用默认扇区大小。
  2. 把编译好的firmware.bin文件拷到 TF 卡根目录。
  3. 拔掉打印机的 USB 线,断电。
  4. 插上 TF 卡,重新上电。

上电瞬间,主板会进入 Bootloader,自动把 TF 卡里的firmware.bin写进主控芯片 Flash。烧录完成后,部分主板会有指示灯闪烁,然后 TF 卡里的文件会被改名成firmware.cur。如果你重新上电后发现文件没有改名,说明烧录没有发生,先检查文件名是不是firmware.bin。有些主板对文件名大小写敏感,甚至要求文件位于 TF 卡根目录。

还有一种方式是 USB 烧录。部分主板支持在 DFU 模式或者 MSC 模式下通过 USB 直接写入固件。比如 SKR 系列可以用 STM32CubeProgrammer 连接 DFU 接口烧录。这个方法对新手不太友好,建议优先 SD 卡。

另外要提醒:烧录过程中不要断电,不要拔卡。STM32 的 Flash 写入一旦中断,Bootloader 被覆盖,就要用更底层的工具来救了。这不算特别难,但是很折腾。

5.3 一个典型编译报错的完整排查过程

这里分享一个我实际经历过的排查过程,给你一个思路参考。

有一次我把一台 Ender 3 的主板换成 SKR Mini E3 V3.0,然后尝试配置 Marlin 2.1.2。第一次编译过得很顺利,但烧录完成之后发现 LCD 不亮,而且机器一上电,热床风扇就全速转。我没有急着改代码,而是先看配置,发现一件事:我在Configuration.h里启用了SPEAKER的蜂鸣器配置,但Configuration_adv.h里某个测试选项导致引脚冲突。这种风扇不受控的现象,通常是 PWM 引脚被复用造成的。

我走了一遍排查流程:

  1. 先把Configuration_adv.h里所有和硬件外设相关的选项审视一遍,看有没有刚开启的。
  2. 确认MOTHERBOARD是不是 V3.0 的专用板号,而不是 V2.0。
  3. 最后发现问题出在#define FAN_SOFT_PWM和风扇硬件的组合上。

这个问题的根源在于,SKR Mini E3 V3.0 的板载风扇接口和某些 PWM 引脚是复用关系。Marlin 的默认配置已经把常见的复用关系处理好了,但如果你在Configuration_adv.h里又额外改了端口映射,就会出现这种“啥都编译通过,但硬件行为诡异”的情况。

正确的处理方式是:尽量不改pins文件里的内容。如果确实要改引脚映射,也要先查主板原理图,确认你改的那个引脚不是和别的重要功能冲突。很多人一遇到风扇问题就去改fan.h的引脚宏,改来改去最后发现是 LCD 占用了 PWM 引脚,白白浪费一下午。

6. 配置完成后的校准顺序与实测验证

固件刷进去了,机器也能动了,不代表万事大吉。直接开始打印大概率会翻车,因为固件里的参数只是“你配置的世界观”,真实物理机器还是有误差。上电后的校准顺序,我建议按照从安全到复杂、从单轴到整体的顺序来做。

6.1 上电后第一件事:温度读数与屏幕验证

先别急着回原点。上电后第一步是用手摸一下喷嘴,同时观察 LCD 屏幕上的温度读数。如果室温下屏幕上显示 -14 度,说明热敏电阻没接好或者类型配错了;如果显示 300 多度,那可能是短路,也可能是温度表类型不对。

确认读数正常后,再用M303命令做一次 PID 自整定。这一步我放在最前面,因为后续所有的打印测试都依赖温度稳定。温度没稳之前,后面调得再好也没用。

这一步我建议连上电脑用串口终端操作。输入M105可以查看当前温度,输入M303 E0 S200 C8开始整定。整定结束之后用M301把参数写入 EEPROM。Marlin 默认开启了EEPROM_SETTINGS,这个命令对调试非常有用。

6.2 轴运动方向与限位开关逻辑的手动验证

温度确认没问题之后,才开始动轴。先用不支持热床加热的方式,手动把喷嘴抬高一点,然后用控制台逐个测试 X、Y、Z 轴的运动方向。我常用的命令是G91(相对运动模式)加G1 X20 F3000,意思是 X 轴正方向移动 20mm,速度为 3000mm/min。

如果发现方向反了,就直接改INVERT_X_DIR、INVERT_Y_DIR、INVERT_Z_DIR这几个宏。注意,这里的反了不是“坐标反了”,而是“电机转动的方向反了”。我当时第一次用 Ender 3 改装机时,Z 轴就是朝下的,一按上升,竟然往下顶热床,幸好反应快及时断电。

方向确认后,做一次“回原点”测试。在回程过程中观察限位开关指示灯的变化。如果机器没有停下,反而一直往限位方向顶,马上断电,然后去改ENDSTOP_INVERTING或者检查限位开关接线。这种情况比较简单,但有人没有做这个测试就直接开始打印,结果回原点时把热床皮带轮顶坏了。

6.3 挤出机校准和首层打印验证

轴都正常了,接下来校准挤出机的每毫米步数。操作方法:

  1. 用M83切换到挤出机相对模式。
  2. 在喷嘴不接触热床、温度合适的情况下,用G1 E100 F60挤出 100mm 耗材。
  3. 实际测量挤出的耗材长度。如果实际是 80mm,那当前步数需要乘以 100/80 = 1.25。

比如当前 E 轴步数是 93,实际挤出 80mm,那新的 E 值就是 93 × 1.25 = 116.25。更新到配置里,或者用M92 E116.25临时测试,确认没问题再写进固件。

完成这些之后,最后打印一个小的校准方块,边长 20mm 的空心立方体。量一下实际尺寸,如果 x 轴方向是 19.6mm,但 y 轴方向是 20.1mm,那么说明 XY 方向步数还是有偏差,回头重新算。

一个容易被忽略的问题是 Z 轴补偿。如果你用了 BLTouch 之类的自动调平传感器,却忘了配置Z_PROBE_OFFSET_FROM_EXTRUDER,那么自动调平测量出来的“0”并不是喷嘴刚好接触热床的那个平面,而是探针触发时的高度差。这个值会导致喷嘴离床要么太远、要么太近。用户可以通过打印单层方块反复调,也可以在终端里用M851 Z-1.2这样的命令微调,调好之后M500存进 EEPROM。

最后我想说一个习惯问题。我现在每次改完Configuration.h或者Configuration_adv.h,都会把原始文件备份一份,并且用版本管理工具记录改动。刷机翻车或者改了一堆不知道哪步改坏了的时候,直接对比很清晰地知道是什么在变动。固件配置这东西,最怕的就是“改了哪儿都记不清、坏了就重来”。如果你已经在这个坑边徘徊了好几天,不妨从今天起给每次修改留一份记录,后面你会感谢这个习惯的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询