1. Marlin固件概述
大家好,欢迎来到这门课的第一章。我是你们的老朋友,一个在3D打印和嵌入式领域摸爬滚打多年的工程师。今天咱们不聊虚的,直接切入正题——Marlin固件。
Marlin是什么?说白了,它就是3D打印机的“大脑”和“灵魂”。没有它,你手里的那台机器就是一堆冰冷的金属和塑料。我个人习惯把Marlin比作一个交响乐团的指挥,它协调着步进电机、加热棒、风扇、传感器……让它们各司其职,最终把一团塑料丝变成你想要的模型。
1.1 Marlin的历史与版本
Marlin的故事,得从2011年说起。那时候3D打印刚火起来,开源社区里有个叫RepRap的项目,大家用Arduino Mega板子做控制器。最初的固件叫Sprinter,后来有人觉得它不够灵活,就fork出来做了个改进版——这就是Marlin的雏形。
我记得最早接触Marlin是在2013年,那时候版本号才1.0.x。功能简单得可怜,连个像样的LCD菜单都没有。但它的代码结构清晰,扩展性强,很快就在社区里流行起来。
来看看Marlin的主要版本演进:
| 版本 | 发布时间 | 核心变化 |
|---|---|---|
| 1.0.x | 2012-2015 | 基础功能,支持RAMPS 1.4,简单的G-code解析 |
| 1.1.x | 2016-2018 | 引入自动调平、高级LCD菜单、SD卡支持 |
| 2.0.x | 2019-2022 | 架构重构,支持32位板,线性调平,多热端 |
| 2.1.x | 2023-至今 | 优化内存,新增输入整形、线性前进等高级功能 |
这里有个坑,我得提醒你一下。很多人一上来就下载最新的2.1.x版本,结果发现自己的8位板子根本跑不动。嗯,选版本要看硬件。我个人建议,如果你用的是经典的Mega2560+RAMPS 1.4,老老实实用1.1.x或者2.0.x的bugfix分支就好。
1.2 Marlin在3D打印生态中的角色
3D打印这个生态圈,其实挺复杂的。有硬件厂商(比如Creality、Prusa)、有切片软件(Cura、PrusaSlicer)、有控制板(Duet、SKR)、还有固件(Marlin、Klipper、RepRapFirmware)。Marlin在其中扮演什么角色?
我画了张图,帮你理清这个关系:
看到了吗?Marlin处在中间层。它接收切片软件生成的G-code,然后翻译成硬件能理解的信号。说白了,它就是个翻译官+指挥官。
为什么Marlin这么流行?我觉得有几点原因:
- 开源免费——社区驱动,迭代快,有问题随时有人修
- 硬件兼容性好——从8位到32位,从RAMPS到SKR,几乎全覆盖
- 功能丰富——自动调平、断料检测、断电续打……你能想到的它都有
- 文档完善——虽然配置项多,但官方wiki写得还算清楚
1.3 Marlin源码结构初探
好,现在咱们来拆解一下Marlin的源码。别怕,第一次看确实会有点懵,但摸清门路后你会发现,它的结构其实挺清晰的。
我建议你从GitHub上clone一份Marlin 2.1.x的代码。打开后,你会看到这样的目录结构:
Marlin/
├── Marlin/ # 核心固件代码
│ ├── src/ # 源代码
│ │ ├── core/ # 核心模块(串口、温度、运动控制)
│ │ ├── module/ # 功能模块(调平、探头、LCD)
│ │ ├── gcode/ # G-code解析器
│ │ ├── HAL/ # 硬件抽象层(不同平台的适配)
│ │ └── ...
│ ├── Configuration.h # 主配置文件(你主要改这个)
│ ├── Configuration_adv.h # 高级配置(别乱动)
│ └── ...
├── buildroot/ # 构建系统
├── platformio.ini # PlatformIO项目配置
└── README.md
这里我要重点说说Configuration.h和Configuration_adv.h。这两个文件,说白了就是Marlin的“控制面板”。你所有的配置——从电机方向到热床温度上限——都在这里改。
我刚开始学的时候,犯过一个低级错误。当时我想改一下加速度设置,结果在Configuration_adv.h里找了半天没找到,后来才发现它其实在Configuration.h里。嗯,这两个文件的分工是这样的:
Configuration.h:基础配置,比如主板类型、电机方向、限位开关位置、温度传感器型号。这些是“必须配”的。Configuration_adv.h:高级配置,比如线性调平参数、输入整形、PID自动调谐。这些是“按需配”的。
再来说说src/目录。这里面的代码,你不需要全部看懂。但有几个关键文件,我建议你了解一下:
| 文件/目录 | 作用 | 我什么时候会改它? |
|---|---|---|
| Marlin/src/core/ | 运动控制核心算法(梯形加减速、S曲线) | 几乎不改,除非你要魔改运动逻辑 |
| Marlin/src/module/ | 温度管理、探头、LCD交互 | 偶尔改,比如自定义探头触发逻辑 |
| Marlin/src/gcode/ | G-code指令解析(G1、M104、M140等) | 很少改,除非你要添加自定义指令 |
| Marlin/src/HAL/ | 硬件抽象层,适配不同CPU架构 | 几乎不改,除非你要移植到新板子 |
你看,真正需要你动手的,其实就那两个配置文件。源码里的东西,大部分时候你只需要知道它们存在就行。
最后,我想说说PlatformIO。现在编译Marlin,主流方式就是用PlatformIO。你只需要在platformio.ini里选好环境(比如mega2560或LPC1768),然后点一下编译就行。我个人习惯用VS Code + PlatformIO插件,比Arduino IDE方便太多了。
好了,第一章就到这里。内容不多,但都是基础中的基础。你只要记住:Marlin是3D打印机的固件,它的核心是那两个配置文件,源码结构清晰但别乱动。把这些概念理清了,后面的章节你学起来会轻松很多。