2. 配置打印机基本参数
任务说明
为Klipper固件编写一份可用的printer.cfg,完成三项核心配置:步进电机引脚映射、热端温度传感器类型声明、挤出机基础参数设定,使打印机能够执行基本的运动指令(如归位与挤出测试)。本案例以常见的Cartesian结构、使用TMC2209驱动的三轴步进电机和NTC 100K热敏电阻的挤出机为配置对象。
硬件假设与引脚映射
为便于独立复现,本案例基于以下硬件约定(实际使用时需按主板原理图修改):
- 控制板:常见8位或32位主板,步进驱动STEP/DIR引脚直接连接MCU的GPIO;
- X轴:STEP=
PC0,DIR=PC1,限位开关=PC2; - Y轴:STEP=
PC3,DIR=PC4,限位开关=PC5; - Z轴:STEP=
PC6,DIR=PC7,限位开关=PD0; - 挤出机:STEP=
PD1,DIR=PD2; - 热端温度传感器:ADC引脚
PA0,类型为NTC 100K(beta 3950); - 加热棒:PWM引脚
PD3; - 风扇(可选):
PD4。
printer.cfg 完整实现
# printer.cfg - Klipper 基本运动配置
# 适用于Cartesian结构,TMC2209驱动,NTC 100K热敏电阻
[stepper_x]
step_pin: PC0
dir_pin: PC1
enable_pin: !PC5 # 低电平使能,按需取反
microsteps: 16
rotation_distance: 40 # 假设2mm丝杆导程,16细分,200步/圈:40mm/圈
endstop_pin: ^PC2 # ^表示上拉输入
position_endstop: 0
position_min: 0
position_max: 200
homing_speed: 50
[stepper_y]
step_pin: PC3
dir_pin: PC4
enable_pin: !PC5
microsteps: 16
rotation_distance: 40
endstop_pin: ^PC5
position_endstop: 0
position_min: 0
position_max: 200
homing_speed: 50
[stepper_z]
step_pin: PC6
dir_pin: PC7
enable_pin: !PC5
microsteps: 16
rotation_distance: 8 # 假设T8丝杆导程8mm
endstop_pin: ^PD0
position_endstop: 0
position_min: 0
position_max: 200
homing_speed: 20
[extruder]
step_pin: PD1
dir_pin: PD2
enable_pin: !PC5
microsteps: 16
rotation_distance: 22.678 # 常见挤出机齿轮比,需实测校准
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PD3
sensor_type: NTC 100K # 热敏电阻类型
sensor_pin: PA0 # ADC引脚
min_temp: 0
max_temp: 250
control: pid
pid_Kp: 22.2
pid_Ki: 1.08
pid_Kd: 114
min_extrude_temp: 170 # 低于此温度禁止挤出
[heater_fan extruder_fan]
pin: PD4
heater: extruder
heater_temp: 50.0
[fan]
pin: PD5
[mcu]
serial: /dev/ttyUSB0 # 根据实际串口修改
baud: 250000
[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 20
max_z_accel: 100
配置说明与关键参数
rotation_distance表示电机轴旋转一圈所移动的距离(mm)。对于X/Y轴,若使用2mm导程丝杆且电机200步/圈、16细分,则每圈移动2mm,但此处设置为40mm是假设通过同步带轮(如20齿GT2带轮,带距2mm)驱动,即每圈移动40mm。Z轴使用T8丝杆(导程8mm)时设为8。实际值需根据机械结构计算或通过STEPPER_BUZZ测试后校准。
温度传感器类型NTC 100K对应常见100K@25℃热敏电阻,beta值为3950。若使用其他传感器(如PT1000或热电偶),需相应修改sensor_type并可能需要额外硬件。加热棒PWM引脚与传感器ADC引脚必须与控制板实际连接一致。
挤出机的rotation_distance为近似值,精确值需通过“挤出100mm实际测量”方法校准。PID参数为常见值,首次运行建议执行PID_CALIBRATE命令获得更佳参数。
落地与验证方法
- 将上述内容保存为
printer.cfg,放入Klipper配置目录(如~/printer_data/config/); - 根据实际主板修改
[mcu] serial串口路径,并确认固件已编译烧录且ls /dev/serial/by-id/能看到设备; - 重启Klipper服务:
sudo systemctl restart klipper,观察~/printer_data/logs/klippy.log无报错; - 在Fluidd/Mainsail控制台执行
FIRMWARE_RESTART,然后依次执行:
QUERY_ENDSTOPS # 检查各限位开关状态是否正常
STEPPER_BUZZ STEPPER=stepper_x # X轴电机应振动并步进
PID_CALIBRATE HEATER=extruder TARGET=200 # 热端PID整定(需接加热棒)
G28 # 三轴归位
G1 X50 F1200 # X轴移动50mm
G1 E10 F60 # 冷端禁止挤出,需先加热
M104 S200 # 设定热端温度
M109 S200 # 等待到达200℃
G1 E10 F60 # 挤出10mm耗材
判定标准:
- Klipper启动无配置错误,
QUERY_ENDSTOPS能正确反映限位开关触发状态; STEPPER_BUZZ时对应电机有明显步进动作且方向正确;G28能完成三轴归位且不撞限位;G1 X50后X轴实际移动约50mm(可用尺测量);- 热端加热至200℃后,
G1 E10能正常挤出耗材,且挤出长度与设定值偏差在可接受范围(通常<5%)。
常见问题排查
- 电机不转:检查
enable_pin极性(!表示低电平使能),确认驱动供电正常; - 温度读数异常:确认
sensor_type与sensor_pin匹配,ADC引脚未接错; - 归位方向反:交换
dir_pin的!取反或调整position_endstop; - 挤出机堵转:检查
rotation_distance是否过大导致实际挤出不足,或加热温度不足。