4、主板与驱动配置:MOTHERBOARD宏、串口与USB配置、步进电机驱动(TMC2209/5160等)配置
好,我们进入第四章。这一章很关键,它决定了你的固件能不能跟硬件「对上话」。说白了,就是告诉 Marlin:你用的到底是哪块板子?用哪个串口跟电脑通信?步进电机又是怎么驱动的?
我刚开始接触 Marlin 时,最头疼的就是这步。板子选错了,编译直接报错;驱动配置错了,电机要么不动,要么鬼叫。嗯,咱们一步步来。
4.1 MOTHERBOARD 宏:告诉固件你是谁
这是整个配置的起点。Marlin 支持几百种主板,全靠一个宏来区分:MOTHERBOARD。
打开 Configuration.h,找到这行:
#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_RAMPS_14_EFB
#endif
你需要把它改成你实际用的板子。比如我用的是 MKS Gen L V2.0,那就改成:
#define MOTHERBOARD BOARD_MKS_GEN_L_V2
所有支持的板子定义在 boards.h 里。我建议你直接去那里搜,别自己猜名字。我曾经因为拼写错误,浪费了半小时排查编译错误。
4.1.1 常见主板宏对照表
| 主板型号 | 宏定义 | 备注 |
|---|---|---|
| RAMPS 1.4 | BOARD_RAMPS_14_EFB | 经典入门板,EFB 表示挤出机、风扇、床 |
| MKS Gen L V2.0 | BOARD_MKS_GEN_L_V2 | 国产性价比之王,我第一台机器就用它 |
| SKR Mini E3 V2.0 | BOARD_BTT_SKR_MINI_E3_V2_0 | 集成 TMC2209,非常流行 |
| SKR 1.4 Turbo | BOARD_BTT_SKR_V1_4_TURBO | 支持 5 个驱动,适合多轴 |
| Duet 2 WiFi | BOARD_DUET_2_WIFI | 32 位板,配置方式略有不同 |
4.2 串口与 USB 配置:让电脑认识打印机
选对主板后,接下来要搞定通信。Marlin 通过串口与上位机(比如 Cura、Pronterface)通信。现在大部分主板都通过 USB 转串口芯片连接电脑。
你需要关注两个地方:
4.2.1 串口波特率
在 Configuration.h 里:
#define BAUDRATE 250000
我个人习惯用 250000。115200 太慢,尤其是传输大文件时。500000 虽然快,但有些 USB 转串口芯片不稳定。250000 是个甜点值。
4.2.2 串口序号
对于多串口的主板(比如 SKR 系列),你需要指定 Marlin 用哪个串口:
#define SERIAL_PORT 0
#define SERIAL_PORT_2 -1
大部分情况下,SERIAL_PORT 0 对应 USB 口。如果你用的是带有原生 USB 的 32 位板(比如 STM32),可能还需要配置:
#define SERIAL_USB
嗯,这里要注意:有些板子(比如 Duet)用的是原生 USB,不需要串口芯片。这时候 SERIAL_PORT 的用法会不同。我建议你查一下板子的原理图,确认 USB 是接在哪个 USART 上。
4.3 步进电机驱动配置:TMC2209 / 5160 等
这是本章的重头戏。步进电机驱动直接决定了打印机的噪音、速度和精度。现在主流的驱动是 Trinamic 的 TMC 系列,比如 TMC2209、TMC5160、TMC2226 等。
Marlin 通过 #define 宏来启用和配置这些驱动。我们以最常用的 TMC2209 为例。
4.3.1 启用 TMC 驱动
首先,取消注释这行:
#define HAS_TMC_UART
然后,在 Configuration_adv.h 里,找到驱动配置区域:
#define X_DRIVER_TYPE TMC2209
#define Y_DRIVER_TYPE TMC2209
#define Z_DRIVER_TYPE TMC2209
#define E0_DRIVER_TYPE TMC2209
如果你用的是 TMC5160,就改成:
#define X_DRIVER_TYPE TMC5160
4.3.2 UART 模式 vs 独立模式
TMC2209 支持两种模式:
- 独立模式(Standalone): 靠电位器调电流,不能通过固件读取状态。简单,但功能受限。
- UART 模式: 通过一根线跟主板通信,可以动态调电流、读取温度、检测失步。我强烈推荐用这个。
启用 UART 模式后,你需要配置对应的引脚:
#define X_SERIAL_TX_PIN PC4
#define X_SERIAL_RX_PIN PC4 // 注意:TMC2209 是单线 UART,TX 和 RX 接同一引脚
我曾经犯过一个低级错误:把 TX 和 RX 接到了不同引脚,结果驱动死活不响应。后来查手册才发现,TMC2209 的 UART 是半双工的,收发共用一根线。
4.3.3 电流与微步设置
这是最容易出问题的地方。电流设小了,电机没力;设大了,驱动过热。
#define X_CURRENT 800 // 单位 mA,峰值电流
#define X_MICROSTEPS 16 // 微步数,16 是主流
对于 TMC2209,我建议:
- X/Y 轴:600-800mA
- Z 轴:800-1000mA(因为要克服重力)
- 挤出机:800-1000mA
如果你用的是 TMC5160,电流可以设得更高,因为它散热更好。但要注意,5160 的峰值电流可以达到 3A,别把电机烧了。
4.3.4 高级功能:StealthChop 与 SpreadCycle
TMC 驱动有两个工作模式:
- StealthChop(静音模式): 低速时几乎无声,但扭矩小。
- SpreadCycle(高性能模式): 噪音大,但扭矩大,适合高速。
Marlin 允许你混合使用:
#define STEALTHCHOP_XY
#define STEALTHCHOP_Z
#define STEALTHCHOP_E
我个人习惯:X/Y 轴用 StealthChop,因为噪音主要来自它们。Z 轴和挤出机用 SpreadCycle,因为需要更大的扭矩。
#define HYBRID_THRESHOLD 来改变切换速度点。
4.4 知识体系图:主板与驱动配置总览
下面这张图帮你理清本章的核心逻辑:
4.5 避坑指南:我踩过的三个坑
- 驱动方向反了: 刷完固件,电机往反方向转。别慌,在
Configuration.h里把#define INVERT_X_DIR改成true就行。我一开始不知道,还以为是驱动坏了。 - TMC 驱动烧了: 有一次我把 24V 接到了驱动的 VIO 引脚上。嗯,一股青烟。记住,TMC2209 的 VIO 是 3.3V 或 5V,千万别接错。
- 串口连不上: 刷完固件,电脑死活不认。最后发现是 USB 线的问题——那根线只能充电,不能传数据。换根线就好了。
好了,这一章的内容就这些。配置主板和驱动是固件调试中最容易出错的环节,但也是最值得花时间搞懂的。你想想看,只要这一步对了,后面的配置基本就是水到渠成。