3D 打印机控制器实战:Klipper 固件移植,让老打印机焕发新生

3D 打印机控制器实战:Klipper 固件移植,让老打印机焕发新生

为什么要把 3D 打印机升级到 Klipper?

如果你还在用 Marlin 固件跑 3D 打印机,那你可能错过了一个提升打印质量的机会。Klipper 是近年来最火的 3D 打印机固件,它的核心思路很聪明:把繁重的计算任务从打印机主板移到性能更强的上位机(比如树莓派)上

这样做有什么好处?

  • 更高的步进频率:Marlin 在 8 位主板上最高只能跑到 50kHz,Klipper 轻松突破 100kHz

  • 更平滑的运动控制:输入整形(Input Shaping)消除共振,打印速度提升 30-50%

  • 更丰富的功能:压力提前(Pressure Advance)、网格调平、宏命令

  • 更方便的配置:配置文件修改后重启即可,不用重新编译固件

我手里有一台老款的 Ender 3,原厂主板是 8 位的 ATmega2560,用 Marlin 跑起来总是有奇怪的共振纹路。这次就用树莓派 Zero 2 W + Klipper 给它来个大升级,总成本不到 200 元。

需要准备什么?

物品型号/规格价格
单板计算机树莓派 Zero 2 W¥120
MicroSD 卡16GB Class10¥25
USB 数据线Micro-USB 转 USB-A¥10
杜邦线公对母 20cm 10 根¥15
散热片树莓派 Zero 专用¥10
外壳3D 打印或亚克力¥20
总计¥200

注意: 如果你已经有树莓派(任何型号都可以),那成本更低。Zero 2 W 的优势是体积小,可以直接贴在打印机外壳上。

步骤 1:安装 Klipper 固件

Klipper 由两部分组成:上位机服务(运行在树莓派上)和下位机固件(烧录到打印机主板)。我们先安装上位机。

1.1 刷写系统镜像

推荐使用 Kiauh 安装脚本,它会自动处理所有依赖。首先在树莓派上刷写 Raspberry Pi OS Lite 镜像:

# 下载镜像(建议使用 Lite 版本,不需要桌面环境)
wget https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2024-01-22/2024-01-22-raspios-bookworm-armhf-lite.img.xz

# 解压
unxz 2024-01-22-raspios-bookworm-armhf-lite.img.xz

# 刷写到 SD 卡(替换 /dev/sdX 为你的 SD 卡设备)
sudo dd if=2024-01-22-raspios-bookworm-armhf-lite.img of=/dev/sdX bs=4M status=progress
sync

1.2 运行 Kiauh 安装脚本

启动树莓派后,SSH 登录并运行:

# 更新系统
sudo apt update && sudo apt upgrade -y

# 下载 Kiauh
cd ~
git clone https://github.com/th33xitus/kiauh.git

# 运行安装脚本
./kiauh/kiauh.sh

在 Kiauh 菜单中:

  1. 选择 [1] Install Klipper,等待编译完成

  2. 选择 [3] Install Mainsail(Web 界面)

  3. 安装完成后退出 Kiauh,执行 sudo reboot 重启系统

注意事项: ⚠️ 安装过程中会编译 Klipper,树莓派 Zero 2 W 大约需要 10-15 分钟,让它发热吧,别发光就好。

1.3 安装 Moonraker(API 服务)

Moonraker 是 Klipper 的 API 服务,让 Web 界面(Mainsail/Fluidd)能够与 Klipper 通信:

# 在 Kiauh 菜单中选择 [2] Install Moonraker

1.4 安装 Web 界面

推荐使用 Mainsail,界面简洁功能全:

# 在 Kiauh 菜单中选择 [3] Install Mainsail

安装完成后,在浏览器访问 http://树莓派 IP 地址 就能看到 Mainsail 界面了。

步骤 2:配置打印机

2.1 编译下位机固件

不同打印机主板需要不同的固件。以 Ender 3(STM32F103 主板)为例:

# 进入 Klipper 目录
cd ~/klipper

# 配置固件
make menuconfig

配置选项:

  • Micro-controller Architecture: STM32

  • Processor model: STM32F103

  • Bootloader offset: 28KiB bootloader

  • Communication interface: Serial

保存后编译:

make clean
make -j4

编译完成后,固件位于 ~/klipper/out/klipper.bin

2.2 烧录固件

klipper.bin 复制到 SD 卡根目录(打印机主板通常支持 SD 卡刷机),插入打印机主板,上电后会自动刷写。

或者 使用 dfu-util 通过 USB 烧录(如果主板支持 DFU):

sudo dfu-util -d 1209:0003 -a 0 -s 0x08000000:leave -D ~/klipper/out/klipper.bin

2.3 创建打印机配置文件

在树莓派上创建配置文件 ~/printer_data/config/printer.cfg

# Ender 3 基础配置

step_pin: PB9
dir_pin: PB8
enable_pin: !PB7
microsteps: 16
rotation_distance: 40
endstop_pin: ^PC5
position_endstop: 0
position_max: 235
homing_speed: 50

step_pin: PB6
dir_pin: !PB5
enable_pin: !PB4
microsteps: 16
rotation_distance: 40
endstop_pin: ^PC4
position_endstop: 0
position_max: 235
homing_speed: 50

step_pin: PB3
dir_pin: !PB2
enable_pin: !PC15
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
position_max: 250
homing_speed: 10

step_pin: PC14
dir_pin: PC13
enable_pin: !PC12
microsteps: 16
rotation_distance: 33.5
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC3
control: pid
pid_Kp: 21.527
pid_Ki: 1.063
pid_Kd: 108.982
min_temp: 0
max_temp: 250

heater_pin: PA2
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC2
control: pid
pid_Kp: 54.027
pid_Ki: 0.770
pid_Kd: 948.182
min_temp: 0
max_temp: 130

serial: /dev/serial/by-id/usb-Klipper_stm32f103xe_若十十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若十若

Klipper 高级配置

压力_advance(Pressure Advance)

压力_advance是Klipper的核心功能之一,可以显著改善拐角和细节的打印质量。

原理说明

问题:
- 挤出机响应滞后
- 拐角处材料过多(过挤)
- 细节模糊

解决:
- 提前调整挤出速度
- 补偿挤出机延迟
- 改善拐角质量

校准方法

方法1:线性_advance测试

# 生成测试G-code
# 使用Klipper官方工具:
# https://www.klipper3d.org/Pressure_Advance.html

# 测试参数:
# - 打印速度:100mm/s
# - Advance值范围:0 - 0.2
# - 步进:0.005

# 观察测试结果,选择最清晰的拐角

方法2:自动校准

# printer.cfg 配置
[pressure_advance]
smooth_time: 0.040  # 平滑时间

# 使用校准宏
[gcode_macro CALIBRATE_PRESSURE_ADVANCE]
gcode:
    SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500
    TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005

推荐值参考

  • 直接驱动:0.01 - 0.05
  • Bowden管:0.05 - 0.15
  • 高速打印:可能需要更高值

输入整形(Input Shaping)

输入整形可以消除打印机的共振,提高打印速度和表面质量。

原理说明

问题:
- 打印机结构共振
- 表面出现波纹(ghosting)
- 限制打印速度

解决:
- 测量共振频率
- 应用整形算法
- 消除共振影响

自动校准流程

步骤1:安装加速度计

# 使用ADXL345加速度计
# 连接到树莓派SPI接口

# 配置 accelerometer.cfg
[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None

步骤2:测量共振频率

# 运行测试
TEST_RESONANCES AXIS=X
TEST_RESONANCES AXIS=Y

# 结果保存在 /tmp 目录
# 查看图表选择最佳整形器

步骤3:配置输入整形

# printer.cfg 配置
[input_shaper]
shaper_freq_x: 50.0    # X轴共振频率
shaper_type_x: mzv     # X轴整形器类型
shaper_freq_y: 40.0    # Y轴共振频率
shaper_type_y: mzv     # Y轴整形器类型

整形器类型对比

类型振动抑制平滑度推荐场景
ZV一般最好轻型打印机
MZV大多数情况
EI很好一般重型打印机
2HUMP_EI很好一般多共振频率
3HUMP_EI最好复杂共振

速度限制优化

# 根据打印机能力设置速度限制
[printer]
max_velocity: 300          # 最大速度 (mm/s)
max_accel: 3000            # 最大加速度 (mm/s²)
max_accel_to_decel: 1500   # 加减速转换 (mm/s²)
square_corner_velocity: 5.0 # 拐角速度 (mm/s)

# 推荐值参考:
# - CoreXY:300-500 mm/s, 5000-10000 mm/s²
# - Cartesian:200-300 mm/s, 2000-5000 mm/s²
# - Bed slinger:150-250 mm/s, 1000-3000 mm/s²

切片器配置指南

PrusaSlicer 配置

打印机设置

1. 添加自定义打印机
   - 选择 "Firmware: Klipper"
   
2. G-code 设置
   Start G-code:

SET_HEATER_TEMPERATURE HEATER=extruder TARGET=[first_layer_temperature] SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=[bed_temperature] G28 G1 Z5 F3000 M190 S[bed_temperature] M109 S[first_layer_temperature] QUAD_GANTRY_LEVEL G28 Z G1 Z2 F3000 G1 X0.1 Y20 Z0.3 F5000 G1 X0.1 Y200 Z0.3 F1500 E15 G1 X0.4 Y200 Z0.3 F5000 G1 X0.4 Y20 Z0.3 F1500 E30 G92 E0


Layer change G-code:

;LAYER:[layer_num]

filament设置

速度设置:
- 外壁:40-60 mm/s
- 内壁:80-120 mm/s
- 填充:100-150 mm/s
- 顶层:30-50 mm/s

加速度设置:
- 外壁:500-1000 mm/s²
- 其他:2000-5000 mm/s²

回抽设置:
- 直接驱动:0.5-1.0 mm
- Bowden管:4-6 mm
- 回抽速度:30-40 mm/s

OrcaSlicer 配置

OrcaSlicer是PrusaSlicer的增强版,专为Klipper优化。

优势特性

1. 内置Klipper校准工具
   - Pressure Advance校准
   - 输入整形校准
   - 流速校准
   - 温度塔
   
2. 高级速度控制
   - 每特征速度设置
   - 动态加速度控制
   - 拐角速度优化
   
3. 实时监控
   - 打印进度
   - 温度曲线
   - 速度统计

推荐配置

质量预设:
- 0.08mm 超细(展示模型)
- 0.12mm 细(高质量)
- 0.20mm 标准(日常使用)
- 0.28mm 粗(快速原型)

速度预设:
- 标准:150 mm/s
- 快速:250 mm/s
- 极速:400 mm/s(需要良好调校)

故障排除指南

常见问题及解决方案

问题1:打印机无法连接Klipper

症状

Moonraker显示"Disconnected"
Klipper状态显示"Shutdown"

排查步骤

# 1. 检查Klipper服务状态
sudo systemctl status klipper

# 2. 查看Klipper日志
tail -f /tmp/klippy.log

# 3. 检查串口连接
ls -l /dev/serial/by-id/

# 4. 验证MCU固件
./scripts/check_firmware.sh

常见原因

  • 串口权限问题:sudo usermod -aG dialout pi
  • 固件不匹配:重新刷写MCU固件
  • 配置文件错误:检查printer.cfg语法
  • 硬件连接:检查USB线缆和连接

问题2:挤出机步进电机失步

症状

- 挤出不足
- 层间粘合差
- 表面出现缺失

解决方案

# 1. 降低挤出速度
max_extrude_only_velocity: 5.0
max_extrude_only_accel: 500

# 2. 增加电机电流
# 在TMC驱动配置中调整
[tmc2209 extruder]
run_current: 0.800  # 增加到0.8-1.0A

# 3. 检查机械问题
# - 齿轮磨损
# - 轴承卡滞
# - 耗材缠绕

问题3:床面调平失败

症状

- 探针多次触发
- 床面偏差过大
- 调平后仍有问题

排查步骤

# 1. 检查探针
PROBE_CALIBRATE
# 观察探针触发是否稳定

# 2. 检查探针偏移
# 确保探针在喷嘴正下方

# 3. 重新校准Z偏移
Z_ENDSTOP_CALIBRATE

# 4. 检查床面
# - 是否松动
# - 是否变形
# - 是否清洁

问题4:打印质量下降

症状

- 表面出现波纹
- 拐角过挤
- 细节模糊

优化步骤

# 1. 校准Pressure Advance
# 使用线性测试方法

# 2. 启用Input Shaping
# 测量并配置共振频率

# 3. 调整速度参数
# - 降低加速度
# - 降低拐角速度
# - 优化外壁速度

# 4. 检查机械
# - 皮带张紧
# - 轮子间隙
# - 框架刚性

性能优化技巧

1. 减少通信延迟

# 优化USB通信
# 使用高质量USB线缆
# 避免USB集线器
# 直接连接到树莓派

# 调整Klipper参数
[printer]
max_mcu_temp: 80  # 监控MCU温度

2. 优化G-code处理

# 使用G-code仲裁
[gcode_arcs]
resolution: 0.1  # 圆弧分辨率

# 启用线性推进
[linear_advance]
# 注意:Klipper使用pressure_advance替代

3. 提高计算性能

# 树莓派优化
# 1. 使用高性能SD卡
# 2. 超频(谨慎)
# 3. 关闭不必要的服务

# 监控性能
top -d 1
htop

进阶项目

项目1:自动换色系统

# 配置多挤出机
[extruder1]
step_pin: PB3
dir_pin: PB4
enable_pin: !PB5
# ... 其他配置

# 换色宏
[gcode_macro T0]
gcode:
    ACTIVATE_EXTRUDER EXTRUDER=extruder
    SAVE_GCODE_STATE NAME=TOOLHEAD_STATE
    G1 X0 Y0 Z10 F3000  # 移动到换色位置
    # ... 换色逻辑

[gcode_macro T1]
gcode:
    ACTIVATE_EXTRUDER EXTRUDER=extruder1
    # ... 换色逻辑

项目2:摄像头监控集成

# 配置摄像头
[webcam]
flip_horizontal: True
flip_vertical: False

# 延时摄影
[gcode_macro TIMELAPSE_TAKE_FRAME]
gcode:
    {action_call_remote_method("timelapse_takeframe")}

项目3:传感器集成

# 温度传感器
[temperature_sensor raspberry_pi]
sensor_type: temperature_host
min_temp: 10
max_temp: 100

[temperature_sensor mcu]
sensor_type: temperature_mcu
min_temp: 0
max_temp: 100

# 机箱温度监控
[temperature_sensor chamber]
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PF5
min_temp: 0
max_temp: 100

总结

Klipper固件通过其先进的运动控制算法和高度可配置性,为3D打印机带来了显著的性能提升。通过本指南,您应该能够:

成功安装和配置Klipper:从硬件准备到软件配置 ✅ 优化打印性能:通过Pressure Advance和Input Shaping ✅ 实现高级功能:自动床面调平、多挤出机、传感器集成 ✅ 解决常见问题:系统化的故障排除方法 ✅ 持续提升质量:通过校准和优化

关键要点

  1. 耐心校准:Klipper的性能取决于校准质量
  2. 逐步优化:不要一次改变太多参数
  3. 记录配置:保存成功的配置以便恢复
  4. 社区支持:积极参与Klipper社区

下一步建议

  • 完成所有校准步骤
  • 尝试不同的打印速度
  • 探索Klipper的高级功能
  • 分享您的经验和配置

祝您打印愉快!如果遇到问题,欢迎查阅Klipper官方文档或加入社区讨论。


相关资源: