スライサーの設定で Pressure_advance の設定値を変更する方法
前置き
プリントヘッドの移動に合わせてフィラメントの押出量を調整する Pressure advance 機能を使う場合、必要な設定値を printer.cfg
に pressure_advance: 0.045
の形式で設定する必要があります。しかし、この設定値は、フィラメント毎、印刷温度毎に変化しますので、最低でもフィラメントを切り替える都度 printer.cfg
を編集する必要が生じます。
これは結構面倒ですが、幸い、スライサーの設定を変更することでフィラメント毎に設定値を変更する方法を教えてもらいましたので、備忘録としてまとめます。
ちなみに、教えてもらった場は 3Dプリンタ愛好家の方々が集まっている Discord のサーバーの Klipper_jp で、教えていただいた方は show555(@show555)さん / Twitter です。
方法
この方法は、PrusaSlicer または SuperSlicer で実施できます。具体的な方法はどちらのスライサーでも同じです。
まず、それぞれのスライサーの設定画面の「フィラメント設定 (Filament Settings) 」を開き、次に「カスタムGコード (Custom G-code) 」を開きます。そして、「Gコードの最初 (Start G-code) 」に次のコードを追加します。コードを追加したら、このプリセットを保存し、モデルをスライスします。
1{if physical_printer_preset == "Fluiddpi_Ender3"}SET_PRESSURE_ADVANCE ADVANCE=0.05{endif}
2{if physical_printer_preset == "Prusa MK3S+ with Klipper"}SET_PRESSURE_ADVANCE ADVANCE=0.05{endif}
このコードの内容は次のとおりです。
まず、{if physical_printer_preset == "Fluiddpi_Ender3"}
の部分は、使うプリンタの名前が Fluiddpi_Ender3
であるかどうかを if
文で判定しています。そして、判定結果が真であれば、SET_PRESSURE_ADVANCE ADVANCE=0.05
Gコードをスライスして生成した Gコードに印刷開始前の部分に埋め込みます。これにより、printer.cfg
を編集することなくフィラメントに応じた設定値が印刷に適用されるようになります。最後の {endif}
は、if
文終了のコードです。
ここで使うプリンタ名は、「物理プリンターの編集 (Edit phisycal printer) 」の「プリンタの記述的な名前 (Descriptive name for the printer) 」に登録している名前です。
これでモデルをスライスして生成された Gコードに SET_PRESSURE_ADVANCE ADVANCE=0.05
が埋め込まれるようになります。
1; Don't change E values below. Excessive value can damage the printer.
2M907 E430 ; set extruder motor current
3G21 ; set units to millimeters
4G90 ; use absolute coordinates
5M83 ; use relative distances for extrusion
6; Filament gcode
7
8SET_PRESSURE_ADVANCE ADVANCE=0.05 <-- 埋め込まれた Gコード
9M107
10;LAYER_CHANGE
11;Z:0.2
12;HEIGHT:0.2
13;BEFORE_LAYER_CHANGE
14G92 E0.0
なお、上記の if
文で登場する physical_printer_preset
は、カスタム Gコードの設定で使える Placeholder です。これを使うとプリンタ名に応じて処理を切り替えられるようになります。これ以外にも、以下の公式マニュアルで色々な Placeholder が用意されていることが分かりますので、必要に応じて使い分けると便利だと思います。
List of placeholders | Prusa Knowledge Base
また、if
文の構文などは、以下の公式マニュアルで解説されていますので、こちらも必要に応じて参照してください。