外设与驱动测试
本文用于验证步进驱动、CAN 工具板等外设模块是否正常工作。测试思路与基础 I/O 测试一致,使用最小化 Klipper 配置隔离单个硬件。
若需测试 MCU 连接、温度传感器、风扇输出或输入口,请先参考 硬件测试方法。
驱动测试
测试目的
用最简单的 Klipper 配置验证单个 TMC 驱动(UART 或 SPI 模式)能否与主板正常通信,并确认电机可以受控运行。
前置条件
请先完全关闭打印机并断开电源供应,再进行以下操作。禁止带电插拔驱动模块或步进电机线。
- 打印机已完全断电。
- 待测 TMC 驱动正确插入主板对应插座,确认方向无误。
- 若为 UART 模式驱动(如 TMC2209),确认对应驱动口的 UART 跳线帽已安装。
- 仅连接一个步进电机到待测驱动口,其余驱动口暂时留空。
- 准备好一份仅包含待测驱动的最简
printer.cfg,原有完整配置文件建议先备份。
单驱动最小化配置
使用以下最简配置替换 printer.cfg,仅保留 [printer]、[mcu]、待测的 [manual_stepper Drive0] 和对应的 [tmcXXXX manual_stepper Drive0] 段。[manual_stepper] 仍需一个最简 [printer] 段(kinematics: none),比运动轴配置更简洁,适合纯硬件验证。
- UART 模式(TMC2209 / TMC2240等)
- SPI 模式(TMC5160 / TMC2130等)
[printer]
kinematics: none
max_velocity: 200.00
max_accel: 40000.00
[mcu]
serial: /dev/serial/by-id/usb-Klipper_xxxxxxxxxxx
[manual_stepper Drive0]
# 请根据实际主板引脚修改以下三项
step_pin: PE2
dir_pin: PC5
enable_pin: !PF11
# 以下参数无需修改
microsteps: 16
rotation_distance: 40
velocity: 500
accel: 10000
position_min: 0
position_max: 1000
[tmc2209 manual_stepper Drive0]
# 请根据实际主板引脚修改 uart_pin
# 请根据驱动器厂家资料修改 sense_resistor
uart_pin: PC4
interpolate: False
run_current: 0.8
sense_resistor: <driver_sense_resistor>
stealthchop_threshold: 0
[printer]
kinematics: none
max_velocity: 200.00
max_accel: 40000.00
[mcu]
serial: /dev/serial/by-id/usb-Klipper_xxxxxxxxxxx
[manual_stepper Drive0]
# 请根据实际主板引脚修改以下三项
step_pin: PE2
dir_pin: PC5
enable_pin: !PF11
# 以下参数无需修改
microsteps: 16
rotation_distance: 40
velocity: 500
accel: 10000
position_min: 0
position_max: 1000
[tmc5160 manual_stepper Drive0]
# 请根据实际主板引脚修改 cs_pin 和 spi_bus
# 请根据驱动器厂家资料修改 sense_resistor
cs_pin: PC4
spi_bus: spi1a
run_current: 0.8
sense_resistor: <driver_sense_resistor>
stealthchop_threshold: 0
serial:替换为主板实际串口 ID(可通过ls /dev/serial/by-id/查看)。step_pin/dir_pin/enable_pin:替换为待测驱动口对应的主板引脚。uart_pin(UART 模式)/cs_pin+spi_bus(SPI 模式):替换为实际引脚与 SPI 总线编号。sense_resistor:必须按驱动器厂家提供的参数填写,不要只按芯片型号猜测。不同 TMC5160 驱动板可能是0.075、0.033、0.022或其他值;TMC2240 等驱动的采样参数也可能不同。若厂家资料未标明,请优先咨询厂家或使用其官方配置示例。- 配置中不含任何加热器、风扇,仅用于驱动通信验证。
多驱动测试方法
如果需要逐个验证一块主板上的多个驱动口,可参考测试配置的命名方式,把每个驱动口写成独立的 Drive0、Drive1、Drive2:
[manual_stepper Drive1]
step_pin: PE3
dir_pin: PF13
enable_pin: !PF14
microsteps: 16
rotation_distance: 40
velocity: 500
accel: 10000
position_min: 0
position_max: 1000
[tmc2209 manual_stepper Drive1]
uart_pin: PF12
interpolate: False
run_current: 0.8
sense_resistor: <driver_sense_resistor>
stealthchop_threshold: 0
测试时只连接当前待测驱动口的电机,确认一个端口后断电,再换到下一个端口。
测试步骤
-
将上述最小配置保存为
printer.cfg。 -
确认电机和驱动插好后再上电,启动 Klipper。
-
在 Mainsail / Fluidd 控制台中输入以下命令,使能电机并把当前位置设为
0:MANUAL_STEPPER STEPPER=Drive0 ENABLE=1MANUAL_STEPPER STEPPER=Drive0 SET_POSITION=0- 如果使能后电机有保持扭矩,说明
enable_pin基本有效。 - 如果电机仍可自由转动,断电后检查
enable_pin、驱动方向、跳线帽和供电。
- 如果使能后电机有保持扭矩,说明
-
执行手动移动测试:
MANUAL_STEPPER STEPPER=Drive0 MOVE=100 SPEED=100MANUAL_STEPPER STEPPER=Drive0 MOVE=0 SPEED=100MOVE=是目标位置,不是相对位移。执行MOVE=100后再执行MOVE=0,电机会反向回到起点。- 如果电机仍连接在机器运动机构上,第一次测试建议先改成
MOVE=10 SPEED=5,确认方向和行程安全后再提高速度。 - 若电机平稳转动无卡顿,说明驱动、电机和脉冲/方向引脚基本正常。
- 若电机无反应、只抖动或方向异常,断电后检查引脚配置、电机线序、驱动方向和跳线帽。
-
验证 TMC 通信状态:
DUMP_TMC STEPPER=Drive0若能正常返回寄存器信息,说明 UART/SPI 通信基本正常;若提示无法读取寄存器,请参考 TMC 报错排查。
-
测试结束后关闭电机使能:
MANUAL_STEPPER STEPPER=Drive0 ENABLE=0
预期结果
| 测试项 | 正常结果 | 异常表现 |
|---|---|---|
| 手动移动 | 电机按命令正反向移动 | 不动、抖动、卡顿或方向异常 |
| TMC 通信 | DUMP_TMC 返回寄存器信息 | 无法读取 UART/SPI 寄存器 |
| 保持扭矩 | ENABLE=1 后电机轴无法自由转动 | 轴可轻松转动(未使能) |
若以上三项均正常,说明驱动与主板通信及电机接线无问题,可恢复原始 printer.cfg 并继续排查其他硬件。
CAN 工具板最小测试
测试目的
确认 CAN 工具板已经被 Klipper 识别,并验证工具板上的温度、风扇、加速度计或输入口。
最小化配置
[mcu tool]
canbus_uuid: xxxxxxxxxxxx
[temperature_sensor ToolBoard]
sensor_type: temperature_mcu
sensor_mcu: tool
[output_pin tool_FAN0]
pin: tool:gpio13
pwm: True
cycle_time: 0.010
value: 0
shutdown_value: 0
测试步骤
- 按 CAN 网络配置与 ID 搜索 搜索并填写
canbus_uuid。 - 重启 Klipper 后查看
ToolBoard温度是否正常显示。 - 使用
SET_PIN PIN=tool_FAN0 VALUE=1测试工具板低压风扇输出,测试后执行SET_PIN PIN=tool_FAN0 VALUE=0。 - 如需测试工具板加速度计或输入口,可按上文对应章节添加配置。
CANH/CANL 线序、终端电阻、跳线帽和线束整理都必须断电后操作。不要在通电状态下拔插 CAN 线或调整终端电阻。
常见异常与下一步
| 异常表现 | klippy.log 常见关键词 | 优先检查 | 下一步 |
|---|---|---|---|
| Klipper 无法连接 MCU | Unable to connect、Connect error、Serial connection closed | serial / canbus_uuid、固件、USB/CAN 连接 | 常见报错总览 |
| 温度显示异常 | ADC out of range、temperature、not heating | sensor_type、sensor_pin、热敏插头 | 温度、加热与挤出报错 |
| 加热器或热床 shutdown | Verify heater、not heating at expected rate | 热敏接触、PID、加热器功率、SSR | 温度、加热与挤出报错 |
| 风扇不转 | 无报错(输出口不产生日志) | pin、风扇电压规格、PWM 兼容性 | 换风扇或换端口交叉测试 |
| 输入状态不变 | 无报错(输入口不产生日志) | 上拉 ^、线序、开关类型 | 断电后检查插头和端口 |
| 加速度计无数据 | Invalid adxl345 id、Invalid lis2dw id、timeout | cs_pin、spi_bus、线束、模块型号 | 加速度计测试与校准 |
| 共振测试失败 | No data、Insufficient axis data、Frequency range | 传感器固定、皮带张力、风扇振动 | 加速度计测试与校准 |
| 电机不动 | Unable to read tmc uart、Unable to write tmc spi | step_pin、dir_pin、enable_pin、TMC 配置 | TMC 报错排查 |
| TMC 无法读取寄存器 | DRV_STATUS、read register、GSTAT | UART/SPI 引脚、跳线帽、驱动供电、驱动型号 | TMC 报错排查 |
| CAN 工具板离线 | bytes_invalid、Network is down、No buffer space、Timer too close | CAN 线序、终端电阻、供电、UUID | CAN 网络配置与 ID 搜索 |
| 打印中随机卡顿/丢失 | Stepper too far in past、Rescheduled timer、Lost communication | 上位机负载、通信线干扰、速度加速度 | 系统、性能与服务报错 |
| 配置无法保存 | Unable to write、Option conflict、CRC does not match | 文件权限、自动保存区冲突、FIRMWARE_RESTART | 配置类报错 |
参考配置片段
维护测试配置时,可按硬件类型从对应主板/工具板模板中提取片段:
- 主板测试:
temperature_sensor、manual_stepper DriveN、tmcXXXX manual_stepper DriveN、output_pin FANx、gcode_button IOx。 - 工具板测试:
temperature_sensor、adxl345/lis2dw、manual_stepper Drive0、output_pin FANx、gcode_button。 - 多驱动测试:保持
Drive0、Drive1、Drive2这种命名,测试命令中的STEPPER=与配置段名称保持一致。 - 低压输出测试:优先选择风扇、RGB、蜂鸣器等低压负载,不把加热棒或热床当作普通
output_pin测试。
若某个模块无法通过上述最小测试,请先恢复原配置,再结合具体报错到对应 FAQ 页面继续排查。