Tiny-Tを作る(5) klipperの設定 

klipperの設定ファイル

klipperの特徴のひとつに設定ファイルによる設定ができることが挙げられます。設定を変更した場合にMCUのファームウェアを書き換える必要がなく、簡単に編集することができます。設定ファイルの拡張子は.cfgで/home/pi/printer_data/configの中に複数の.cfgファイルを作ることができます。klipperが起動すると最初に/home/pi/printer_data/config直下のprinter.cfgファイルを読み込みます。複数の.cfgファイルを使用する場合はprinter.cfgファイルから該当するファイルをincludeすることで使用できるようになります。

ファイル構成

TIny-Tの設定ファイルは後で見やすく、変更や追加(特にマクロ)がやりやすいようと思いましたので以下の構成にしました。

📂config/
├── printer.cfg               # includeの入口。構成ファイルを一括読み込み
├── system.cfg                # MCUや補正系の設定(z_tilt, resonance など)
├── variables.cfg             # save_variablesによりeddyのz_offsetを保存
├── 📂hardware/                 # ハードウェア構成ファイル群
│   ├── 00_board_pins.cfg     # MCUピン定義(先に読み込まれるよう00を付ける)
│   ├── machine.cfg           # モーション制御・ヒーター・ファン・LEDなど全体定義
│   └── eddy.cfg              # Eddy Probe関連の設定とマクロ
├── 📂macros/                   # 各種操作マクロ
│   ├── print_start_end.cfg   # 印刷開始・終了処理の自動化
│   ├── cold_pull.cfg         # コールドプル用マクロ(Happy Hareベース)
│   ├── common_macros.cfg     # 共通ユーティリティマクロ
│   ├── pid_tuning.cfg        # PIDチューニング補助
│   ├── resonance.cfg         # リゾナンス測定(ADXL使用)
│   ├── stepper_buzz_cycle.cfg # ステッパーの動作、回転方向の確認用
│   └── test_speed.cfg        # 移動速度、加速度のテスト用

設定ファイル

printer.cfg

printer.cfgは設定ファイルをincludeするのとpidの係数やbed_meshなどの自動保存用です。

[include hardware/*.cfg]
[include system.cfg]
[include macros/*.cfg]
[include mainsail.cfg]

include hardware/* .cfgはconfig/hardware下の.cfgファイルをすべてincludeできます。こうすることで個別にincludeする必要がなく必要なcfgファイルをhardewareディレクトリに保存するだけでincludeすることができます。(*はワイルドカードです)
includeに関してはこちらのサイトが参考になります。

hardware/00_board_pins.cfg

00_board_pins.cfgはファイル名の先頭に00をつけています。これはhardwareディレクトリ内の.cfgファイルを一括includeした場合、通常はファイル名のアルファベット順(a→z)にincludeされます。
borad_pinsはボードピンのエイリアス(別名)を設定しているので一番最初にincludeしたいために先頭に00_を付与しています。エイリアスの設定をすることでボードの変更があった場合でもこのファイル内のピン番号を変更するだけで対応できます。
TIny-Tのボードは当初Spider V2.3を使用していましたが、48Vする際にE3EZに変更しました。ホストコンピュータもRPi3B+からCM4(eMMC)に変更しています。

E3EZのPIN配置 bigtreetechより
H36 ComboのPIN配置 FYSETC WIKIより
#E3EZ
[board_pins mcu]
mcu:mcu
aliases:
    STEPPER_X_UART=PB8,
    STEPPER_X_STEP=PA14,
    STEPPER_X_DIR=PA10,
    STEPPER_X_ENABLE=PA13,

    STEPPER_Y_UART=PC9,
    STEPPER_Y_STEP=PC8,
    STEPPER_Y_DIR=PA15,
    STEPPER_Y_ENABLE=PC14,

    STEPPER_Z_UART=PD0,
    STEPPER_Z_STEP=PD2,
    STEPPER_Z_DIR=PD4,
    STEPPER_Z_ENABLE=PD3,

    STEPPER_Z1_UART=PD1,
    STEPPER_Z1_STEP=PD5,
    STEPPER_Z1_DIR=PD6,
    STEPPER_Z1_ENABLE=PB3,

    STEPPER_Z2_UART=PB5,
    STEPPER_Z2_STEP=PB7,
    STEPPER_Z2_DIR=PB6,
    STEPPER_Z2_ENABLE=PB4,
    
    spi_miso=PC11,
    spi_mosi=PC12,
    spi_sclk=PC10,

    X_ENDSTOP=PC4,
    Y_ENDSTOP=PB0,
    Z_ENDSTOP=PC6,
    
    BED_HEATER_PIN=PB2,
    HE0_PIN=PB11,
    HE1_PIN=PB10,

    THB_PIN=PA3,
    TH0_PIN=PA4,
    TH1_PIN=PA5,

    FAN0_PWM=PA8,
    FAN1_PWM=PB15,
    FAN2_PWM=PB14,
    
    RGB_PIN=PC7,

#H36 COMBO
[board_pins tool_board]
mcu:tool_board
aliases:
    STEPPER_E_UART=PC14,
    STEPPER_E_STEP=PB9,
    STEPPER_E_DIR=PB8,
    STEPPER_E_ENABLE=PB7,
    HOTEND0_PIN=PA7,
    TH_HOTEND=PA6,
    PARTS_COOLING_FAN=PA9,
    PARTS_COOLING_FAN_TACO=PC6,
    PARTS_COOLONG_FAN1=PB15,
    PARTS_COOLING_FAN1_TACO=PB14,
    HOTEND_FAN=PB13,
    HOTEND_FAN1=PA5,
    ENDSTOP0_PIN=PA10,
    ENDSTOP1_PIN=PB1,
    RGB_PIN=PA8,
    ADXL_SPI_CS=PB12,
    ADXL_SPI_SCLK=PB10,
    ADXL_SPI_MISO=PB2,
    ADXL_SPI_MOSI=PB11,

hardware/machine.cfg

モーション系・ホットエンドなど本体定義をしています。
ステッパー設定(X/Y/Z)やエクストルーダー、ヒーター、ファンなどの本体構成。従来 printer.cfg で書かれていた内容を分離し、見通しを良くしています。

まずはprinterセクションから

########################################################################################################################################################
#   8888888b.  8888888b.  8888888 888b    888 88888888888 8888888888 8888888b.
#   888   Y88b 888   Y88b   888   8888b   888     888     888        888   Y88b
#   888    888 888    888   888   88888b  888     888     888        888    888
#   888   d88P 888   d88P   888   888Y88b 888     888     8888888    888   d88P
#   8888888P"  8888888P"    888   888 Y88b888     888     888        8888888P"
#   888        888 T88b     888   888  Y88888     888     888        888 T88b
#   888        888  T88b    888   888   Y8888     888     888        888  T88b
#   888        888   T88b 8888888 888    Y888     888     8888888888 888   T88b
########################################################################################################################################################

[printer]
kinematics: corexy
max_velocity: 500   #mm/s
max_accel: 20000    #mm/s^2
minimum_cruise_ratio: 0.5
square_corner_velocity: 5.0
#max_accel_to_decel:3000    #このパラメータは設定することを推奨しません
max_z_velocity: 15
max_z_accel: 350

A/Bモータのセクション

########################################################################################################################################################
#   888888b.       888b     d888  .d88888b.  88888888888  .d88888b.  8888888b.
#   888  "88b      8888b   d8888 d88P" "Y88b     888     d88P" "Y88b 888   Y88b
#   888  .88P      88888b.d88888 888     888     888     888     888 888    888
#   8888888K.      888Y88888P888 888     888     888     888     888 888   d88P
#   888  "Y88b     888 Y888P 888 888     888     888     888     888 8888888P"
#   888    888     888  Y8P  888 888     888     888     888     888 888 T88b
#   888   d88P     888   "   888 Y88b. .d88P     888     Y88b. .d88P 888  T88b
#   8888888P"      888       888  "Y88888P"      888      "Y88888P"  888   T88b
########################################################################################################################################################

## X Stepper on Motor1(B Motor left)
#LDO-42STH48-2804AC
#resistance: 0.7Ω
#inductance: 0.0060
#holding_torque: 420mN-m
#rated_current: 2.8A/phase (2.0Arms)
#steps_per_revolution: 200

[stepper_x]
step_pin:mcu:STEPPER_X_STEP
dir_pin:mcu:STEPPER_X_DIR
enable_pin:!mcu:STEPPER_X_ENABLE
rotation_distance:40
microsteps:16
full_steps_per_rotation: 200
#gear_ratio:
#step_pulse_duration:   #TMCステッパーのデフォルトは0.000000100(100ns)
endstop_pin:tool_board:ENDSTOP0_PIN
position_min: 0
position_endstop:180
position_max:180
homing_speed: 30
homing_retract_dist: 5.0
homing_retract_speed:25
#second_homing_speed:
homing_positive_dir:true    #default is true

[tmc5160 stepper_x]
cs_pin:mcu:STEPPER_X_UART
spi_software_miso_pin: spi_miso
spi_software_mosi_pin: spi_mosi
spi_software_sclk_pin: spi_sclk
#tx_pin:
#select_pins:
interpolate: False
run_current: 2.0
#hold_current:  #保持電流は設定しないのが推奨
sense_resistor: 0.075 #TMC2209→0.110 EZ5160 PRO→0.075
#stealthchop_threshold: 999999  #spreadCycle
#coolstep_threshold:
#uart_address:
#driver_MULTISTEP_FILT: True
#driver_IHOLDDELAY: 8
#driver_TPOWERDOWN: 20
driver_TBL: 2
driver_TOFF: 2
driver_HEND: 1
driver_HSTRT: 4
#driver_PWM_AUTOGRAD: True
#driver_PWM_AUTOSCALE: True
driver_PWM_LIM: 8
driver_PWM_REG: 4
driver_PWM_FREQ: 1
driver_PWM_GRAD: 8
#driver_PWM_OFS: 36
#driver_SGTHRS: 70
#driver_SEMIN: 0
#driver_SEUP: 0
#driver_SEMAX: 0
#driver_SEDN: 0
#driver_SEIMIN: 0
#diag_pin:mcu:^STEPPER_X_DIAG  #センサレスホーミングを有効にする場合に設定


########################################################################################################################################################
#          d8888     888b     d888  .d88888b.  88888888888  .d88888b.  8888888b.
#         d88888     8888b   d8888 d88P" "Y88b     888     d88P" "Y88b 888   Y88b
#        d88P888     88888b.d88888 888     888     888     888     888 888    888
#       d88P 888     888Y88888P888 888     888     888     888     888 888   d88P
#      d88P  888     888 Y888P 888 888     888     888     888     888 8888888P"
#     d88P   888     888  Y8P  888 888     888     888     888     888 888 T88b
#    d8888888888     888   "   888 Y88b. .d88P     888     Y88b. .d88P 888  T88b
#   d88P     888     888       888  "Y88888P"      888      "Y88888P"  888   T88b
########################################################################################################################################################

## Y Stepper on Motor2 (A Motor)
#LDO-42STH48-2804AC
#resistance: 0.7Ω
#inductance: 0.0060
#holding_torque: 420mN-m
#rated_current: 2.8A/phase (2.0Arms)
#steps_per_revolution: 200

[stepper_y]
step_pin:mcu:STEPPER_Y_STEP
dir_pin:!mcu:STEPPER_Y_DIR
enable_pin:!mcu:STEPPER_Y_ENABLE
rotation_distance:40
microsteps:16
full_steps_per_rotation: 200
#gear_ratio:
#step_pulse_duration:   #TMCステッパーのデフォルトは0.000000100(100ns)
endstop_pin:^mcu:Y_ENDSTOP
position_min: 0
position_endstop:180
position_max:180
homing_speed: 30
homing_retract_dist: 5.0
homing_retract_speed:25
#second_homing_speed:
homing_positive_dir:true    #default is true

[tmc5160 stepper_y]
cs_pin:mcu:STEPPER_Y_UART
spi_software_miso_pin: spi_miso
spi_software_mosi_pin: spi_mosi
spi_software_sclk_pin: spi_sclk
#tx_pin:
#select_pins:
interpolate: False
run_current: 2.0
#hold_current:  #保持電流は設定しないのが推奨
sense_resistor: 0.075
#stealthchop_threshold: 999999  #spreadCycle
#coolstep_threshold:
#uart_address:
#driver_MULTISTEP_FILT: True
#driver_IHOLDDELAY: 8
#driver_TPOWERDOWN: 20
driver_TBL: 2
driver_TOFF: 2
driver_HEND: 1
driver_HSTRT: 4
#driver_PWM_AUTOGRAD: True
#driver_PWM_AUTOSCALE: True
driver_PWM_LIM: 8
driver_PWM_REG: 4
driver_PWM_FREQ: 1
driver_PWM_GRAD: 8
#driver_PWM_OFS: 36
#driver_SGTHRS: 0
#driver_SEMIN: 0
#driver_SEUP: 0
#driver_SEMAX: 0
#driver_SEDN: 0
#driver_SEIMIN: 0
#diag_pin:mcu:STEPPER_Y_DIAG  #センサレスホーミングを有効にする場合に設定

ピンの設定はエイリアス設定したものを使用しています。例えばstepper_xのstepにE3EZ(00_board_pins.cfgのmcu:mcu)のピンPA14を設定したい場合は[stepper_x]セクションのstepper_xに以下のように設定します。
step_pin:mcu:STEPPER_X_STEP

E3EZのエイリアス設定ではSTEPPER_X_STEP=PA14となっていますので、
step_pin:mcu:STEPPER_X_STEPはstep_pin:PA14と同様の扱いになります。

A/Bモーターは48V駆動に対応させるため、ドライバーに EZ5160(TMC5160ベース) を使用しています。
EZ5160を使用する際の注意点として、以下の点が重要です。
TMC2209 は UART 通信ですが、EZ5160 は SPI通信 なので cs_pin や spi_software_* ピンの設定が必要になります。
TMC2209の電流検出用センサ抵抗は0.110ΩですがEZ5160は0.075Ωが実装されています。TMC系ドライバーは、モーターに流す電流をsense_resistor の両端電圧から逆算して制御します。

例えば1A設定で0.075Ωだと1[A]×0.075[Ω]=0.075Vになりますが、0.110Ωだと1[A]×0.110[Ω]=0.11Vです。EZ5160ドライバーには0.075Ωが実装されていますので0.075Vで1Aと認識する必要がありますが、0.110Ωの設定だと0.11Vで1Aであると誤認識します。0.075Ωの抵抗両端の電位差が0.11Vになるためには0.11[V]/0.075[Ω]≒1.47[A]の電流が必要です。ドライバーは0.11Vになる電流値でスイッチング制御しようとしますので1A流しているつもりが1.47Aも流れてしまっているためドライバーが焼損する恐れがあり注意が必要です。

klipperのcfgファイルではTMC2209はデフォルトで0.110Ω,TMC5160は0.075Ωになっていて、sense_resistorを設定しなければデフォルト値が採用されます。
TMC5160ベースのドライバーはモノによってsense_resistorに様々な値の抵抗を採用しているので注意が必要です。

Zモータセクション

########################################################################################################################################################
#   8888888888P     888b     d888  .d88888b.  88888888888  .d88888b.  8888888b.
#         d88P      8888b   d8888 d88P" "Y88b     888     d88P" "Y88b 888   Y88b
#        d88P       88888b.d88888 888     888     888     888     888 888    888
#       d88P        888Y88888P888 888     888     888     888     888 888   d88P
#      d88P         888 Y888P 888 888     888     888     888     888 8888888P"
#     d88P          888  Y8P  888 888     888     888     888     888 888 T88b
#    d88P           888   "   888 Y88b. .d88P     888     Y88b. .d88P 888  T88b
#   d8888888888     888       888  "Y88888P"      888      "Y88888P"  888   T88b
########################################################################################################################################################

#MOON'S LE174S-T0808-200-0-S-065
#resistance: 8.7Ω
#inductance: 0.0152H
#rated_thrust:34N @300rpm
#rated_current: 0.65A/phase (0.46Arms)
#steps_per_revolution: 200
#Lead: 8mm

[stepper_z]
step_pin:mcu:STEPPER_Z_STEP
dir_pin:mcu:STEPPER_Z_DIR
enable_pin:!mcu:STEPPER_Z_ENABLE
rotation_distance:8
microsteps:32
#full_steps_per_rotation: 200
#gear_ratio:
#step_pulse_duration:   #TMCステッパーのデフォルトは0.000000100(100ns)
endstop_pin:probe:z_virtual_endstop
position_min: 0
#position_endstop:0
position_max:135
homing_speed: 30
homing_retract_dist: 3.0
homing_retract_speed:25
second_homing_speed:3
homing_positive_dir:false    #default is true


[tmc2209 stepper_z]
uart_pin:mcu:STEPPER_Z_UART
#tx_pin:
#select_pins:
interpolate: False
run_current: 0.37
#hold_current:  #保持電流は設定しないのが推奨
sense_resistor: 0.110
#stealthchop_threshold: 999999  #spreadCycle
#coolstep_threshold:
#uart_address:
#driver_MULTISTEP_FILT: True
#driver_IHOLDDELAY: 8
#driver_TPOWERDOWN: 20
#driver_TBL: 2
#driver_TOFF: 3
#driver_HEND: 0
#driver_HSTRT: 5
#driver_PWM_AUTOGRAD: True
#driver_PWM_AUTOSCALE: True
#driver_PWM_LIM: 12
#driver_PWM_REG: 8
#driver_PWM_FREQ: 1
#driver_PWM_GRAD: 14
#driver_PWM_OFS: 36
#driver_SGTHRS: 0
#driver_SEMIN: 0
#driver_SEUP: 0
#driver_SEMAX: 0
#driver_SEDN: 0
#driver_SEIMIN: 0
#diag_pin:  #センサレスホーミングを有効にする場合に設定

########################################################################################################################################################
#   8888888888P  d888       888b     d888  .d88888b.  88888888888  .d88888b.  8888888b.
#         d88P  d8888       8888b   d8888 d88P" "Y88b     888     d88P" "Y88b 888   Y88b
#        d88P     888       88888b.d88888 888     888     888     888     888 888    888
#       d88P      888       888Y88888P888 888     888     888     888     888 888   d88P
#      d88P       888       888 Y888P 888 888     888     888     888     888 8888888P"
#     d88P        888       888  Y8P  888 888     888     888     888     888 888 T88b
#    d88P         888       888   "   888 Y88b. .d88P     888     Y88b. .d88P 888  T88b
#   d8888888888 8888888     888       888  "Y88888P"      888      "Y88888P"  888   T88b
########################################################################################################################################################

[stepper_z1]
step_pin:mcu:STEPPER_Z1_STEP
dir_pin:mcu:STEPPER_Z1_DIR
enable_pin:!mcu:STEPPER_Z1_ENABLE
microsteps:32
rotation_distance:8

[tmc2209 stepper_z1]
uart_pin:mcu:STEPPER_Z1_UART
interpolate: False
run_current: 0.37
sense_resistor: 0.110

########################################################################################################################################################
#   8888888888P  .d8888b.      888b     d888  .d88888b.  88888888888  .d88888b.  8888888b.
#         d88P  d88P  Y88b     8888b   d8888 d88P" "Y88b     888     d88P" "Y88b 888   Y88b
#        d88P          888     88888b.d88888 888     888     888     888     888 888    888
#       d88P         .d88P     888Y88888P888 888     888     888     888     888 888   d88P
#      d88P      .od888P"      888 Y888P 888 888     888     888     888     888 8888888P"
#     d88P      d88P"          888  Y8P  888 888     888     888     888     888 888 T88b
#    d88P       888"           888   "   888 Y88b. .d88P     888     Y88b. .d88P 888  T88b
#   d8888888888 888888888      888       888  "Y88888P"      888      "Y88888P"  888   T88b
########################################################################################################################################################

[stepper_z2]
step_pin:mcu:STEPPER_Z2_STEP
dir_pin:!mcu:STEPPER_Z2_DIR
enable_pin:!mcu:STEPPER_Z2_ENABLE
microsteps:32
rotation_distance:8

[tmc2209 stepper_z2]
uart_pin:mcu:STEPPER_Z2_UART
interpolate: False
run_current: 0.37
sense_resistor: 0.110

ZエンドストップはEddyを使用するのでendstop_pin:probe:z_virtual_endstopとしています。

EXTRUDERセクション

#######################################################################################################################################################################################################################
#   8888888888 Y88b   d88P 88888888888 8888888b.  888     888 8888888b.  8888888888 8888888b.
#   888         Y88b d88P      888     888   Y88b 888     888 888  "Y88b 888        888   Y88b
#   888          Y88o88P       888     888    888 888     888 888    888 888        888    888
#   8888888       Y888P        888     888   d88P 888     888 888    888 8888888    888   d88P
#   888           d888b        888     8888888P"  888     888 888    888 888        8888888P"
#   888          d88888b       888     888 T88b   888     888 888    888 888        888 T88b
#   888         d88P Y88b      888     888  T88b  Y88b. .d88P 888  .d88P 888        888  T88b
#   8888888888 d88P   Y88b     888     888   T88b  "Y88888P"  8888888P"  8888888888 888   T88b
#######################################################################################################################################################################################################################

[extruder]
step_pin: tool_board: STEPPER_E_STEP
dir_pin: tool_board: STEPPER_E_DIR
enable_pin: !tool_board: STEPPER_E_ENABLE
microsteps: 16
rotation_distance: 4.637 #ORBITER V2.5
full_steps_per_rotation:200
#gear_ratio: 50:10
nozzle_diameter: 0.400
filament_diameter: 1.750
#max_extrude_cross_section:
#instantaneous_corner_velocity: 1.000
max_extrude_only_distance: 500.0
max_extrude_only_velocity: 120
#max_extrude_only_accel:
pressure_advance: 0.025  #0.025  #PETG_0.01
pressure_advance_smooth_time: 0.030 #ORBITER V2.5
heater_pin: tool_board: HOTEND0_PIN
max_power: 1.0
sensor_type: PT1000
sensor_pin: tool_board: TH_HOTEND
pullup_resistor: 2200 #J36Comboはプルアップ抵抗2.2kΩなので注意
#smooth_time: 1.0
#control: pid
#pid_Kp: 21.527
#pid_Ki: 1.063
#pid_Kd: 108.982
#pwm_cycle_time: 0.100  #デフォルトは0.1秒
min_extrude_temp: 170
min_temp: 0
max_temp: 500


[tmc2209 extruder]
uart_pin: tool_board: STEPPER_E_UART
#tx_pin:
#select_pins:
interpolate: False
run_current: 0.850
#hold_current:  #保持電流は設定しないのが推奨
#sense_resistor: 0.110
#stealthchop_threshold: 999999
#stealthchop_threshold: 999999  #spreadCycle
#coolstep_threshold:
#uart_address:
#driver_MULTISTEP_FILT: True
#driver_IHOLDDELAY: 8
#driver_TPOWERDOWN: 20
#driver_TBL: 2
#driver_TOFF: 3
#driver_HEND: 0
#driver_HSTRT: 5
#driver_PWM_AUTOGRAD: True
#driver_PWM_AUTOSCALE: True
#driver_PWM_LIM: 12
#driver_PWM_REG: 8
#driver_PWM_FREQ: 1
#driver_PWM_GRAD: 14
#driver_PWM_OFS: 36
#driver_SGTHRS: 0
#driver_SEMIN: 0
#driver_SEUP: 0
#driver_SEMAX: 0
#driver_SEDN: 0
#driver_SEIMIN: 0
#diag_pin:  #センサレスホーミングを有効にする場合に設定

EXTRUDERセクションでは測温抵抗体PT1000のプルアップ抵抗をデフォルトの4700から2200に変更しています。
H36 COMBOはプルアップ抵抗に2200Ωが使用されていますので2200を設定します。

Heater Bedセクション

########################################################################################################################################################
#   888    888 8888888888        d8888 88888888888 8888888888 8888888b.      888888b.   8888888888 8888888b.
#   888    888 888              d88888     888     888        888   Y88b     888  "88b  888        888  "Y88b
#   888    888 888             d88P888     888     888        888    888     888  .88P  888        888    888
#   8888888888 8888888        d88P 888     888     8888888    888   d88P     8888888K.  8888888    888    888
#   888    888 888           d88P  888     888     888        8888888P"      888  "Y88b 888        888    888
#   888    888 888          d88P   888     888     888        888 T88b       888    888 888        888    888
#   888    888 888         d8888888888     888     888        888  T88b      888   d88P 888        888  .d88P
#   888    888 8888888888 d88P     888     888     8888888888 888   T88b     8888888P"  8888888888 8888888P"
########################################################################################################################################################
[heater_bed]
heater_pin:mcu:BED_HEATER_PIN
max_power: 1.0
sensor_type:Generic 3950
sensor_pin:mcu:THB_PIN
#PIDチューニングしたら以下はコメントアウトした後でSAVE_CONFIGする
#############################################################
#control:pid
#pid_kp: 58.437
#pid_ki: 2.347
#pid_kd: 363.769
#############################################################

#pwm_cycle_time: 0.100  #デフォルトは0.1秒
min_temp:0
max_temp:120


コメントにもあるようにPIDチューニング後にsave_configしようとするとエラーになります。これはこのセクションがprinter.cfgにないために起きるので、コメントの通りPIDチューニング実施後にコメントアウトしてからsave_configするかprinter.cfgファイルに[heater_bed]セクションを追加で設けて、controlからpid_kdの部分だけprinter.cfgのほうに書くことで対処できます.

part_fanセクション

########################################################################################################################################################
#   8888888b.         d8888 8888888b.  88888888888  .d8888b.      8888888888        d8888 888b    888
#   888   Y88b       d88888 888   Y88b     888     d88P  Y88b     888              d88888 8888b   888
#   888    888      d88P888 888    888     888     Y88b.          888             d88P888 88888b  888
#   888   d88P     d88P 888 888   d88P     888      "Y888b.       8888888        d88P 888 888Y88b 888
#   8888888P"     d88P  888 8888888P"      888         "Y88b.     888           d88P  888 888 Y88b888
#   888          d88P   888 888 T88b       888           "888     888          d88P   888 888  Y88888
#   888         d8888888888 888  T88b      888     Y88b  d88P     888         d8888888888 888   Y8888
#   888        d88P     888 888   T88b     888      "Y8888P"      888        d88P     888 888    Y888
########################################################################################################################################################

#マルチピン設定をしてパーツファン出力を2つのポートに出す
#マルチピンを使用するセクションより上に書くこと
[multi_pin part_cooling_fans]
pins: tool_board: PARTS_COOLING_FAN, tool_board: PARTS_COOLONG_FAN1

[fan]
pin= multi_pin:part_cooling_fans 

H36 Comboには4つのファンポートがあるため、パーツ冷却用のファンを2つ別々のポートに接続することができます。
従来のツールボードではポート数が足りず、複数のファンを1つのコネクタにまとめて圧着する必要がありましたが、H36 Comboならそれぞれのファンに独立したポートが使えるため、より確実で安全な配線が可能です。

ただし、このように2つのファンをパーツ冷却用として同時に使いたい場合は、両方のファンポートが同じ動作をするように設定してあげる必要があります。
そのために multi_pin 機能を使います。

ここで重要なのは、multi_pin の定義が fan セクションより先に読み込まれる必要があるということです。
そうでないと、Klipperは multi_pin 名が未定義としてエラーになります。

その他のセクション

[heater_fan heatbreak_cooling_fan]
pin: tool_board: HOTEND_FAN
max_power: 1.0

[controller_fan stepper_fan]
pin:mcu:FAN0_PWM
shutdown_speed:1.0
stepper: stepper_x,stepper_y

[fan_generic nevergrater]
pin:mcu:FAN1_PWM

[temperature_sensor RPi_temp]
sensor_type: temperature_host
min_temp:0
max_temp:100

[temperature_sensor H36_temp]
sensor_type: temperature_mcu
sensor_mcu: tool_board

[adxl345]
cs_pin: tool_board:ADXL_SPI_CS
spi_software_sclk_pin: tool_board:ADXL_SPI_SCLK
spi_software_mosi_pin: tool_board:ADXL_SPI_MOSI
spi_software_miso_pin: tool_board:ADXL_SPI_MISO
axes_map: -y,z,-x

[neopixel daylight]
pin:mcu:RGB_PIN
chain_count: 20
color_order: GRB
initial_RED: 0.2
initial_GREEN: 0.2
initial_BLUE: 0.2

[neopixel dragon_burner]
pin:tool_board:RGB_PIN
chain_count: 3
color_order: GRB
initial_RED: 0.2
initial_GREEN: 0.2
initial_BLUE: 0.2

その他のセクションではファンや温度センサー,LEDなどを設定しています。
stepper_fanセクションではA/Bモータドライバーがアクティブになっているときにファンが回るように設定しています。A/Bモータドライバーの電流設定が2Aと高めなのでファンで冷却しないと温度以上で停止してしまうためです.

hardware/eddy.cfg

eddy.cfgはBTTの公式にあるcfgファイルをベースにベッドサイズに合わせた変更をします。

[probe_eddy_current btt_eddy]
sensor_type: ldc1612
z_offset: 2.5
i2c_mcu: eddy
i2c_bus: i2c0f
x_offset: 0
y_offset: 30.0

[bed_mesh]
horizontal_move_z: 2
speed: 200
mesh_min: 30, 30
mesh_max: 150, 150
probe_count: 9, 9
algorithm: bicubic

[safe_z_home]
home_xy_position: 90, 90
z_hop: 10
z_hop_speed: 25
speed: 200


[save_variables]
filename: ~/printer_data/config/variables.cfg



[gcode_macro BED_MESH_CALIBRATE]
rename_existing: BTT_BED_MESH_CALIBRATE
gcode:
  BTT_BED_MESH_CALIBRATE METHOD=rapid_scan
  

私が変更した部分だけ載せておきます。セクションsave_variablesでz_offsetの値を保存するファイルを指定しています。

system.cfg

主にシステム全体に関わる定義をまとめています。
・複数のMCU(E3EZ, H36 Combo, Eddy Duo)をCAN接続
・各種補正機能(resonance_tester, skew_correction, exclude_object, gcode_arcs, z_tilt)
・idle_timeoutやresonance測定、Input Shaperの設定

########################################################################################################################################################
#   888b     d888  .d8888b.  888     888
#   8888b   d8888 d88P  Y88b 888     888
#   88888b.d88888 888    888 888     888
#   888Y88888P888 888        888     888
#   888 Y888P 888 888        888     888
#   888  Y8P  888 888    888 888     888
#   888   "   888 Y88b  d88P Y88b. .d88P
#   888       888  "Y8888P"   "Y88888P"
#######################################################################################################################################################
#ホストコンピュータと接続するmcuを設定します。

[mcu]
#BTT MANTA E3EZ
canbus_uuid:0f27be7e5f51
canbus_interface:can0

[mcu tool_board]
#FYSTECT H36 COMBO
canbus_uuid:c2261b06834f
canbus_interface:can0

[mcu eddy]
#BTT eddy duo
canbus_uuid:6604bf47e2cf
canbus_interface:can0


########################################################################################################################################################
#   8888888 8888888b.  888      8888888888     88888888888 8888888 888b     d888 8888888888  .d88888b.  888     888 88888888888
#     888   888  "Y88b 888      888                888       888   8888b   d8888 888        d88P" "Y88b 888     888     888
#     888   888    888 888      888                888       888   88888b.d88888 888        888     888 888     888     888
#     888   888    888 888      8888888            888       888   888Y88888P888 8888888    888     888 888     888     888
#     888   888    888 888      888                888       888   888 Y888P 888 888        888     888 888     888     888
#     888   888    888 888      888                888       888   888  Y8P  888 888        888     888 888     888     888
#     888   888  .d88P 888      888                888       888   888   "   888 888        Y88b. .d88P Y88b. .d88P     888
#   8888888 8888888P"  88888888 8888888888         888     8888888 888       888 8888888888  "Y88888P"   "Y88888P"      888
########################################################################################################################################################
[idle_timeout]
gcode:
   TURN_OFF_HEATERS
   M84             ; disable steppers
timeout: 3600

########################################################################################################################################################
#   8888888b.  8888888888  .d8888b.   .d88888b.  888b    888        d8888 888b    888  .d8888b.  8888888888     88888888888 8888888888  .d8888b.  88888888888 8888888888 8888888b.
#   888   Y88b 888        d88P  Y88b d88P" "Y88b 8888b   888       d88888 8888b   888 d88P  Y88b 888                888     888        d88P  Y88b     888     888        888   Y88b
#   888    888 888        Y88b.      888     888 88888b  888      d88P888 88888b  888 888    888 888                888     888        Y88b.          888     888        888    888
#   888   d88P 8888888     "Y888b.   888     888 888Y88b 888     d88P 888 888Y88b 888 888        8888888            888     8888888     "Y888b.       888     8888888    888   d88P
#   8888888P"  888            "Y88b. 888     888 888 Y88b888    d88P  888 888 Y88b888 888        888                888     888            "Y88b.     888     888        8888888P"
#   888 T88b   888              "888 888     888 888  Y88888   d88P   888 888  Y88888 888    888 888                888     888              "888     888     888        888 T88b
#   888  T88b  888        Y88b  d88P Y88b. .d88P 888   Y8888  d8888888888 888   Y8888 Y88b  d88P 888                888     888        Y88b  d88P     888     888        888  T88b
#   888   T88b 8888888888  "Y8888P"   "Y88888P"  888    Y888 d88P     888 888    Y888  "Y8888P"  8888888888         888     8888888888  "Y8888P"      888     8888888888 888   T88b
########################################################################################################################################################

#probe_points:
#accel_chip:
#accel_chip_x:
#accel_chip_y
#max_smoothing:
#move_speed:
#min_freq:
#max_freq:
#accel_per_hz:
#hz_per_sec:
#sweeping_accel:
#sweeping_period:

[resonance_tester]
accel_chip: adxl345
probe_points:
    90,90,30

########################################################################################################################################################
#   8888888 888b    888 8888888b.  888     888 88888888888      .d8888b.  888    888        d8888 8888888b.  8888888888 8888888b.
#     888   8888b   888 888   Y88b 888     888     888         d88P  Y88b 888    888       d88888 888   Y88b 888        888   Y88b
#     888   88888b  888 888    888 888     888     888         Y88b.      888    888      d88P888 888    888 888        888    888
#     888   888Y88b 888 888   d88P 888     888     888          "Y888b.   8888888888     d88P 888 888   d88P 8888888    888   d88P
#     888   888 Y88b888 8888888P"  888     888     888             "Y88b. 888    888    d88P  888 8888888P"  888        8888888P"
#     888   888  Y88888 888        888     888     888               "888 888    888   d88P   888 888        888        888 T88b
#     888   888   Y8888 888        Y88b. .d88P     888         Y88b  d88P 888    888  d8888888888 888        888        888  T88b
#   8888888 888    Y888 888         "Y88888P"      888          "Y8888P"  888    888 d88P     888 888        8888888888 888   T88b
########################################################################################################################################################

#[input_shaper]
#shaper_freq_x: 66.8
#shaper_type_x: mzv
#shaper_freq_y: 50.0
#shaper_type_y: mzv
#SHAPER_CALIBRATE後にsave_configするとprinter.cfgに自動保存されます。


########################################################################################################################################################
#    .d8888b.   .d8888b.   .d88888b.  8888888b.  8888888888            d8888 8888888b.   .d8888b.   .d8888b.
#   d88P  Y88b d88P  Y88b d88P" "Y88b 888  "Y88b 888                  d88888 888   Y88b d88P  Y88b d88P  Y88b
#   888    888 888    888 888     888 888    888 888                 d88P888 888    888 888    888 Y88b.
#   888        888        888     888 888    888 8888888            d88P 888 888   d88P 888         "Y888b.
#   888  88888 888        888     888 888    888 888               d88P  888 8888888P"  888            "Y88b.
#   888    888 888    888 888     888 888    888 888              d88P   888 888 T88b   888    888       "888
#   Y88b  d88P Y88b  d88P Y88b. .d88P 888  .d88P 888             d8888888888 888  T88b  Y88b  d88P Y88b  d88P
#    "Y8888P88  "Y8888P"   "Y88888P"  8888888P"  8888888888     d88P     888 888   T88b  "Y8888P"   "Y8888P"
########################################################################################################################################################
[gcode_arcs]
resolution: 0.1

########################################################################################################################################################
#   8888888888 Y88b   d88P  .d8888b.  888      888     888 8888888b.  8888888888      .d88888b.  888888b.     888888 8888888888  .d8888b.  88888888888
#   888         Y88b d88P  d88P  Y88b 888      888     888 888  "Y88b 888            d88P" "Y88b 888  "88b      "88b 888        d88P  Y88b     888
#   888          Y88o88P   888    888 888      888     888 888    888 888            888     888 888  .88P       888 888        888    888     888
#   8888888       Y888P    888        888      888     888 888    888 8888888        888     888 8888888K.       888 8888888    888            888
#   888           d888b    888        888      888     888 888    888 888            888     888 888  "Y88b      888 888        888            888
#   888          d88888b   888    888 888      888     888 888    888 888            888     888 888    888      888 888        888    888     888
#   888         d88P Y88b  Y88b  d88P 888      Y88b. .d88P 888  .d88P 888            Y88b. .d88P 888   d88P      88P 888        Y88b  d88P     888
#   8888888888 d88P   Y88b  "Y8888P"  88888888  "Y88888P"  8888888P"  8888888888      "Y88888P"  8888888P"       888 8888888888  "Y8888P"      888
#                                                                                                              .d88P
#                                                                                                            .d88P"
#                                                                                                           888P"
########################################################################################################################################################
#複数のオブジェクトをプリント中にプリント失敗したオブジェクトを以降プリントしないようにできます。
#moonraker.confに以下を記述しておく必要があります。

#[file_manager]
#enable_object_processing:true

#この記述はadaptive mesh使用時にも必要になります
[exclude_object]

########################################################################################################################################################
#   8888888888P     88888888888 8888888 888      88888888888
#         d88P          888       888   888          888
#        d88P           888       888   888          888
#       d88P            888       888   888          888
#      d88P             888       888   888          888
#     d88P              888       888   888          888
#    d88P               888       888   888          888
#   d8888888888         888     8888888 88888888     888
########################################################################################################################################################
#Zステッパーが複数ある場合にベッドの傾斜を調整することができます。
#このセクション[z_tilt]が存在する場合はZ_TILT_ADJUSTコマンドが使用できるようになります。

#z_positions:
#各zステッパーのピボットポイントを示すX,Y座標を設定します。
#ピボットポイントはベッドが特定のzステッパーと接続されている点のことです。
#ノズル座標がそのポイントに到達できると仮定した場合の座標を設定します。
#1行目がstepper_z,2行目がstepper_z1,3行目がstepper_z2に対応します。
#設定が必須です

#points
#Z_TILT_ADJUSTコマンド実行中にプローブされるX,Y座標のリストです。
#1行に1つの座標を設定します。
#設定が必須です

#speed
#Z_TILT_ADJUST実行中のプローブしないときの移動速度をmm/sで設定します。
#デフォルトは50です。
#設定しない場合は50mm/sになります

#horizontal_mode_z
#ツールヘッドが移動するときのz高さ(mm)です。
#デフォルトは5です。
#設定しない場合は5mmになります

#retries
#プローブしたポイントが許容差内に入らないときにリトライする回数です


#retry_tolerance
#retriesが有効になっている場合にプローブされた点で最大と最小のポイント差が
#この値より大きい場合にリトライします。変更の最小単位は1ステップです。
#1.8度、マイクロステップ32,リード8mmの台形ねじの場合は8/200/32=0.00125

[z_tilt]
z_positions:
    -50, 18
    90, 228
    230, 18
points:
    30, 5
    90, 125
    150, 5

speed: 200
horizontal_move_z: 10
retries: 5
retry_tolerance: 0.0075

########################################################################################################################################################
#    .d8888b.         d8888 8888888888 8888888888     8888888888P     888    888  .d88888b.  888b     d888 8888888888
#   d88P  Y88b       d88888 888        888                  d88P      888    888 d88P" "Y88b 8888b   d8888 888
#   Y88b.           d88P888 888        888                 d88P       888    888 888     888 88888b.d88888 888
#    "Y888b.       d88P 888 8888888    8888888            d88P        8888888888 888     888 888Y88888P888 8888888
#       "Y88b.    d88P  888 888        888               d88P         888    888 888     888 888 Y888P 888 888
#         "888   d88P   888 888        888              d88P          888    888 888     888 888  Y8P  888 888
#   Y88b  d88P  d8888888888 888        888             d88P           888    888 Y88b. .d88P 888   "   888 888
#    "Y8888P"  d88P     888 888        8888888888     d8888888888     888    888  "Y88888P"  888       888 8888888888
########################################################################################################################################################
#[safe_z_home]
#eddy.cfg参照


########################################################################################################################################################
#888888b.   8888888888 8888888b.      888b     d888 8888888888  .d8888b.  888    888
#888  "88b  888        888  "Y88b     8888b   d8888 888        d88P  Y88b 888    888
#888  .88P  888        888    888     88888b.d88888 888        Y88b.      888    888
#8888888K.  8888888    888    888     888Y88888P888 8888888     "Y888b.   8888888888
#888  "Y88b 888        888    888     888 Y888P 888 888            "Y88b. 888    888
#888    888 888        888    888     888  Y8P  888 888              "888 888    888
#888   d88P 888        888  .d88P     888   "   888 888        Y88b  d88P 888    888
#8888888P"  8888888888 8888888P"      888       888 8888888888  "Y8888P"  888    888
########################################################################################################################################################
#[bed_mesh]
#eddy.cfg参照

########################################################################################################################################################
#   8888888888  .d88888b.  8888888b.   .d8888b.  8888888888     888b     d888  .d88888b.  888     888 8888888888
#   888        d88P" "Y88b 888   Y88b d88P  Y88b 888            8888b   d8888 d88P" "Y88b 888     888 888
#   888        888     888 888    888 888    888 888            88888b.d88888 888     888 888     888 888
#   8888888    888     888 888   d88P 888        8888888        888Y88888P888 888     888 Y88b   d88P 8888888
#   888        888     888 8888888P"  888        888            888 Y888P 888 888     888  Y88b d88P  888
#   888        888     888 888 T88b   888    888 888            888  Y8P  888 888     888   Y88o88P   888
#   888        Y88b. .d88P 888  T88b  Y88b  d88P 888            888   "   888 Y88b. .d88P    Y888P    888
#   888         "Y88888P"  888   T88b  "Y8888P"  8888888888     888       888  "Y88888P"      Y8P     8888888888
########################################################################################################################################################
#[force_move]
#eddy.cfg参照


########################################################################################################################################################
#    .d8888b.  888    d8P  8888888888 888       888
#   d88P  Y88b 888   d8P   888        888   o   888
#   Y88b.      888  d8P    888        888  d8b  888
#    "Y888b.   888d88K     8888888    888 d888b 888
#       "Y88b. 8888888b    888        888d88888b888
#         "888 888  Y88b   888        88888P Y88888
#   Y88b  d88P 888   Y88b  888        8888P   Y8888
#    "Y8888P"  888    Y88b 8888888888 888P     Y888
########################################################################################################################################################

#歪み補正をします。
#このセクションが有効になっている場合にSET_SKEWコマンドが使用可能になります。

#補正の仕方
#1.skew調整するモデルをダウンロードしてプリントします。
#2.プリントしたモデルの寸法を測定します
#3.コンソールでSET_SKEW XY=[ACの長さmm],[BDの長さmm],[ADの長さmm] XZ=[ACの長さmm],[BDの長さmm],[ADの長さmm] YZ=[ACの長さmm],[BDの長さmm],[ADの長さmm]を入力します
#  ひとつの平面のみの測定値でも設定可能です。その場合は指定していない面の補正は現在の値を保持します
#4.コンソールでSKEW_PROFILE SAVE=<プロファイル名>を実行してプロファイルを保存します。プロファイルはprinter.cfgの下部に保存されます。
#5.プリント開始時のマクロにSKEW_PROFILE LOAD=<プロファイル名>を追加します。
#6.プリント終了時のマクロにSET_SKEW CLEAR=1を追加します。
#注意 SKEWプロファイルの読み込みはプリント開始直前にしてください。ホームポジションへの移動やパージラインをプリントする場合に
#skew補正が有効になっていると移動可能範囲外への移動指令が発生する恐れがありこの場合プリントが停止してしまいます。
#また、プリント完了時にはskew補正をクリアするようにしてください。
[skew_correction]

macros/print_start_end.cfg

このファイルには2つのマクロが含まれています
・PRINT_START: スライサーのスタートGコードで呼び出すことで、印刷開始前の準備を一括で実行
・PRINT_END: 印刷完了後にヒータやファンを停止します。印刷完了5分後には庫内フィルターの運転を停止します。

これらのマクロを使用するにはスライサーのプリンター開始G-codeにPRINT_START EXTRUDER_TEMP={first_layer_temperature[0]} BED_TEMP={first_layer_bed_temperature[0]}
プリンター終了G-codeにPRINT_END
と書いておきます。(Orcaスライサーの場合)

[gcode_macro PRINT_START]
#   Use PRINT_START for the slicer starting script - please customise for your slicer of choice
gcode:
    G92 E0
    BED_MESH_CLEAR
    SET_SKEW CLEAR=1
    {% set BED_TEMP = params.BED_TEMP|default(100)|float %}
    {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(250)|float %}
    #M117 Heating...
    M118 Heating BED { printer.heater_bed.temperature }/{ BED_TEMP }
    LED_Turn_Red
    M140 S{BED_TEMP}                ; ベッド温度セット
    M104 S{EXTRUDER_TEMP - 100}     ; ホットエンド1段目 1stレイヤ設定値から-100℃
    M190 S{BED_TEMP}                ; ベッド1stレイヤ温度到達待機

    # ベッド温度が目標に到達したらフィルターをオン
    M118 Bed reached target temperature. Turning on the filter.
    FILTER_ON
    LED_Turn_White
    G4 P500
    G90
    #M117 Homing
    M118 Homing
    G28
    #M117 Z_TILT_ADJUST
    M118 Z_TILT_ADJUST
    Z_TILT_ADJUST
    #M117 Homing
    M118 Homing
    G28
    #M117 BED MESH CALIBRATE
    M118 BED MESH CALIBRATE
    BED_MESH_CALIBRATE              ; ベッドメッシュ eddyのrapid scanなのでアダプティブメッシュはしなくても十分速い。
    G0 Z20 F3000                    ; 念のためノズル上げとく
    G0 X170 Y170 Z30 F3000          ; 右奥に移動
    M109 S{EXTRUDER_TEMP}           ; ホットエンドの温度が設定値になるまで待機
    G0 X20 Y4 F10000                ; X-Yをパージライン開始位置に移動
    G0 Z0.4                         ; Zを0.4に移動
    G91
    G1 X100 E20 F1000                                # パージライン引く
    SKEW_PROFILE LOAD=my_skew_profile                # skewを設定
    G90                                              # Absolut position
    M117 Printing...

[gcode_macro PRINT_END]
gcode:  
    G92 E0                         ; エクストルーダクリア
    G1 E-2 F3600                   ; フィラメントリトラクト
    G91                            ; 相対位置
    G0 Z1.00 X20.0 Y20.0 F10000    ; move nozzle to remove stringing
    TURN_OFF_HEATERS
    G0 Z2 F3000                    ; move nozzle up 2mm
    G90                            ; 絶対位置
    G0 X175 Y175 F6000             ; X175,Y175に移動
    M140 S0                        ; ベッド温度を0に設定
    M104 S0                        ; ホットエンド温度を0に設定
    M106 S0                        ; パーツファンを停止
    M84                            ; モータをオフ
    SET_SKEW CLEAR=1              ; skewをクリア
    BED_MESH_CLEAR
    M220 S100                      ; 送り速度を100%にセット
    M221 S100                      ; フローを100%にセット
    # フィルターを5分後にオフ
    M118 Filter will turn off in 5 minutes.
    UPDATE_DELAYED_GCODE ID=delayed_filter_off DURATION=300
    #M117  Finished
    M118 Finished

skewの設定はプリント開始直前に実行します。これはskewの設定値次第ではhomingやパージを行う際に、移動限界位置を超える座標を指定してしまうことによるエラーを防止するためです。プリント完了時にはskewの設定をクリアしておきます。
プリント完了5分後に庫内フィルターを停止させるようにDELAYED_GCODEを使用しています。

macros/cold_pull.cfg

cold_pull.cfg は、ノズルの詰まりや内部の焦げを取り除く「コールドプル」を自動で行うマクロです。Happy Hare のアイデアをベースに、独自コマンドを使わず汎用的に使えるよう再設計されています。PLAやPETGなどのマテリアルを指定するだけで、それに最適な温度で押出し→冷却→再加熱→引き抜きを実行します。引き抜き時はklipper screenに>>>>> PULL NOW <<<<< と表示されるのでエクストルーダの引き戻し速度に合わせて人手でまっすぐフィラメントを引き抜きます。メンテナンスの定番としておすすめです。

[gcode_macro COLD_PULL]
description: Guide you through the process of cleaning your extruder with a cold pull
gcode:
    {% set material = params.MATERIAL|default("pla")|string|upper %}
    {% set materials = {
        'NYLON': {'hot_temp': 260, 'cold_temp': 50, 'pull_temp': 120, 'min_extrude_temp': 190},
        'PLA':   {'hot_temp': 250, 'cold_temp': 45, 'pull_temp': 100, 'min_extrude_temp': 160},
        'ABS':   {'hot_temp': 255, 'cold_temp': 50, 'pull_temp': 120, 'min_extrude_temp': 190},
        'PETG':  {'hot_temp': 250, 'cold_temp': 45, 'pull_temp': 100, 'min_extrude_temp': 180}
    } %}
    {% if material not in materials %}
        {action_raise_error("Unknown material. Valid types are: Nylon, ABS, PLA, PETG")}
    {% endif %}

    {% set hot_temp = params.HOT_TEMP|default('')|int %}
    {% set cold_temp = params.COLD_TEMP|default('')|int %}
    {% set pull_temp = params.PULL_TEMP|default('')|int %}
    {% set min_extrude_temp = params.MIN_EXTRUDE_TEMP|default('')|int %}
    {% set hot_temp = (hot_temp if hot_temp > 0 else materials.get(material).hot_temp)|int %}
    {% set cold_temp = (cold_temp if cold_temp > 0 else materials.get(material).cold_temp)|int %}
    {% set pull_temp = (pull_temp if pull_temp > 0 else materials.get(material).pull_temp)|int %}
    {% set min_extrude_temp = (min_extrude_temp if min_extrude_temp > 0 else materials.get(material).min_extrude_temp)|int %}

    {% set pull_speed = params.PULL_SPEED|default(10)|int %}
    {% set clean_length = params.CLEAN_LENGTH|default(25)|int %}
    {% set extrude_speed = params.EXTRUDE_SPEED|default(1.5)|float %}

    {% set ns = namespace(stuff_points=[], cool_points=[]) %}

    {% for temp in range(hot_temp + 1, cold_temp - 1, -1) %}
        {% if temp % 10 == 0 %}
            {% if temp > min_extrude_temp %}
                {% set ns.stuff_points = ns.stuff_points + [temp] %}
            {% elif temp < min_extrude_temp %}
                {% set ns.cool_points = ns.cool_points + [temp] %}
            {% endif %}
        {% endif %}
    {% endfor %}

    G90 ; 絶対位置モード
    M83 ; エクストルーダー相対位置モード
    G92 E0 ; エクストルーダー位置を0にリセット

    M118 Heating extruder to {hot_temp}
    SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={hot_temp}
    TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={hot_temp - 2} MAXIMUM={hot_temp + 2}

    FORCE_MOVE STEPPER=extruder DISTANCE={clean_length} VELOCITY={extrude_speed}

    M118 Allowing extruder to cool
    SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={cold_temp}
    M106 S255			#パーツファンを回して早く冷却する

    # 押出可能な温度内のときは10℃下がるごとに1mm押し出す
    {% for temp in ns.stuff_points %}
        TEMPERATURE_WAIT SENSOR="extruder" MAXIMUM={temp}
        FORCE_MOVE STEPPER=extruder DISTANCE=1 VELOCITY={extrude_speed}
    {% endfor %}

    # Give some feedback on cooling process
    M117 Waiting for extruder to completely cool to {cold_temp}
    {% for temp in ns.cool_points %}
        TEMPERATURE_WAIT SENSOR="extruder" MAXIMUM={temp}
        M118 Nozzle at {temp}
    {% endfor %}
    TEMPERATURE_WAIT SENSOR="extruder" MAXIMUM={cold_temp}

    # コールドプルする温度まで再加熱
    M107			#パーツファンを停止
    M118 Re-warming extruder to {pull_temp}
    SET_HEATER_TEMPERATURE HEATER="extruder" TARGET={pull_temp}

    # PULL NOWが表示されたらフィラメントをゆっくり引っ張ります
    TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={pull_temp - 10}
    M118 Get ready to pull...
    TEMPERATURE_WAIT SENSOR="extruder" MINIMUM={pull_temp}
    M118 >>>>> PULL NOW <<<<<

    # コールドプルします。フィラメントをつかんでまっすぐ引っ張ってください。モータは150mmリトラクトします
    FORCE_MOVE STEPPER=extruder DISTANCE=-150 VELOCITY={pull_speed}
    M118 Cold pull is successful if you can see the shape of the nozzle at the filament end
    SET_HEATER_TEMPERATURE HEATER="extruder"    #エクストルーダ温度を下げる

macros/common_macros.cfg

このファイルには、プリント中や終了後の動作を簡単に制御するためのマクロがいくつか定義されています。

########################################################################################################################################################
#    .d8888b.   .d8888b.   .d8888b.
#   d88P  Y88b d88P  Y88b d88P  Y88b
#   888    888        888 Y88b. d88P
#   888             .d88P  "Y88888"
#   888  88888  .od888P"  .d8P""Y8b.
#   888    888 d88P"      888    888
#   Y88b  d88P 888"       Y88b  d88P
#    "Y8888P88 888888888   "Y8888P"
########################################################################################################################################################
#eddy.cfg参照


########################################################################################################################################################
#   888888b.   8888888888 8888888b.      888b     d888 8888888888  .d8888b.  888    888      .d8888b.         d8888 888      8888888 888888b.   8888888b.         d8888 88888888888 8888888888
#   888  "88b  888        888  "Y88b     8888b   d8888 888        d88P  Y88b 888    888     d88P  Y88b       d88888 888        888   888  "88b  888   Y88b       d88888     888     888
#   888  .88P  888        888    888     88888b.d88888 888        Y88b.      888    888     888    888      d88P888 888        888   888  .88P  888    888      d88P888     888     888
#   8888888K.  8888888    888    888     888Y88888P888 8888888     "Y888b.   8888888888     888            d88P 888 888        888   8888888K.  888   d88P     d88P 888     888     8888888
#   888  "Y88b 888        888    888     888 Y888P 888 888            "Y88b. 888    888     888           d88P  888 888        888   888  "Y88b 8888888P"     d88P  888     888     888
#   888    888 888        888    888     888  Y8P  888 888              "888 888    888     888    888   d88P   888 888        888   888    888 888 T88b     d88P   888     888     888
#   888   d88P 888        888  .d88P     888   "   888 888        Y88b  d88P 888    888     Y88b  d88P  d8888888888 888        888   888   d88P 888  T88b   d8888888888     888     888
#   8888888P"  8888888888 8888888P"      888       888 8888888888  "Y8888P"  888    888      "Y8888P"  d88P     888 88888888 8888888 8888888P"  888   T88b d88P     888     888     8888888888
########################################################################################################################################################
#eddy.cfg参照


########################################################################################################################################################
#   8888888b.  8888888  .d8888b.         d8888 888888b.   888      8888888888      .d8888b.  88888888888 8888888888 8888888b.  8888888b.  8888888888 8888888b.
#   888  "Y88b   888   d88P  Y88b       d88888 888  "88b  888      888            d88P  Y88b     888     888        888   Y88b 888   Y88b 888        888   Y88b
#   888    888   888   Y88b.           d88P888 888  .88P  888      888            Y88b.          888     888        888    888 888    888 888        888    888
#   888    888   888    "Y888b.       d88P 888 8888888K.  888      8888888         "Y888b.       888     8888888    888   d88P 888   d88P 8888888    888   d88P
#   888    888   888       "Y88b.    d88P  888 888  "Y88b 888      888                "Y88b.     888     888        8888888P"  8888888P"  888        8888888P"
#   888    888   888         "888   d88P   888 888    888 888      888                  "888     888     888        888        888        888        888 T88b
#   888  .d88P   888   Y88b  d88P  d8888888888 888   d88P 888      888            Y88b  d88P     888     888        888        888        888        888  T88b
#   8888888P"  8888888  "Y8888P"  d88P     888 8888888P"  88888888 8888888888      "Y8888P"      888     8888888888 888        888        8888888888 888   T88b
########################################################################################################################################################
[gcode_macro Disable_Steppers]
gcode:
    M84


[gcode_macro Filter_on]
gcode: 
	SET_FAN_SPEED FAN=nevergrater SPEED=1

[gcode_macro Filter_off]
gcode: 
	SET_FAN_SPEED FAN=nevergrater SPEED=0

[delayed_gcode delayed_filter_off]
gcode:
    SET_FAN_SPEED FAN=nevergrater SPEED=0

[gcode_macro LED_Turn_Red]
gcode:
    SET_LED LED=daylight GREEN=0.0 RED=0.2 BLUE=0.0

[gcode_macro LED_Turn_White]
gcode:
    SET_LED LED=daylight GREEN=0.2 RED=0.2 BLUE=0.2

[gcode_macro LED_Turn_Bule]
gcode:
    SET_LED LED=daylight GREEN=0.0 RED=0.0 BLUE=0.2

[gcode_macro LED_Turn_Off]
gcode:
    SET_LED LED=daylight GREEN=0.0 RED=0.0 BLUE=0.0

macros/pid_tuning.cfg

このマクロはDemon klipperに使われているマクロをほぼそのまま使用しています。

########################################################################################################################################################
#   8888888b.  8888888 8888888b.      88888888888 888     888 888b    888 8888888 888b    888  .d8888b.
#   888   Y88b   888   888  "Y88b         888     888     888 8888b   888   888   8888b   888 d88P  Y88b
#   888    888   888   888    888         888     888     888 88888b  888   888   88888b  888 888    888
#   888   d88P   888   888    888         888     888     888 888Y88b 888   888   888Y88b 888 888
#   8888888P"    888   888    888         888     888     888 888 Y88b888   888   888 Y88b888 888  88888
#   888          888   888    888         888     888     888 888  Y88888   888   888  Y88888 888    888
#   888          888   888  .d88P         888     Y88b. .d88P 888   Y8888   888   888   Y8888 Y88b  d88P
#   888        8888888 8888888P"          888      "Y88888P"  888    Y888 8888888 888    Y888  "Y8888P88
########################################################################################################################################################
#エクストルーダとベッドのヒータのPIDチューニングをするマクロです。
#チューニング完了後SAVE_CONFIGしてください

[gcode_macro PID_Tune_Mode_FULL]
gcode: 
  {% set noz_temp = params.NOZZLE_TARGET|default(200)|int %} #<<<<<<<<<<<<<<<<<<< Edit default nozzle test temp (200)
  {% set bed_temp = params.BED_TARGET|default(60)|int %} #<<<<<<<<<<<<<<<<<<<< Edit default bed test temp (60)
  {% set x_park = printer.toolhead.axis_maximum.x|float / 2 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float / 2 %}
   
   G90 #絶対位置指定モード

   M117 Hotend AND Bed PID Tune Mode! Long Test!
   M118 Hotend AND Bed PID Tune Mode! Long Test!

  {% if "xyz" not in printer.toolhead.homed_axes %}
     G28
  {% endif %}    

    M400
    G0 X{x_park} Y{y_park} Z5 F9000                    #ツールヘッドをベッド中央に移動
    M106 S155                                          #ファンを60%に設定                

    M117 EXTRUDER PID TUNE! PLEASE WAIT!
    M118 EXTRUDER PID TUNE! PLEASE WAIT!
    PID_CALIBRATE HEATER=extruder TARGET={noz_temp}     #エクストルーダチューニング
    M400
    M106 S0                                             #ファン停止

    M117 EXTRUDER TEST END! DONT SAVE YET!!
    M118 EXTRUDER TEST END! DONT SAVE YET!!
    G4 P10000
    G0 Z50 F9000
    
    M117 HEAT BED PID TUNE! LONG TEST PLEASE WAIT!
    M118 HEAT BED PID TUNE! LONG TEST PLEASE WAIT!
    PID_CALIBRATE HEATER=heater_bed TARGET={bed_temp}
    M400
    
    M117 HEAT BED TEST END!
    M118 HEAT BED TEST END!
    G4 P10000
    
    M117 ALL TESTS COMPLETE! SAVE_CONFIG NOW!!
    M118 ALL TESTS COMPLETE! SAVE_CONFIG NOW!!

[gcode_macro PID_Tune_Hotend]
gcode: 
  {% set noz_temp = params.NOZZLE_TARGET|default(200)|int %}
  {% set x_park = printer.toolhead.axis_maximum.x|float / 2 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float / 2 %}
  G90 #絶対位置指定モード
  M117 Hotend PID Tune Mode! Long Test!
  M118 Hotend PID Tune Mode! Long Test!
  {% if "xyz" not in printer.toolhead.homed_axes %}
     G28
  {% endif %}
  M400
    G0 X{x_park} Y{y_park} Z5 F9000                    #ツールヘッドをベッド中央に移動
  M106 S155
  PID_CALIBRATE HEATER=extruder TARGET={noz_temp}     #エクストルーダチューニング
  M400
  M106 S0                                             #ファン停止
  M117 ALL TESTS COMPLETE! SAVE_CONFIG NOW!!
  M118 ALL TESTS COMPLETE! SAVE_CONFIG NOW!!

[gcode_macro PID_Tune_Heat_Bed]
gcode: 
  {% set bed_temp = params.BED_TARGET|default(60)|int %}
  {% set x_park = printer.toolhead.axis_maximum.x|float / 2 %}
  {% set y_park = printer.toolhead.axis_maximum.y|float / 2 %}
  G90 #絶対位置指定モード
  M117 HEAT BED PID TUNE! LONG TEST PLEASE WAIT!
  M118 HEAT BED PID TUNE! LONG TEST PLEASE WAIT!
  {% if "xyz" not in printer.toolhead.homed_axes %}
     G28
  {% endif %}
  M400
    G0 X{x_park} Y{y_park} Z5 F9000                    #ツールヘッドをベッド中央に移動
  PID_CALIBRATE HEATER=heater_bed TARGET={bed_temp}    #エクストルーダチューニング
  M400
  M117 ALL TESTS COMPLETE! SAVE_CONFIG NOW!!

  M118 ALL TESTS COMPLETE! SAVE_CONFIG NOW!!

PID_Tune_Mode_FULLはホットエンドとヒートベッド両方のPIDチューニングを一括実行します。ホットエンド→ベッドの順にテストし、完了後に SAVE_CONFIG を促す表示が出ます。ツールヘッドは自動で中央に移動し、冷却ファン(パーツファン)も自動制御されます。

PID_Tune_Hotendはホットエンドのみを対象にPIDチューニングします。

PID_Tune_Heat_Bedはヒートベッドのみを対象にチューニングします。

macros/resonance.cfg

このマクロ群は、KlipperのInput Shaper機能を活用して印刷品質の向上を狙うものです。専用の加速度センサ(ADXL345)を使用して、X/Y軸の共振周波数を測定し、補正パラメータを自動でチューニングします。

########################################################################################################################################################
#   8888888b.  8888888888  .d8888b.   .d88888b.  888b    888        d8888 888b    888  .d8888b.  8888888888
#   888   Y88b 888        d88P  Y88b d88P" "Y88b 8888b   888       d88888 8888b   888 d88P  Y88b 888
#   888    888 888        Y88b.      888     888 88888b  888      d88P888 88888b  888 888    888 888
#   888   d88P 8888888     "Y888b.   888     888 888Y88b 888     d88P 888 888Y88b 888 888        8888888
#   8888888P"  888            "Y88b. 888     888 888 Y88b888    d88P  888 888 Y88b888 888        888
#   888 T88b   888              "888 888     888 888  Y88888   d88P   888 888  Y88888 888    888 888
#   888  T88b  888        Y88b  d88P Y88b. .d88P 888   Y8888  d8888888888 888   Y8888 Y88b  d88P 888
#   888   T88b 8888888888  "Y8888P"   "Y88888P"  888    Y888 d88P     888 888    Y888  "Y8888P"  8888888888
########################################################################################################################################################
#共振測定と自動調整はデフォルトではインストールされていないため
#追加のソフトウェアをインストールする必要があります。
#ホストコンピュータで以下のコマンドを実行します。
#sudo apt update
#sudo apt install python3-numpy python3-matplotlib libatlas-base-dev libopenblas-dev
#~/klippy-env/bin/pip install -v "numpy<1.26"

#共振の測定
#コンソールに以下のコマンドを発行すると加速度計の現在の測定値が表示されます
#ACCELEROMETER_QUERY
#測定値は以下のように表示されます。
#Recv: // adxl345 values (x, y, z): 470.719200, 941.438400, 9728.196800
#X軸の共振測定はコマンド:TEST_RESONANCES AXIS=X
#Y軸の共振測定はコマンド:TEST_RESONANCES AXIS=Y
#測定した結果は/tmp/resonances_x_*.csvおよび/tmp/resonances_y_*.csvに保存されます。
#この結果をpngファイルに変換するためホストコンピュータ上で以下を実行します。
#~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
#~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png
#pngファイルは/tmp/shaper_calibrate_x.png,/tmp/shaper_calibrate_y.pngに生成されます。
#生成されたpngファイルはPCのwinscpなどでダウンロードします。ホストコンピュータ上のcsvやpngファイルは削除しておきましょう
#各軸の共振補正値をセクション[input_shaper](system.cfg)に記載して再起動すると反映されます。

#自動調整
#コマンドSHAPER_CALIBRATEを実行するとセクション[input_shaper](systen.cfg)の内容はコメントアウトされ
#printer.cfgの自動保存部分(下の方)にセクション[input_shaper]が作成され、推奨値が記録されます。

[gcode_macro TEST_RESONNANCES_X]
gcode:
    G28
    TEST_RESONANCES AXIS=X

[gcode_macro TEST_RESONNANCES_Y]
gcode:
    G28
    TEST_RESONANCES AXIS=Y

[gcode_macro Auto_Shaper_X]
description: Auto tuning of input shaper on X-axis
gcode: 
    G28
    SHAPER_CALIBRATE AXIS=X

[gcode_macro Auto_Shaper_Y]
description: Auto tuning of input shaper on Y-axis
gcode: 
    G28
    SHAPER_CALIBRATE AXIS=Y

[gcode_macro Auto_Inputshaper]
description: Auto tuning of input shaper on X&Y-axis
gcode:
    G28
    SHAPER_CALIBRATE

macros/stepper_buzz_cycle.cfg

初期セットアップ時にモータが回転するか、回転方向があっているかを確認するためのマクロです。こちらもDemon klipperを参考にしています。

#Stepper_Buzz_Xycle
#すべてのモータを1mmプラス側に回転させてから元に戻すテスト
#stepper_□のdirピンに「!」をつけると回転方向を反転できます。
#表示器又は通信によりどのモータが回るか確認できます。
#
[gcode_macro Stepper_Buzz_Cycle]
gcode:
    #M117 Stepper X Buzz Cycle in 10 Seconds!
    M118 Stepper X Buzz Cycle in 10 Seconds!
    G4 P5000        #5秒停止
    #M117 5 Seconds! #ディスプレイに表示
    M118 5 Seconds! #シリアルポートに送信
    G4 P3000        #3秒停止
    #M117 Stepper X! READY GO!
    M118 Stepper X! READY GO!
    G4 P2000        #2秒停止
    STEPPER_BUZZ STEPPER=stepper_x

    M400            #動作完了まで待機
    #M117 Stepper Y Buzz Cycle in 10 Seconds
    M118 Stepper Y Buzz Cycle in 10 Seconds
    G4 P5000        #5秒停止
    #M117 5 Seconds!
    M118 5 Seconds!
    G4 P3000        #3秒停止
    #M117 Stepper Y! READY GO!
    M118 Stepper Y! READY GO!
    G4 P2000        #2秒停止
    STEPPER_BUZZ STEPPER=stepper_y

    M400            #動作完了まで待機
    #M117 Stepper Z Buzz Cycle in 10 Seconds
    M118 Stepper Z Buzz Cycle in 10 Seconds
    G4 P5000        #5秒停止
    #M117 5 Seconds!
    M118 5 Seconds!
    G4 P3000        #3秒停止
    #M117 Stepper Z! READY GO!
    M118 Stepper Z! READY GO!
    G4 P2000        #2秒停止
    STEPPER_BUZZ STEPPER=stepper_z

    M400            #動作完了まで待機
    #M117 Stepper Z1 Buzz Cycle in 10 Seconds
    M118 Stepper Z1 Buzz Cycle in 10 Seconds
    G4 P5000        #5秒停止
    #M117 5 Seconds!
    M118 5 Seconds!
    G4 P3000        #3秒停止
    #M117 Stepper Z1! READY GO!
    M118 Stepper Z1! READY GO!
    G4 P2000        #2秒停止
    STEPPER_BUZZ STEPPER=stepper_z1

    M400            #動作完了まで待機
    #M117 Stepper Z2 Buzz Cycle in 10 Seconds
    M118 Stepper Z2 Buzz Cycle in 10 Seconds
    G4 P5000        #5秒停止
    #M117 5 Seconds!
    M118 5 Seconds!
    G4 P3000        #3秒停止
    #M117 Stepper Z2! READY GO!
    M118 Stepper Z2! READY GO!
    G4 P2000        #2秒停止
    STEPPER_BUZZ STEPPER=stepper_z2

    M400
    #M117 CYCLE COMPLETE!
    M118 CYCLE COMPLETE!
    G4 P6000
    #M117

macros/test_speed.cfg

このマクロは、高品質なプリントのためのチューニングガイドとして世界的に有名な Ellis’ Print Tuning Guide に掲載されている「スピードテスト用マクロ」を基にしています。

cfgファイルのダウンロード

紹介したcfgファイルはこちらからダウンロードできます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA