4、主板型号选择与板级配置:常见主板的板级文件选择与引脚定义检查
好,咱们接着聊。上一章我们把固件源码和环境搭好了,但别急着编译。你手里那块板子,Marlin 认不认识它?这就是本章要解决的核心问题。
说白了,Marlin 是一个通用的固件,它得靠一套“板级配置文件”才知道你用的是哪块板子、哪个引脚接了电机、哪个引脚接了热床。选错了文件,轻则编译报错,重则烧进去板子不干活,甚至冒烟。我见过不止一个新手,拿着 SKR Mini E3 选了 Mega2560 的配置,结果一通折腾,最后发现是板子选错了。
4.1 板级文件在哪?怎么选?
Marlin 的板级配置文件都放在 Marlin/src/pins/ 目录下。你打开看看,里面按厂商分了很多子目录:arduino/、lpc1768/、stm32f1/、stm32g0/ 等等。每个子目录里,一个 .h 文件就对应一块主板。
我个人习惯,拿到一块新板子,第一件事就是去这个目录里翻一翻,看看有没有对应的文件。如果没有,那就要考虑自己移植了——不过那是高阶话题,咱们先不展开。
4.2 三款常见主板的配置选择
咱们挑三款最有代表性的板子来讲。你只要搞懂了这三块,其他的基本触类旁通。
4.2.1 Mega2560 + RAMPS 1.4
这是最经典的组合,也是很多人的入门板。Mega2560 负责运算,RAMPS 1.4 是它的扩展板,负责把引脚引出来接步进驱动、热床、风扇这些。
板级文件选择:
- 在
Marlin/src/pins/arduino/目录下,找到pins_RAMPS.h。 - 在
Platformio.ini或Configuration.h中,设置#define MOTHERBOARD BOARD_RAMPS_14_EFB(或其他变体,如_EF_、_EFF,取决于你的挤出机数量)。
关键点:RAMPS 的变体很多。EFB 代表一个挤出机、一个风扇、一个热床。如果你的配置不同,一定要选对后缀。我曾经帮一个朋友排查问题,他选了 EFB 但实际接了双挤出机,结果第二个挤出机死活不转。
引脚定义检查:
打开 pins_RAMPS.h,你会看到类似这样的定义:
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define X_MIN_PIN 3
#define X_MAX_PIN 2
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
// ... 以此类推
这些数字对应的是 Mega2560 的 I/O 引脚编号。你拿着万用表,对着 RAMPS 板的原理图,一个一个量,就能确认这些定义对不对。嗯,这里要注意,有些山寨 RAMPS 板会偷工减料,引脚映射可能不一样。
4.2.2 SKR Mini E3 V2.0 / V3.0
这块板子现在很流行,因为它集成了 TMC2209 静音驱动,而且体积小,直接插在 Ender 3 这类机器上就能用。
板级文件选择:
- 在
Marlin/src/pins/stm32f1/目录下,找到pins_BTT_SKR_MINI_E3_V2_0.h或pins_BTT_SKR_MINI_E3_V3_0.h。 - 在
Configuration.h中设置#define MOTHERBOARD BOARD_BTT_SKR_MINI_E3_V2_0。
小提示:V2.0 和 V3.0 的引脚定义不完全兼容。如果你买的是 V3.0 的板子,千万别选 V2.0 的配置。我见过有人混用,结果风扇控制引脚不对,散热风扇一直全速转,吵得要命。
引脚定义检查:
SKR Mini E3 的引脚定义文件里,除了基本的步进引脚,还有很多关于 TMC 驱动的配置:
#define X_CS_PIN PC4
#define Y_CS_PIN PC5
#define Z_CS_PIN PC6
#define E0_CS_PIN PC7
#define X_STALL_PIN PC2
// ...
这里要注意的是 CS_PIN(片选引脚)。如果这个定义错了,TMC 驱动就没法通过 SPI 通信,静音、堵转检测这些功能全废了。你想想看,花了钱买静音驱动,结果因为一个引脚没配好,电机嗡嗡响,多冤。
4.2.3 Manta M8P
Manta M8P 是最近比较火的高性能板子,用 STM32G0 系列芯片,主频高,内存大,还能接 CB1 或 Pi 4B 做上位机。
板级文件选择:
- 在
Marlin/src/pins/stm32g0/目录下,找到pins_BTT_MANTA_M8P.h。 - 设置
#define MOTHERBOARD BOARD_BTT_MANTA_M8P。
警告:Manta M8P 有两种版本:一种带 CB1,一种不带。板级文件虽然一样,但如果你用了 CB1,需要在 Configuration.h 中额外启用 #define SERIAL_PORT 2 之类的配置,否则上位机通信会失败。我刚开始用的时候就被这个坑过,折腾了两天才发现是串口没配对。
引脚定义检查:
Manta M8P 的引脚定义比较复杂,因为它有很多扩展接口。你打开文件会看到:
#define X_STEP_PIN PC13
#define X_DIR_PIN PC14
#define X_ENABLE_PIN PC15
#define X_DIAG_PIN PB5
// 风扇引脚
#define FAN0_PIN PA8
#define FAN1_PIN PA9
// ...
这里我建议你重点检查 DIAG_PIN(堵转检测引脚)和风扇引脚。因为 Manta M8P 的引脚复用比较多,一个不留神就容易跟其他功能冲突。
4.3 引脚定义检查的通用方法
不管你用哪块板子,检查引脚定义都可以按这个流程来:
- 找原理图:去厂商的 GitHub 或官网下载原理图 PDF。
- 对照引脚编号:把原理图上的 MCU 引脚编号(比如 PA0、PB1)跟板级文件里的定义一一对应。
- 检查特殊功能引脚:比如 SPI、I2C、ADC、PWM 这些,一定要确认硬件上有没有上拉电阻、有没有复用冲突。
- 验证驱动模式:对于 TMC 驱动,确认
CS_PIN、DIAG_PIN、STALL_PIN是否跟原理图一致。
我的经验:很多所谓“编译通过但板子不工作”的问题,80% 都是引脚定义跟实际硬件对不上。别偷懒,花 10 分钟对着原理图过一遍,能省下后面几小时的排错时间。
4.4 一个常见的坑:引脚编号混淆
最后说一个我经常遇到的坑。有些板子用的是 Arduino 的引脚编号(比如 D54、D55),有些用的是 STM32 的 GPIO 编号(比如 PC13、PA0)。你在板级文件里看到的是哪种?
举个例子,Mega2560 的板级文件里写的是 #define X_STEP_PIN 54,这个 54 是 Arduino 的编号。但如果你在 SKR Mini E3 的文件里看到 #define X_STEP_PIN PC13,这个 PC13 是 STM32 的 GPIO 编号。千万别搞混了。
怎么区分?很简单:如果数字大于 100,那多半是 Arduino 编号;如果是字母+数字的组合,那就是 GPIO 编号。嗯,这个判断方法虽然不严谨,但应付 90% 的情况够了。
好了,板级文件的选择和引脚检查就讲到这里。你只要把这三块板子的配置逻辑搞明白,以后遇到其他板子,思路是一样的。记住:选对文件、查对引脚,你的固件烧录之路就成功了一半。