Marlin 固件配置全解:开机画面/电机/传感器详细教程

Marlin 固件配置全解:开机画面/电机/传感器详细教程

之前介绍了《ESP32 故障排除实用指南》,但其实Marlin的配置众多,对于初学者来说总是不知道从哪里配置。本文介绍常用的marlin配置,包括开开机画面,传感器脱落保护,电机配置等等。

本文中的配置都是位于Marlin目录下的Configuration.h,至于Configuration_adv.h中的配置将来再逐步解释。

显示自定义启动画面

  1. 使用在线工具 Marlin Custom Bootscreen 将自定义图片转换为 Marlin 格式

  2. 在 Marlin 固件源码的 Configuration.h 中找到 CUSTOM_BOOTSCREEN_BMP 相关宏定义,启用自定义启动画面功能

  3. 将转换好的 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 会认为热敏脱落或加热棒故障,自动停止加热并报错

工作原理

  1. 加热时监控温度变化速率
  2. 如果温度长时间不变化,说明热敏可能脱落
  3. 自动触发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      ; 查看调平网格状态

常见问题排查

电机反转或方向错误

排查步骤

  1. 检查 INVERT_X_DIR 等配置
  2. 确认步进电机接线顺序(A+, A-, B+, B-)
  3. 调整驱动器上的微步拨码开关
  4. 检查 DEFAULT_AXIS_STEPS_PER_UNIT 是否正确

温度异常

常见原因

  • 热敏脱落或损坏:检查 THERMAL_PROTECTION 配置
  • 加热棒故障:使用万用表测量电阻(应为几欧姆)
  • 接线松动:检查端子是否牢固
  • PID参数不当:运行 M303 自动调参

打印质量问题

常见问题与解决

  • 层间粘合不良:提高打印温度,降低层高
  • 翘边:启用热床,使用胶棒或胶带增加附着力
  • 拉丝严重:启用回抽,增加回抽距离和速度
  • 尺寸不准:校准 steps/mm,检查皮带张紧

调试命令汇总

; 查看当前位置
M114

; 查看固件版本
M115

; 查看温度
M105

; 查看EEPROM设置
M503

; 保存当前设置到EEPROM
M500

; 恢复出厂设置
M502

; 报告调试信息
M111 S32    ; 最详细模式

编译与烧录指南

使用PlatformIO编译

  1. 安装VSCode和PlatformIO插件
  2. 打开Marlin固件源码文件夹
  3. 修改 platformio.ini 中的环境配置:
default_envs = mega2560    ; 或 stm32f103rc, esp32 等
  1. 点击”Build”编译
  2. 连接打印机USB,点击”Upload”烧录

使用Arduino IDE编译

  1. 安装Arduino IDE 1.8.x或更高版本
  2. 安装相关开发板包(如RAMPS用Mega 2560)
  3. 打开 Marlin.inl
  4. 选择正确的开发板和端口
  5. 点击”上传”

常见编译错误

错误信息原因解决方案
#error "UNKNOWN FIRMWARE"Configuration.h配置有误检查错误位置附近的配置
THERMAL PROTECTION未配置热保护启用 THERMAL_PROTECTION_HOTENDS
EEPROM not enabledEEPROM未启用定义 EEPROM_SETTINGS

总结

Marlin固件的配置虽然繁多,但只要掌握核心配置,就能快速完成设置:

必配置项

  1. 主板类型 (MOTHERBOARD)
  2. 热敏传感器 (TEMP_SENSOR)
  3. 热保护 (THERMAL_PROTECTION)
  4. 电机方向和步进值 (INVERT_*_DIR, DEFAULT_AXIS_STEPS_PER_UNIT)
  5. 行程范围 (X_MAX_POS 等)

推荐配置项

  • PID调参(提高温度稳定性)
  • 自动调平(提高打印质量)
  • EEPROM支持(在线修改参数)

安全提醒

  • 务必启用热敏脱落保护
  • 首次通电时保持警惕,随时准备断电
  • 使用优质电源,避免过载
  • 打印时保持通风,注意防火

掌握了这些配置,你就能让3D打印机发挥最佳性能。祝打印愉快!


相关资源: