🔄

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
GitHubで編集を提案

Discussion