見出し画像

Klipperのチューニング:Pressure advance

Klipperのチューニング項目はいくつかありますが、測定が結構面倒だけど効果が絶大なPressure advanceについて書きたいと思います。
おかしいところがあれば、ご連絡ください。修正したいと思います。

Pressure advanceとは

Pressure advanceとは、印刷のにじみを減らす機能です。
チューニング方法については、下記のKlipperの公式ドキュメントに記載があります。

ここで紹介されている方式では、Pressure Advanceのパラメータを自動で変えならがオブジェクトを印刷していき、どこの部分の品質が良いかで値を決めるというものとなります。
結構時間がかかり、フィラメントも結構使うので面倒に感じるので、今回はもっと素早く簡単に値を測定する方法を紹介します。

今回の方式

下記サイトで紹介されている、Line Methodを使います。
Klipperの公式サイトに記載のある方式より遥かに手軽に短時間で測定できます。
ここに書かれている通り実施しても良いのですが、いちいちパラーメータを設定して、g-codeを出力して印刷するというのが面倒でした。

なので、Mainsailのウェブ画面のマクロからワンクリックで実行できるようにしたものを紹介します。

マクロ

下記のマクロをKlipperのprinter.cfgに追記します。
(おすすめは、このマクロ単体を、"macro_pa_cal.cfg"として保存し、printer.cfgに[include macro_pa_cal.cfg]と記載して読み込むようにするとメンテが楽です)
ベッドサイズが120x120以上の機種であればおそらくそのまま動作すると思います。(Voron v0.1、KP3S改Fraxinusで動作確認しました)
特にパラメータを指定せずに実行するとヘッド250度、ベッド100度、Pressure Advanceが現状のもの1本と、0〜0.095でで20本のラインが出力されます。
あと最初にPRINT_STARTマクロ、最後にPRINT_ENDマクロを呼び出していますので、そのマクロが存在することが前提です。

[gcode_macro PA_CAL]
# Pressure Advance Simple Test macro, using .4mm nozzle.
# Usage: PA_CAL BED=100 EXTRUDER=240 PA_START=0.03 PA_STEP=0.002
# Or with no parameters as: PA_CAL, this would execute as
# PA_CAL BED=100 EXTRUDER=250 PA_START=0.0 PA_STEP=0.005
# First prints a line with current set PA, then prints 20 line segments
# starting with PA_START, increasing each line by PA_STEP.
# Based http://realdeuce.github.io/Voron/PA/pressure_advance.html
description: Tune Pressure Advance

gcode:
    {% set BED = params.BED|default(100)|float %}
    {% set EXTRUDER = params.EXTRUDER|default(250)|float %}
    {% set PA_START = params.PA_START|default(0.0)|float %}
    {% set PA_STEP = params.PA_STEP|default(0.005)|float %}
    PRINT_START BED_TEMP={BED} EXTRUDER_TEMP={EXTRUDER}

    #   Get Boundaries
    {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %}
    {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %}
    {% set offset_x = (max_x-80) / 2|float %}
    {% set offset_y = (max_y-110) / 2|float %}
    G21 ; Millimeter units
    G90 ; Absolute XYZ
    M83 ; Relative E
    SET_VELOCITY_LIMIT ACCEL=3000 ACCEL_TO_DECEL=1500
    G92 E0
    M106 S0 

    G1 X{offset_x} Y{offset_y} F30000            ; move to start position
    G1 Z0.25 F300                 ; move to layer height
    G1 E0.75 F1800                ; un-retract
    G1 X{offset_x+20} Y{offset_y} E0.91798 F300     ; print line part one
    G1 X{offset_x+60} Y{offset_y} E1.83596 F9000    ; print line part two
    G1 X{offset_x+80} Y{offset_y} E0.91798 F300     ; print line part three
    G1 E-0.75 F1800               ; retract
    G1 Z1 F300                    ; Move above layer height  

    {% for i in range(0, 20) %}
      SET_PRESSURE_ADVANCE ADVANCE={PA_START + (i * PA_STEP)} ; set Pressure Advance
      M117 Testing Pressure Advance at: {PA_START + (i * PA_STEP)}
      G1 X{offset_x} Y{offset_y+15+(5*i)} F30000            ; move to start position
      G1 Z0.25 F300                          ; move to layer height
      G1 E0.75 F1800                         ; un-retract
      G1 X{offset_x+20} Y{offset_y+15+(5*i)} E0.91798 F300     ; print line part one
      G1 X{offset_x+60} Y{offset_y+15+(5*i)} E1.83596 F9000    ; print line part two
      G1 X{offset_x+80} Y{offset_y+15+(5*i)} E0.91798 F300     ; print line part three
      G1 E-0.75 F1800                        ; retract
      G1 Z1 F300                             ; Move above layer height  
    {% endfor %}

    PRINT_END

なお、初期値が気に入らなければ、下記4行のdefault()の括弧の中の値を書き換えれば変更できます。
現在の初期値はダイレクトドライブ用になっていますので、もしボーデンで使用する場合、PA値は0〜1.5になるので、PA_STEP=0.05等に大きくする必要があります。

{% set BED = params.BED|default(100)|float %}
{% set EXTRUDER = params.EXTRUDER|default(250)|float %}
{% set PA_START = params.PA_START|default(0.0)|float %}
{% set PA_STEP = params.PA_STEP|default(0.005)|float %}

Mainsailからは下記のように、必要に応じてパラメータを変更してマクロの実行ができるようになります。

Mainsail画面

出力と測定

実施するとベッドと、ホットエンドを加熱が完了すると印刷開始されます。
下記のような出力がされると思います。
この中で一番均一に印刷できているラインでPressureAdvanceの値を決めます
下記の写真の例では0.035が一番綺麗と判断し、この値でprinter.cfgのpressure_advance:の値を設定します。

[extruder]
ーー途中省略ーー
pressure_advance: 0.035

チューニングのビフォアーアフター

写真左が、設定前。写真右が設定後の印刷結果です。
写真だと分かりにくいかもしれませんが、角の表現が大部改善されています。

最後に

この設定を見直すだけで、かなり印刷表面が綺麗になると思います
是非試してみてくださいね。

マクロ化にあたっっては、Redditの下記記事を参考にさせていただきました。

ベータ版

2022.10.14 下記修正を加えた版をベータ版として公開します。おかしな点等あれば、こっそり教えてください。
・ノズル径と、max_accel, max_accel_to_decelの設定を自動反映
・印刷後剥がしやすいように、両端にアンカーを印刷する
・マクロ開始時のprinterステータスチェックの追加
・マクロ開始時にノズル径と層の高さ、max_accel, max_accel_to_decelの情報をconsoleに出力

[gcode_macro PA_CAL]
# Pressure Advance Simple Test macro.
# Usage: PA_CAL BED=100 EXTRUDER=240 PA_START=0.03 PA_STEP=0.002
# Or with no parameters as: PA_CAL, this would execute as
# PA_CAL BED=100 EXTRUDER=250 PA_START=0.0 PA_STEP=0.005
# First prints a line with current set PA, then prints 20 line segments
# starting with PA_START, increasing each line by PA_STEP.
# Based http://realdeuce.github.io/Voron/PA/pressure_advance.html
# Assisted by u/imoftendisgruntled, u/scul86, and thanks to u/beansisfat, u/stray_r

description: Tune Pressure Advance
gcode:
    {% if printer.idle_timeout.state == "Printing" or printer.pause_resume.is_paused %}
        {action_respond_info("Cannot do that while printing")}
	
    {% else %}
        {% set BED = params.BED|default(100)|float %}
        {% set EXTRUDER = params.EXTRUDER|default(250)|float %}
        {% set PA_START = params.PA_START|default(0.0)|float %}
        {% set PA_STEP = params.PA_STEP|default(0.005)|float %}
        {% set NZL = printer.configfile.config["extruder"]["nozzle_diameter"]|float %}
        {% set E20 = (0.1147475 * NZL) * 20|float %}
        {% set E40 = (0.1147475 * NZL) * 40|float %}
        {% set X_MID = printer.configfile.config["stepper_x"]["position_max"]|float / 2.0 %}
        {% set Y_MID = printer.configfile.config["stepper_y"]["position_max"]|float / 2.0 %}
        {% set h = NZL * 0.625|float %}    ; layer height
        {% set EANC = (0.415751687 * NZL * h) * 105|float %}
        {% set accel = printer.toolhead.max_accel|float %}
        {% set deaccel = printer.toolhead.max_accel_to_decel|float %}
        {action_respond_info("PA_CAL Nozzle:%.1f  layer height:%.2f  accel:%d  deaccel:%d" % (NZL, h, accel, deaccel)) }   

        PRINT_START BED_TEMP={BED} EXTRUDER_TEMP={EXTRUDER}
        G21 ; Millimeter units
        G90 ; Absolute XYZ
        M83 ; Relative E
        SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={deaccel}
        G92 E0
        M106 S0 

        ;print anchor frame
        G1 Z{h} F300 
        G1 X{X_MID-40} Y{Y_MID-55-2} F9000      ;move_to_start
        G1 X{X_MID-40} Y{Y_MID-40+5*19+2} E{EANC} F1500  ;print_line
        G1 X{X_MID-40+0.48} Y{Y_MID-40+5*19+2} F9000  ;move_to_start
        G1 X{X_MID-40+0.48} Y{Y_MID-55-2} E{EANC} F1500  ;print_line
        G1 E-0.75 F1800                        ; retract
        G1 X{X_MID+40} Y{Y_MID-55-2} F9000     ; move_to_start
        G1 E0.75 F1800                         ; un-retract
        G1 X{X_MID+40} Y{Y_MID-40+5*19+2} E{EANC} F1500 ;print_line
        G1 X{X_MID+40-0.48} Y{Y_MID-40+5*19+2} F9000    ; move_to_start
        G1 X{X_MID+40-0.48} Y{Y_MID-55-2} E{EANC} F1500  ;print_line
        G1 E-0.75 F1800                        ; retract
        G1 Z1 F300
		
        G1 X{(X_MID-40)} Y{(Y_MID-55)} F30000          ; move to start position
        G1 Z{h} F300                                   ; move to layer height
        G1 E0.75 F1800                                 ; un-retract
        G1 X{(X_MID-20)} Y{(Y_MID-55)} E{E20} F300     ; print line part one
        G1 X{(X_MID+20)} Y{(Y_MID-55)} E{E40} F9000    ; print line part two
        G1 X{(X_MID+40)} Y{(Y_MID-55)} E{E20} F300     ; print line part three
        G1 E-0.75 F1800                                ; retract
        G1 Z1 F300                                     ; Move above layer height  
		
        {% for i in range(0, 20) %}
            SET_PRESSURE_ADVANCE ADVANCE={PA_START + (i * PA_STEP)} ; set Pressure Advance
            M117 Testing Pressure Advance at: {PA_START + (i * PA_STEP)}
            G1 X{(X_MID-40)} Y{(Y_MID-40)+(5*i)} F30000           ; move to start position
            G1 Z{h} F300                                          ; move to layer height
            G1 E0.75 F1800                                        ; un-retract
            G1 X{(X_MID-20)} Y{(Y_MID-40)+(5*i)} E{E20} F300      ; print line part one
            G1 X{(X_MID+20)} Y{(Y_MID-40)+(5*i)} E{E40} F9000     ; print line part two
            G1 X{(X_MID+40)} Y{(Y_MID-40)+(5*i)} E{E20} F300      ; print line part three
            G1 E-0.75 F1800                                       ; retract
            G1 Z1 F300                                            ; Move above layer height  
        {% endfor %}
	
	M117 Find best line and multiply it by ({PA_START} + (line * {PA_STEP}) ) to find your PA setting.

        PRINT_END
		
    {% endif %}
剥がしやすくなった!

ここから先は

0字

¥ 100

よろしければ、サポートお願いします。今後の活動費に使わせていただきたいと思います!