🔄
Klipper PA Pattern method calibration macro
パターンメソッドでPAをキャリブレーションするためのKlipperマクロを作成しました。数値をプリントする機能を省き、短時間で実行できるのが特徴です。
使い方
フィラメントに合わせた温度を指定して実行してください。
PA_PATTERN BED_TEMP=60 EXTRUDER_TEMP=210
標準では0.0から0.1まで0.005ステップでPAを変更しながら21本のパターンをプリントします。角の痩せがない範囲で最大の値を見つけてください。範囲を変える場合はPA_MIN / PA_MAXを変更してください。2つの値を等間隔で20個に区切った21本のパターンをプリントします。
PA_PATTERN PA_MIN=0.0 PA_MAX=0.05
標準では1層目を60mm/s、2層目以上を120mm/sでプリントします。プリンターの使い方に合わせて2層目以上の速度と加速度を変更してキャリブレーションすることをおすすめします。
PA_PATTERN SPEED=300 ACCEL=10000
その他のパラメーターはMainsail / Fluiddから設定すると便利です。
コード
[gcode_macro PA_PATTERN]
description: Tune Pressure Advance by pattern method
gcode:
# Parameters and Variables
{% set BED_TEMP = params.BED_TEMP|default(60)|float %}
{% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(230)|float %}
{% set PA_MIN = params.PA_MIN|default(0.0)|float %}
{% set PA_MAX = params.PA_MAX|default(0.1)|float %}
{% set NUM = 20|int %}
{% set PA_STEP = ((PA_MAX - PA_MIN) / NUM) |float %}
{% set CONFIG_PA = printer.configfile.settings.extruder.pressure_advance|float %}
{% set CONFIG_SMOOTH_TIME = printer.configfile.settings.extruder.pressure_advance_smooth_time|float %}
{% set SMOOTH_TIME = params.SMOOTH_TIME|default(CONFIG_SMOOTH_TIME)|float %}
{% set CONFIG_NOZZLE = printer.configfile.settings.extruder.nozzle_diameter|float %}
{% set NOZZLE = params.NOZZLE|default(CONFIG_NOZZLE)|float %}
{% set EXTRUSION_MULTIPLIER = params.EXTRUSION_MULTIPLIER|default(0.98)|float %}
{% set LINE_RATIO = 1.0 %}
{% set LINE_WIDTH = NOZZLE * LINE_RATIO %}
{% set SPACING = 2 %}
{% set SPACING_X = SPACING * 1.41421356 %}
{% set LINE_INTERVAL_X = LINE_WIDTH * 1.41421356 %}
{% set PATTERN_INTERVAL_X = 2 * LINE_INTERVAL_X + SPACING_X %}
{% set X = [] %}
{% for i in range(0, NUM+1) %}
{% set dummy = X.append(SPACING_X + i * PATTERN_INTERVAL_X) %}
{% endfor %}
{% set height = NOZZLE / 2.0 %}
{% set EX = EXTRUSION_MULTIPLIER * (LINE_WIDTH * height) / 2.4052818754 %}
{% set CONFIG_MAX_ACCEL = printer.configfile.settings.printer.max_accel|float %}
{% set FIRST_SPEED = params.FIRST_LAYER_SPEED|default(60)|float %}
{% set FIRST_ACCEL = params.FIRST_LAYER_ACCEL|default(CONFIG_MAX_ACCEL)|float %}
{% set SPEED = params.SPEED|default(120)|float %}
{% set ACCEL = params.ACCEL|default(CONFIG_MAX_ACCEL)|float %}
{% set SCV = params.SQUARE_CORNER_VELOCITY|default(1.0)|float %}
{% set CONFIG_SCV = printer.configfile.settings.printer.square_corner_velocity|float %}
{% set f = FIRST_SPEED * 60.0 %}
{% set RETRACT_LENGTH = params.RETRACTION_LENGTH|default(0.8)|float %}
{% set RETRACT_SPEED = params.RETRACTION_SPEED|default(30.0)|float %}
{% set ZHOP = params.ZHOP_LENGTH|default(0.4)|float %}
{% set rl = RETRACT_LENGTH %}
{% set rf = RETRACT_SPEED * 60.0 %}
{% set CENTER_X = printer.configfile.config["stepper_x"]["position_max"]|float / 2.0 %}
{% set CENTER_Y = printer.configfile.config["stepper_y"]["position_max"]|float / 2.0 %}
{% set DEPTH = 40.0 %}
{% set WIDTH = X[-1] + 2 * LINE_INTERVAL_X + DEPTH / 2.0 %}
{% set MIN_X = CENTER_X - WIDTH / 2.0 %}
{% set MAX_X = CENTER_X + WIDTH / 2.0 %}
{% set MIN_Y = CENTER_Y - DEPTH / 2.0 %}
{% set MAX_Y = CENTER_Y + DEPTH / 2.0 %}
# Start Printing
{% if EX == 0.0 %}
{action_respond_info("start debug mode")}
G28
{% else %}
PRINT_START BED_TEMP={BED_TEMP} EXTRUDER_TEMP={EXTRUDER_TEMP}
{% endif %}
G21 ; Millimeter units
G90 ; Absolute XYZ
M83 ; Relative E
G92 E0
M106 S0
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={SCV} ACCEL={FIRST_ACCEL}
SET_PRESSURE_ADVANCE ADVANCE={CONFIG_PA} SMOOTH_TIME={CONFIG_SMOOTH_TIME}
G1 E-{rl} F{rf}
G1 Z{height + ZHOP} F3000
G0 X{MIN_X} Y{MIN_Y} F{f}
G1 Z{height} F3000
G1 E{rl} F{rf}
# Wall
{% for i in range(0, 3) %}
{% set e_x = EX * (WIDTH + 2.0 * i * LINE_WIDTH) %}
{% set e_y = EX * (DEPTH + 2.0 * i * LINE_WIDTH) %}
G0 X{MIN_X - i * LINE_WIDTH} Y{MIN_Y - i * LINE_WIDTH} F{f}
G1 X{MAX_X + i * LINE_WIDTH} E{e_x} F{f}
G1 Y{MAX_Y + i * LINE_WIDTH} E{e_y} F{f}
G1 X{MIN_X - i * LINE_WIDTH} E{e_x} F{f}
G1 Y{MIN_Y - i * LINE_WIDTH} E{e_y} F{f}
{% endfor %}
# Pattern
{% for layer in range(1, 5) %}
{% set height = layer * NOZZLE / 2.0 %}
{% for px in X %}
SET_PRESSURE_ADVANCE ADVANCE={PA_MIN + (X.index(px)) * PA_STEP} SMOOTH_TIME={SMOOTH_TIME}
{% for i in range(0, 3) %}
{% if layer == 1 %}
{% set x_offset = LINE_WIDTH %}
{% set y_offset = LINE_WIDTH %}
{% set f = FIRST_SPEED * 60.0 %}
{% else %}
{% set x_offset = (-2.0) * LINE_WIDTH %}
{% set y_offset = (-2.0) * LINE_WIDTH %}
{% set f = SPEED * 60.0 %}
{% endif %}
{% set e = EX * (20.0 - x_offset) * 1.41421356 %}
{% set x = MIN_X + px + i * LINE_INTERVAL_X %}
G1 E-{rl} F{rf}
G1 Z{height + ZHOP} F3000
G0 X{x + x_offset} Y{MIN_Y + y_offset} F{f}
G1 Z{height} F3000
G1 E{rl} F{rf}
G1 X{x + DEPTH / 2.0} Y{CENTER_Y} E{e} F{f}
G1 X{x + x_offset} Y{MAX_Y - y_offset} E{e} F{f}
{% endfor %}
{% endfor %}
SET_VELOCITY_LIMIT ACCEL={ACCEL}
M106 S100
{% endfor %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={CONFIG_SCV} ACCEL={CONFIG_MAX_ACCEL}
SET_PRESSURE_ADVANCE ADVANCE={CONFIG_PA} SMOOTH_TIME={CONFIG_SMOOTH_TIME}
PRINT_END
Discussion