Teaching Techのプリンタ動画をみていたらKlipperと呼ぶファームウェアの紹介をしていたので、興味が湧き試してみた。
www.klipper3d.org
このファームウェアはOctoprintと連携して動き、従来のMarlinなどはコントローラ側でGコードの解釈をして印刷実行していたが、KlipperはコントローラのホストとなるラズパイやLinuxマシンでGコードを解釈し、シリアルポート経由でコントローラに指示を行うのでパフォーマンスが良いと説明されている。
これにより8bitボードのデルタ型やcoreXY型を32bitボードに入れ替えることなく、パフォーマンスを向上させることができる。
今回は3号機と置き換える予定の2号機を使い、コントローラのホストはUbuntuを入れたMacBookAirと組み合わせて試験した。
Klipperを入れる前に2号機のコントローラであるMKS Gen-Lに乗っているTMC2208をスタンドアロンからUARTにするべく配線を替えた。
Klipperの導入そのものはドキュメント通り行うことで簡単にできた。
printer.cfgの設定は以下の通りである。
# This file is an example config file for linear delta style printers. # One may copy and edit this file to configure a new delta printer. # DO NOT COPY THIS FILE WITHOUT CAREFULLY READING AND UPDATING IT # FIRST. Incorrectly configured parameters may cause damage. # See docs/Config_Reference.md for a description of parameters. # Common EXP1 / EXP2 (display) pins [board_pins] aliases: # Common EXP1 header found on many "all-in-one" ramps clones EXP1_1=ar37, EXP1_3=ar17, EXP1_5=ar23, EXP1_7=ar27, EXP1_9=<GND>, EXP1_2=ar35, EXP1_4=ar16, EXP1_6=ar25, EXP1_8=ar29, EXP1_10=<5V>, # EXP2 header EXP2_1=ar50, EXP2_3=ar31, EXP2_5=ar33, EXP2_7=ar49, EXP2_9=<GND>, EXP2_2=ar52, EXP2_4=ar53, EXP2_6=ar51, EXP2_8=ar41, EXP2_10=<RST> # Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "spi" # Note, some boards wire: EXP2_8=<RST>, EXP2_10=ar41 [stepper_a] step_pin: ar54 dir_pin: ar55 enable_pin: !ar38 microsteps: 16 rotation_distance: 32 endstop_pin: ^ar2 homing_speed: 60 homing_retract_dist: 8.0 position_endstop: 245.74 arm_length: 210.0 [tmc2208 stepper_a] uart_pin: ar63 tx_pin: ar40 interpolate: True run_current:0.760 sense_resistor: 0.110 stealthchop_threshold: 0 [stepper_b] step_pin: ar60 dir_pin: ar61 enable_pin: !ar56 microsteps: 16 rotation_distance: 32 endstop_pin: ^ar15 [tmc2208 stepper_b] uart_pin: ar64 tx_pin: ar59 interpolate: True run_current: 0.760 sense_resistor: 0.110 stealthchop_threshold: 0 [stepper_c] step_pin: ar46 dir_pin: ar48 enable_pin: !ar62 microsteps: 16 rotation_distance: 32 endstop_pin: ^ar19 [tmc2208 stepper_c] uart_pin: ar65 tx_pin: ar42 interpolate: True run_current: 0.760 sense_resistor: 0.110 stealthchop_threshold: 0 [extruder] step_pin: ar26 dir_pin: !ar28 enable_pin: !ar24 microsteps: 16 rotation_distance: 20.64 nozzle_diameter: 0.400 filament_diameter: 1.750 heater_pin: ar10 sensor_type: EPCOS 100K B57560G104F sensor_pin: analog13 control: pid pid_Kp: 22.2 pid_Ki: 1.08 pid_Kd: 114 min_temp: 0 max_temp: 250 [heater_bed] heater_pin: ar8 sensor_type: EPCOS 100K B57560G104F sensor_pin: analog14 control: watermark min_temp: 0 max_temp: 130 [mcu] serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 pin_map: arduino [printer] kinematics: delta max_velocity: 300 max_accel: 3000 max_z_velocity: 300 delta_radius: 103.98 print_radius: 160.0 [delta_calibrate] radius: 80 [display] lcd_type: hd44780 hd44780_protocol_init: True rs_pin: EXP1_4 e_pin: EXP1_3 d4_pin: EXP1_5 d5_pin: EXP1_6 d6_pin: EXP1_7 d7_pin: EXP1_8 line_length: 20 encoder_pins: ^EXP2_3, ^EXP2_5 click_pin: ^!EXP1_2 menu_root: __main [output_pin beeper] pin: EXP1_1 [probe] pin: ^!ar18 x_offset: -15.0 y_offset: -5.0 #z_offset: -3.3 samples_result: average [bed_mesh] speed: 120 horizontal_move_z: 5 mesh_radius: 70 mesh_origin: 0,0 round_probe_count: 5 [fan] pin: ar9 max_power: 1.0 shutdown_speed: 0 cycle_time: 0.010 hardware_pwm: False kick_start_time: 0.100 off_below: 0.0 [heater_fan my_nozzle_fan] pin: ar7 max_power: 1.0 shutdown_speed: 0 heater: extruder heater_temp: 50.0 fan_speed: 1.0 [endstop_phase] #*# <---------------------- SAVE_CONFIG ----------------------> #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. #*# #*# [probe] #*# z_offset = 3.400 #*# #*# [bed_mesh default] #*# version = 1 #*# points = #*# 0.200160, 0.200160, 0.200160, 0.200160, 0.200160 #*# 0.231761, 0.231761, 0.086932, -0.009307, -0.009307 #*# 0.220453, 0.159828, 0.038766, -0.031987, 0.934881 #*# 0.056839, 0.056839, 0.008054, 0.025855, 0.025855 #*# 0.201225, 0.201225, 0.201225, 0.201225, 0.201225 #*# tension = 0.2 #*# min_x = -70.0 #*# algo = lagrange #*# y_count = 5 #*# mesh_y_pps = 2 #*# min_y = -70.0 #*# x_count = 5 #*# max_y = 70.0 #*# mesh_x_pps = 2 #*# max_x = 70.0 #*# #*# [endstop_phase stepper_a] #*# trigger_phase = 44/64 #*# #*# [endstop_phase stepper_b] #*# trigger_phase = 62/64 #*# #*# [endstop_phase stepper_c] #*# trigger_phase = 3/64
一通り設定を終えてフィラメント無しで動作試験したが、問題無く3D Bencyを印刷した。
設定で分かりにくいのが、probeなどの設定を行うとendstop_phaseなど先に保存していた設定が消えてしまうことである。
どうも実行する順番があるようで以下の順までは確認済みである。
- probe_calibrate
- bed_mesh_calibrate
- endstop_phase
probe_calibrateの手順は以下の通りである。
- probe_calibrate実行
- probeが接地するとノズルがプローブオフセット位置まで移動して止まる
- testz z=-<ノズルの相対位置>でノズルを下げる
- ベッドとノズルが0.1mm程度のスキマになったらaccept実行
- printer.cfg内のz_offset =が再定義される