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 里。我建议你直接去那里搜,别自己猜名字。我曾经因为拼写错误,浪费了半小时排查编译错误。

小技巧: 如果你用的是国产板子,比如 MKS、BigTreeTech、Mellow,它们的命名通常很直观。实在找不到,就去 GitHub 的 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 位板,配置方式略有不同
注意: 选错宏会导致引脚映射错误。轻则某些功能失效,重则烧坏驱动或主板。我曾经见过有人把 RAMPS 的宏用在 SKR 上,结果加热床直接失控。

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 上。

核心原则: 如果你刷完固件后,电脑能识别到串口,但连不上,或者连上后乱码,99% 是波特率或串口号配错了。

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,别把电机烧了。

我的经验: 调电流时,用手摸电机。如果 30 秒内烫得不敢碰,说明电流太大了。正常工作时,电机温度应该在 50-60°C 左右。

4.3.4 高级功能:StealthChop 与 SpreadCycle

TMC 驱动有两个工作模式:

  • StealthChop(静音模式): 低速时几乎无声,但扭矩小。
  • SpreadCycle(高性能模式): 噪音大,但扭矩大,适合高速。

Marlin 允许你混合使用:

#define STEALTHCHOP_XY
#define STEALTHCHOP_Z
#define STEALTHCHOP_E

我个人习惯:X/Y 轴用 StealthChop,因为噪音主要来自它们。Z 轴和挤出机用 SpreadCycle,因为需要更大的扭矩。

注意: 如果你发现电机在某个速度区间剧烈抖动或发出尖锐噪音,那可能是 StealthChop 和 SpreadCycle 切换时的过渡区。可以调整 #define HYBRID_THRESHOLD 来改变切换速度点。

4.4 知识体系图:主板与驱动配置总览

下面这张图帮你理清本章的核心逻辑:

主板与驱动配置核心流程 MOTHERBOARD 宏 告诉固件:你是什么板子? 串口与 USB 配置 波特率、串口号、USB 模式 步进电机驱动配置 TMC2209 / TMC5160 / TMC2226 ... UART 模式(推荐) 独立模式(不推荐) 电流 / 微步 / StealthChop

4.5 避坑指南:我踩过的三个坑

  1. 驱动方向反了: 刷完固件,电机往反方向转。别慌,在 Configuration.h 里把 #define INVERT_X_DIR 改成 true 就行。我一开始不知道,还以为是驱动坏了。
  2. TMC 驱动烧了: 有一次我把 24V 接到了驱动的 VIO 引脚上。嗯,一股青烟。记住,TMC2209 的 VIO 是 3.3V 或 5V,千万别接错。
  3. 串口连不上: 刷完固件,电脑死活不认。最后发现是 USB 线的问题——那根线只能充电,不能传数据。换根线就好了。

好了,这一章的内容就这些。配置主板和驱动是固件调试中最容易出错的环节,但也是最值得花时间搞懂的。你想想看,只要这一步对了,后面的配置基本就是水到渠成。