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からは下記のように、必要に応じてパラメータを変更してマクロの実行ができるようになります。
出力と測定
実施するとベッドと、ホットエンドを加熱が完了すると印刷開始されます。
下記のような出力がされると思います。
この中で一番均一に印刷できているラインで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 %}
ここから先は
¥ 100
よろしければ、サポートお願いします。今後の活動費に使わせていただきたいと思います!