2. Marlin固件配置:在Configuration.h中正确配置限位开关引脚、逻辑电平与归位方向
好,咱们接着聊。上一章我们把限位开关的硬件接好了,但固件不认识它,等于白搭。这一章,我就带你手把手把 Configuration.h 里的几个关键参数敲对。
说实话,我见过太多人硬件焊得漂漂亮亮,结果固件里一个宏定义写反了,机器直接往工作台上撞。嗯,咱们今天就把这个坑填平。
2.1 引脚定义:告诉主板“开关接在哪”
打开 Configuration.h,你首先得找到限位开关的引脚定义。说白了,就是告诉固件:你那个微动开关,插在主板的哪个针脚上。
常见的定义长这样:
#define X_MIN_PIN 3
#define X_MAX_PIN 2
#define Y_MIN_PIN 5
#define Y_MAX_PIN 4
#define Z_MIN_PIN 7
#define Z_MAX_PIN 6
这里有个小细节——引脚编号。Marlin 用的是 Arduino 的引脚编号,不是主板上的物理针脚号。比如 RAMPS 1.4 上,X_MIN 实际插在物理针脚 D3 上,那这里就写 3。
我的习惯:拿到一块新主板,我第一件事就是翻原理图,把每个限位开关对应的 Arduino 引脚号抄下来。别偷懒,这一步省了,后面排查能让你怀疑人生。
2.2 逻辑电平:开关按下时,是高还是低?
这个参数,我愿称之为“翻车重灾区”。
限位开关有两种接法:
- 常开(NO):没按下时断开,按下时导通。通常配 上拉电阻,所以常态是高电平,触发时变低电平。
- 常闭(NC):没按下时导通,按下时断开。通常配 下拉电阻,常态是低电平,触发时变高电平。
在 Marlin 里,用 X_MIN_ENDSTOP_INVERTING 来控制逻辑:
#define X_MIN_ENDSTOP_INVERTING false // 触发时为低电平
// 或者
#define X_MIN_ENDSTOP_INVERTING true // 触发时为高电平
我曾经踩过的坑:有一次客户说他的 Z 轴归位后一直往上跑,我远程看了半天,最后发现他把
Z_MIN_ENDSTOP_INVERTING 设反了。开关按下时固件以为没触发,电机就一直转。你想想看,这要是没装限位保护,直接撞顶。
怎么确认?很简单。接好线后,用手按住开关,用万用表量一下信号脚对地的电压。按下时是 0V 就设 false,是 5V 就设 true。
2.3 归位方向:往哪走才算“回家”?
归位方向决定了机器启动时,电机往哪个方向找限位开关。这个参数在 Configuration.h 里用 HOMING_DIRECTION 控制:
#define X_HOME_DIR -1 // X 轴往负方向归位(通常向左)
#define Y_HOME_DIR -1 // Y 轴往负方向归位(通常向前)
#define Z_HOME_DIR -1 // Z 轴往负方向归位(通常向下)
数值 -1 表示往负方向走,1 表示往正方向走。具体怎么选?看你的机器结构:
| 机器类型 | X 归位方向 | Y 归位方向 | Z 归位方向 |
|---|---|---|---|
| Prusa i3(常见) | -1(左) | -1(前) | -1(下) |
| CoreXY | -1(左) | -1(前) | -1(下) |
| Ultimaker 风格 | 1(右) | 1(后) | -1(下) |
核心逻辑:归位方向必须和你的限位开关安装位置一致。开关装在左边,就往左归位;装在右边,就往右归位。别搞反了,否则机器会一直往反方向跑,直到撞墙。
2.4 知识体系:一张图看懂配置逻辑
下面这张 SVG 图,我把整个配置流程串起来了。你照着这个顺序检查,基本不会漏。
2.5 实战检查清单
配置完别急着编译上传。先按这个清单过一遍:
- 引脚号:对照原理图,确认每个限位开关的 Arduino 引脚号。
- 逻辑电平:用手按住开关,用万用表测信号脚电压,确认触发时的电平。
- 归位方向:手动推动滑台,看它往哪个方向能碰到开关,然后设对应的
HOMING_DIRECTION。 - 编译测试:上传固件后,打开串口监视器,手动触发开关,看 Marlin 是否打印
TRIGGERED状态。
一个小技巧:我习惯在
Configuration_adv.h 里把 ENDSTOP_INTERRUPTS_FEATURE 打开。这样限位触发时能立即响应,不会因为主循环卡顿而错过信号。尤其适合高速打印场景。
嗯,到这步,你的限位开关在固件层面就算配置好了。下一章咱们聊聊怎么用串口命令和 LED 指示灯来验证配置是否正确——说白了,就是让机器自己告诉你“我准备好了”。