3D打印 Marlin 固件配置全解:开机画面/电机/传感器详细教程
之前介绍了《ESP32 故障排除实用指南》,但其实Marlin的配置众多,对于初学者来说总是不知道从哪里配置。本文介绍常用的marlin配置,包括开开机画面,传感器脱落保护,电机配置等等。
本文中的配置都是位于Marlin目录下的Configuration.h,至于Configuration_adv.h中的配置将来再逐步解释。
显示自定义启动画面

-
使用在线工具 Marlin Custom Bootscreen 将自定义图片转换为 Marlin 格式
-
在 Marlin 固件源码的
Configuration.h中找到CUSTOM_BOOTSCREEN_BMP相关宏定义,启用自定义启动画面功能 -
将转换好的 BMP 数据复制到
Configuration_adv.h中对应的数组定义里,然后重新编译并烧录固件
热传感器脱落保护(最重要的配置!!!)

#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber
喷头数目
#define EXTRUDERS 0
耗材直径传感器
如果有耗材直径,可以通过根据直径控制流量

#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
MK2混色器
可以用一个电机驱动器同时驱动2-8个步进电机,没有Prusa MK2混色器就不用启动了。
#define MK2_MULTIPLEXER
切换挤出头
这是用于Prusa Multi-Material Unit v2的功能,需要喷头数量达到5和NOZZLE_PARK_FEATURE
#define SWITCHING_EXTRUDER
切换喷嘴
双挤出头可以用一个舵机提高其中一个或两个喷嘴。
#define SWITCHING_NOZZLE
挤出头停靠
通过一个电磁铁来带动另一个打印头进行打印
//#define PARKING_EXTRUDER
通过一个磁铁来带动另一个打印头进行打印
项目链接:https://www.thingiverse.com/thing:3080893
视频1:https://youtu.be/0xCEiG9VS3k
视频2:https://youtu.be/Bqbcs0CU2FE
#define PARKING_EXTRUDER
切换工具头
通过一个舵机锁定工具头
define SWITCHING_TOOLHEAD
通过一个磁铁锁定工具头
#define MAGNETIC_SWITCHING_TOOLHEAD
通过一个电磁铁锁定工具头,视频:https://youtu.be/JolbsAKTKf4
#define ELECTROMAGNETIC_SWITCHING_TOOLHEAD
混合挤出头
#define MIXING_EXTRUDER
喷头位移
通过固件来切换喷头,设置喷头位移
#define HOTEND_OFFSET_X { 0.0, 20.00 } // (mm) relative X-offset for each nozzle
#define HOTEND_OFFSET_Y { 0.0, 5.00 } // (mm) relative Y-offset for each nozzle
#define HOTEND_OFFSET_Z { 0.0, 0.00 } // (mm) relative Z-offset for each nozzle
电源供应
#define PSU_CONTROL
#define PSU_NAME "Power Supply"
PID热床控制
#define PIDTEMPBED
限位开关设置
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG
限位开关反转
#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.
电机配置
默认使用A4988,如果不是A4988才需要改变
//#define X_DRIVER_TYPE A4988
//#define Y_DRIVER_TYPE A4988
//#define Z_DRIVER_TYPE A4988
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
//#define Z4_DRIVER_TYPE A4988
//#define E0_DRIVER_TYPE A4988
//#define E1_DRIVER_TYPE A4988
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988
//#define E5_DRIVER_TYPE A4988
//#define E6_DRIVER_TYPE A4988
//#define E7_DRIVER_TYPE A4988
限位开关终端
任何限位开关触发中断打印,开启后会占有较多CPU
#define ENDSTOP_INTERRUPTS_FEATURE
步进电机方向配置
电机方向反转
如果安装后发现某个轴方向反了,不需要重新接线,只需在固件中修改:
// 反转电机方向(取消注释对应轴)
//#define INVERT_X_DIR
//#define INVERT_Y_DIR
//#define INVERT_Z_DIR
//#define INVERT_E0_DIR
归零方向设置
控制打印机归零时各轴的运动方向:
// 归零方向:-1 表示最小端,1 表示最大端
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
步进电机细分数
步进电机驱动器通常支持不同的微步设置,常用的是16细分:
// 默认steps/mm计算:电机步数(200) × 细分数(16) / 同步轮周长
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 93 }
// X Y Z E0
计算方法:
- XY轴:200 × 16 / (20齿 × 2mm齿距) = 80 steps/mm
- Z轴:200 × 16 / (2mm导程丝杆) = 1600 steps/mm(T8丝杆400)
- E0轴:200 × 16 / (齿轮比 × 齿轮周长),需实测校准
温度传感器详细配置
常见热敏电阻类型
Marlin支持多种热敏电阻,通过 TEMP_SENSOR 宏定义选择:
// 挤出头热敏传感器类型
#define TEMP_SENSOR_0 1 // 100K NTC热敏(最常见)
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_BED 1 // 热床热敏
// 常用类型对照表:
// 0: 未使用
// 1: 100K NTC(EPCOS 100K,推荐)
// 5: 100K NTC(ATC Semitec 104GT-2)
// 11: 100K NTC( honors 传感器)
// 13: 100K Hisens 3950 1%
// 60: 100K Maker's Tool Works Kapton
// 1000: 自定义热敏(需要在 thermistor_1000.h 中定义)
热敏脱落保护(关键安全配置)
这是最重要的安全配置,可以防止热敏脱落导致的加热失控:
#define THERMAL_PROTECTION_HOTENDS // 启用挤出头热保护
#define THERMAL_PROTECTION_BED // 启用热床热保护
#define THERMAL_PROTECTION_CHAMBER // 启用加热室热保护
// 保护参数
#define THERMAL_PROTECTION_PERIOD 40 // 检测周期(秒)
#define THERMAL_PROTECTION_HYSTERESIS 4 // 允许的温度偏差(°C)
// 安全策略说明:
// 如果在 PERIOD 秒内温度变化小于 HYSTERESIS 度,
// Marlin 会认为热敏脱落或加热棒故障,自动停止加热并报错
工作原理:
- 加热时监控温度变化速率
- 如果温度长时间不变化,说明热敏可能脱落
- 自动触发MINTEMP/MAXTEMP错误并停止打印
温度PID调参
PID控制是Marlin温度控制的核心,良好的PID参数能让温度更稳定:
// 挤出头PID参数
#define DEFAULT_Kp 22.2
#define DEFAULT_Ki 1.08
#define DEFAULT_Kd 114.0
// 热床PID参数
#define DEFAULT_bedKp 10.00
#define DEFAULT_bedKi 0.023
#define DEFAULT_bedKd 305.4
自动PID调参方法:
在打印机LCD菜单或通过串口发送G-code:
; 挤出头PID自动调参(目标温度200°C)
M303 E0 S200 C8
; 热床PID自动调参(目标温度60°C)
M303 E-1 S60 C8
; 打印结果后将Kp, Ki, Kd值填入Configuration.h
; 或保存到EEPROM:
M500
限位开关配置
限位开关类型
Marlin支持两种限位开关:
// 选择限位开关类型
#define ENDSTOPPULLUPS // 启用内部上拉电阻(推荐)
// 或单独配置
#define ENDSTOPPULLUP_XMAX
#define ENDSTOPPULLUP_YMAX
#define ENDSTOPPULLUP_ZMAX
//#define ENDSTOPPULLUP_XMIN
//#define ENDSTOPPULLUP_YMIN
//#define ENDSTOPPULLUP_ZMIN
// 限位开关逻辑电平
// true = 常开(NO),触发时为高电平
// false = 常闭(NC),触发时为低电平
#define X_MIN_ENDSTOP_INVERTING false
#define Y_MIN_ENDSTOP_INVERTING false
#define Z_MIN_ENDSTOP_INVERTING false
无限位开关的归零(手动归零)
如果你的打印机没有安装限位开关,可以启用手动归零功能:
// 手动归零配置
#define Z_MIN_PROBE_ENDSTOP // 使用探针作为Z轴限位
// 或使用传感器归零
#define SENSORLESS_HOMING // 无传感器归零(需要TMC驱动器)
软件限位
防止轴移动超出物理范围:
#define MIN_SOFTWARE_ENDSTOPS // 启用最小软件限位
#define MAX_SOFTWARE_ENDSTOPS // 启用最大软件限位
// 各轴行程范围(单位:mm)
#define X_BED_SIZE 200
#define Y_BED_SIZE 200
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS 200
#define Y_MAX_POS 200
#define Z_MAX_POS 200
自动调平配置
探针类型选择
Marlin支持多种自动调平方案:
// BLTouch(最常用)
#define BLTOUCH
#define BLTOUCH_SET_5V_MODE // 5V供电模式
#define BLTOUCH_FORCE_MODE_SET // 强制设置模式
// 感应式探针
#define FIX_MOUNTED_PROBE
// 手动探针(使用喷嘴)
#define PROBE_MANUALLY
// 机械式探针
#define MECHANICAL_PROBE
调平网格设置
// 自动调平网格
#define GRID_MAX_POINTS_X 5 // X方向网格点数量
#define GRID_MAX_POINTS_Y 5 // Y方向网格点数量
// 调平区域边界(相对于喷嘴位置)
#define PROBE_OFFSET { -44, -6, -1.23 } // X, Y, Z偏移量
调平G-code
; 执行自动调平
G28 ; 归零
G29 ; 开始自动调平
; 手动调平(逐点)
G29 P1 ; 开始手动调平
G29 P2 ; 下一个点
G29 S0 ; 保存调平数据
; 查看当前调平网格
M420 S1 ; 查看调平网格状态
常见问题排查
电机反转或方向错误
排查步骤:
- 检查
INVERT_X_DIR等配置 - 确认步进电机接线顺序(A+, A-, B+, B-)
- 调整驱动器上的微步拨码开关
- 检查
DEFAULT_AXIS_STEPS_PER_UNIT是否正确
温度异常
常见原因:
- 热敏脱落或损坏:检查
THERMAL_PROTECTION配置 - 加热棒故障:使用万用表测量电阻(应为几欧姆)
- 接线松动:检查端子是否牢固
- PID参数不当:运行
M303自动调参
打印质量问题
常见问题与解决:
- 层间粘合不良:提高打印温度,降低层高
- 翘边:启用热床,使用胶棒或胶带增加附着力
- 拉丝严重:启用回抽,增加回抽距离和速度
- 尺寸不准:校准
steps/mm,检查皮带张紧
调试命令汇总
; 查看当前位置
M114
; 查看固件版本
M115
; 查看温度
M105
; 查看EEPROM设置
M503
; 保存当前设置到EEPROM
M500
; 恢复出厂设置
M502
; 报告调试信息
M111 S32 ; 最详细模式
编译与烧录指南
使用PlatformIO编译
- 安装VSCode和PlatformIO插件
- 打开Marlin固件源码文件夹
- 修改
platformio.ini中的环境配置:
default_envs = mega2560 ; 或 stm32f103rc, esp32 等
- 点击”Build”编译
- 连接打印机USB,点击”Upload”烧录
使用Arduino IDE编译
- 安装Arduino IDE 1.8.x或更高版本
- 安装相关开发板包(如RAMPS用Mega 2560)
- 打开
Marlin.inl - 选择正确的开发板和端口
- 点击”上传”
常见编译错误
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
#error "UNKNOWN FIRMWARE" | Configuration.h配置有误 | 检查错误位置附近的配置 |
THERMAL PROTECTION | 未配置热保护 | 启用 THERMAL_PROTECTION_HOTENDS |
EEPROM not enabled | EEPROM未启用 | 定义 EEPROM_SETTINGS |
总结
Marlin固件的配置虽然繁多,但只要掌握核心配置,就能快速完成设置:
必配置项:
- 主板类型 (
MOTHERBOARD) - 热敏传感器 (
TEMP_SENSOR) - 热保护 (
THERMAL_PROTECTION) - 电机方向和步进值 (
INVERT_*_DIR,DEFAULT_AXIS_STEPS_PER_UNIT) - 行程范围 (
X_MAX_POS等)
推荐配置项:
- PID调参(提高温度稳定性)
- 自动调平(提高打印质量)
- EEPROM支持(在线修改参数)
安全提醒:
- 务必启用热敏脱落保护
- 首次通电时保持警惕,随时准备断电
- 使用优质电源,避免过载
- 打印时保持通风,注意防火
掌握了这些配置,你就能让3D打印机发挥最佳性能。祝打印愉快!
相关资源: