スライサーの設定
前回までにReplicator2XのmightyboardをSKR pro v1.1に入れ替え、ファームウェアを色々設定してビルドしたことで、さしあたって3Dプリントが可能な状態になった。そこで、テスト印刷を行う前に、スライサーの設定を行う。Makerbot純正のMakerwareはx3g形式のファイルを吐き出すが、Marlinではg-codで入力しなければいけないのでもう使えないし、更新が途絶えて久しい。そこで今回はsimplify3Dを使う。simplify3Dは有料だがいろんなプリンターに対応できる上に様々な設定が可能でっとっても重宝する。新型コロナ禍の影響で予定されていた2020年春に次期バージョンのリリースが延期されその後音沙汰がないので心配ではある。もしこのまま交信が途絶えてしまえば、Ultimakerが作っているCuraなどに乗り換えを検討する必要があるかもしれない。だが現段階ではまだ更新が来ることを信じてsimplify3Dを使い続けてみる。
まず、ツール→ファームウェア設定からファームウェア設定を選択。
RepRap(Marlin/Repetier/Sprinter)を選択し、保存ボタンをクリックする。
プロセス設定を編集をクリックし、FFF設定画面を開いて、スライスしたg-codeの頭とおしりに挿入されるスタートスクリプトと終了後スクリプト編集する。スタートスクリプトは右エクストルーダーだけの時、左エクストルーダーだけの時、両方の時の3種類登録する必要がある。
まず、右エクストルーダーだけの時のスタートスクリプトを以下に示す。1行目のM206でXY座標の原点を(0,0)にリセット、2行目のG28で3軸ともにホーミングさせる。3行目のG1でX軸とY軸を0へ移動させ、Z軸を5mm下げる。Marlin上ではXY座標の原点は(0,0)になっているがsimplify3Dでは中央が原点となる。そのため、再びM206でXY座標の原点を(131,70)へ移動させ、ビルドプレートの中央を原点とする。
可動域がX軸が277mm、Y軸が140mmだったので、原点を中央に持ってくるためのX軸の原点オフセットは138.5となりそうなところだ。しかし、左右のエクストルーダーのX軸のオフセット値は35mmで右側エクストルーダーは中央から右に17.5mmズレたところにある。さらにビルドプレートは可動域の中央には無く、ちょっと右寄りに設置されているため、138.5-17.5+10=131とするとちょうど真ん中らへんに来る。
その後、T0で右側エクストルーダーに切り替えて、M104で右側エクストルーダーを指定の温度まで上げる。M104で加熱すると過熱が終わるまで待たずに次の行へ進む。次の行ではM109でビルドプレートを設定した温度まで加熱する。M109で加熱すると指定した温度になるまで次の行へは進まない。ヒートベッドの過熱が終了したところに、もう一度M109でエクストルーダーの過熱を入れておく。通常、ビルドプレートの方がエクストルーダーより過熱に時間がかかるが、ビルドプレートの温度がすでに上がった状態でスタートした場合、ビルドプレートの過熱が終了してもエクストルーダーの過熱が終了していない可能性がある。そのためここでM109をいれてエクストルーダーの過熱が終了するまで次に進まないようにしておく。温度が上がった状態でG29でエクストルーダーの押し出し位置を0に戻す。
あとは、G1で右手手前から左手前へエクストルーダーを押し出しながら移動させてラインを引き、ちょっと戻すことで、ノズルからたれた樹脂をふき取る。
以上が、右エクストルーダーのみを使用する場合のスタートスクリプトだ。
; **** Replicator 2X start.gcode ****
M206 X0 Y0
G28 X Y Z ; Home all axes
G1 X0 Y0 Z50 F9000 ; Move to wait position off table
M206 X-131 Y-70
T0
M104 S[extruder0_temperature] T0 ; Set nozzle temperature (no wait)
M190 S[bed0_temperature] ; Heat buildplate
M109 S[extruder0_temperature] T0 ; Heat right extruder
G92 E0 E1 ; Zero extruders
G1 X120 Y-70 F9000 ; Move to front right corner of bed
G1 Z0 F6000 ; Move down to purge
G1 X-100 Y-70 E30 F2000 ; Extrude a line of filament across the front edge of the bed
G1 X-110 Y-70 F180 ; Wait for ooze
G1 X-120 Y-70 F5000 ; Fast wipe
G1 X-110 Y-70 F5000 ; Fast wipe
G92 E0 E1 ; Zero extruders
; **** end of start.gcode ****
つぎに、左エクストルーダーを使用する場合のスタートスクリプトだが、T0がT1になっただけで基本的に同じである。T1で切り替える指示を出すと、Marlinで設定したエクストルーダーのオフセット分だけヘッドが移動してズレる。この後はオフセット分だけズレて動くので、指定する座標にツールのオフセット分だけ轢いたり足したりする必要はない。T0の時と同じさ豹指定でいい。とても便利。
; **** Replicator 2X start.gcode ****
M206 X0 Y0
G28 X Y Z ; Home all axes
G1 X0 Y0 Z50 F9000 ; Move to wait position off table
M206 X-131 Y-70
T1
M104 S[extruder1_temperature] T1; Set nozzle temperature (no wait)
M190 S[bed0_temperature] ; Heat buildplate
M109 S[extruder1_temperature] T1 ; Heat left extruder
G92 E0 E1 ; Zero extruders
G1 X110 Y-70 F9000 ; Move to front right corner of bed
G1 Z0 F6000 ; Move down to purge
G1 X-100 Y-70 E30 F2000 ; Extrude a line of filament across the front edge of the bed
G1 X-110 Y-70 F180 ; Wait for ooze
G1 X-120 Y-70 F5000 ; Fast wipe
G1 X-110 Y-70 F5000 ; Fast wipe
G92 E0 E1 ; Zero extruders
; **** end of start.gcode ****
続いて、両方のエクストルーダーを使う2色刷りするときのスタートスクリプトだ。上の2つとの違いは、エクストルーダー2つとビルドプレートを3つ同時に加熱すると“Thermal Runaway”のエラーが出てしまうので、先にM109でビルドプレートを加熱し終わってから、2つのエクストルーダーを同時に加熱するという手順に変更してある。そして、最初のふき取り動作を右エクストルーダーと左エクストルーダーの2回分行っている。
; **** Replicator 2X start.gcode ****
M206 X0 Y0
G28 X Y Z ; Home all axes
G1 X0 Y0 Z50 F9000 ; Move to wait position off table
M206 X-131 Y-70
M190 S[bed0_temperature] ; Heat buildplate
M104 S[extruder0_temperature] T0 ; Set nozzle temperature (no wait)
M104 S[extruder1_temperature] T1 ; Set nozzle temperature (no wait)
M109 S[extruder0_temperature] T0 ; Heat right extruder
G92 E0 E1 ; Zero extruders
T0
G1 X110 Y-70 F9000 ; Move to front right corner of bed
G1 Z0 F6000 ; Move down to purge
G1 X-100 Y-70 E30 F2000 ; Extrude a line of filament across the front edge of the bed
G1 X-110 Y-70 F180 ; Wait for ooze
G1 X-120 Y-70 F5000 ; Fast wipe
G1 X-110 Y-70 F5000 ; Fast wipe
G1 Z0.5 F100 ; Lift
G92 E0 E1 ; Zero extruders
T1
G1 X-120 Y-70 F9000 ; Move to front left corner of bed
G1 Z0 F6000 ; Move down to purge
G1 X90 Y-69.5 E30 F2000 ; Extrude a line of filament across the front edge of the bed
G1 X100 Y-69.5 F180 ; Wait for ooze
G1 X110 Y-69.5 F5000 ; Fast wipe
G1 X100 Y-69.5 F5000 ; Fast wipe
G92 A0 B0 ; Zero extruders
; **** end of start.gcode ****
終了スクリプトは、全部ストップして初期位置へ移動させるだけなので、右エクストルーダー、左エクストルーダー、両方の3つで共通だ。M72プリセットされた音を鳴らすためのコードだが、Makerbotの機器じゃないと効かないので無視される。
; **** Replicator 2X end.gcode ****
G1 Z151 F1000 ; send Z axis to bottom of machine
M140 S0 T0 ; cool down HBP
M104 S0 T0 ; cool down right extruder
M104 S0 T1 ; cool down left extruder
M107 ; stop blower fan
T0
M206 X0 Y0
G28 X Y
G1 Z145
M18 ; disable stepper
M72 P1 ; play Ta-Da song
; **** end of end.gcode ****
ついでに、エクスポートするファイルを標準G-codeモードに設定する。ここをx3gにしたときだけ、終了時のお祝い機能として音楽を鳴らす設定ができるが、ここにチェックが入っているとG-codeモードでも出力終了時に音楽を鳴らすことができる。とてもかわいい。
その他も色々設定したが、プロセス設定をエクスポートしたFFFファイルをいかに置いておくのでご参考にしていただけたら幸いである。もっとここを変えたほうがいいよ、というようなアドバイスも大歓迎である。
論理的と実際的
早速、20mm立方体のテストキューブをThingiversから借りてきて、テストプリントを行ってみた。使ったフィラメントはReplicator2Xを購入した時に同時に買ったMakerbot純正ABSフィラメントだ。かれこれ6年前のものになる。特に密閉などせず、空気中にさらされていた年代物だ。
20mm Japanese Test Cube by d_satow(https://www.thingiverse.com/thing:2813077)
//#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 96 }
結果はこちら。X方向が18.16mm、Y方向が18.08mm、Z方向が20.10mmだった。X軸Y軸方向はほぼ1割引きだ。ちっちゃい。Z軸方向は+1%と、さすが金属のネジは精度が高い。今使ってるタイミングベルトはピッチが若干2mmより小さいのかもしれないし、他のところに原因があるのかもしれない。
Makerbot純正ファームウェアの設定値はどうなっていただろうか。ざっとこんな感じになっていた。壊れる前にスクリーンショットを取っていた自分を誉めたい。
上記によると、X軸とY軸は88.573186 steps/mm、Z軸は400 steps/mm、エクストルーダーは、96.275202 steps/mmとなっている。Z軸とエクストルーダーは論理値に近い。X軸とY軸は論理値よりもかなりデカい。今回使っているベルトが特別だという事ではなさそうだ。純正の時点でそうだったのだ。Marlinに88.573186と入力してビルドしたら、88.6に丸められてしまっていた。桁数が多く指定するよりどうせ丸められるのであれば指定もまるめとこうという事で、以下の設定でビルドしなおした。
//#define DEFAULT_AXIS_STEPS_PER_UNIT { 88.573186, 88.573186, 400, 96.275202 }
#define DEFAULT_AXIS_STEPS_PER_UNIT { 88.6, 88.6, 400, 96 }
これで再チャレンジした結果がこれだ!X方向に20.08mm、Y方向に20.07mm、Z方向も20.07mm、誤差は0.07mm~0.08mmに収まった。
概ねよろしい結果であると判断した。だがこれは、出力後に冷えたら収縮するABS樹脂での結果である。収縮しにくいPLAで出力したらちょっと大きくなるんじゃないかと予想できる。使う樹脂の特性によってのスケール感の違いは、機器の設定ではなくスライサーで出力するときに拡大縮小することで吸収すべきことなのかもしれない。うちの場合はABSで出力するのが大好きなので、とりあえず、デフォルト状態はABSに最適化した機体としてチューニングして、樹脂に合わせた拡大縮小はデータの拡大縮小で対応する方針で進むことにした。
Benchy完走できない問題
3Dプリンターのベンチマークとして、Benchyという可愛い船の3Dモデルがある。このベンチマークの何がいいかというと、オーバーハングやブリッジやアーチ、肉厚の違う壁など、各所に確認ポイントが設けてありベンチマークとして便利なのはもちろん、出力した船が可愛いというところがとてもいい。パラメータを変えて何個出力しても、可愛いので飾って置ける。とてもすばらしい。
キューブの出力に満足したなら、次はBenchyだ。しかしながら、なぜか0.2mmピッチでの2時間程度のBenchyの出力がどうしても完走できなかった。
実は、今回エクストルーダーをボーデン式からダイレクト式へ戻していた。ボーデン式だとどうしても動力がホットエンドに伝わるのにタイムラグがあり、それが糸引きの原因となっていたからだ。いい機会なのでこの際、元のダイレクトエクストルーダーに戻したのである。それに伴い、モーターを小さくして少しでも重量を軽くしようと薄型のモーターを導入していた。薄くなっている分、電流が12Vで0.7Aと省電力低発熱となっているがその分トルクが落ちる。
これを、純正モーターと同じサイズのモーターに戻したところ、難なくBenchyの出力に成功した。エクストルーダーのフィラメント詰まりの原因の大半は力不足である。力こそパワーなのだ。
安定して出力できるようにはなったが、なんか表面がボコボコな気がする。これは改善せねばなるまい。
Benchyが出力品質が荒い問題
とりあえず安定して出力ができるようになったので、品質の向上に取り組んでいきたい。例によっていろいろパラメータを変えて出力し、どうなるのか試してみた。
結局のところ、壁のボコボコは吐出量が多すぎた事と、ホットエンドの温度が高すぎたことが原因だった。吐出量はスライサーで調整してもよかったが、今回はABSに最適化した値をデフォルトにするという方針に従い、エクストルーダーのstep/mmの値を減らしてみた。96~90までの間で徐々に減らしてみたところ、93steps/mmくらいでかなり品質が上がった。それ以上減らしても大して見た目は変わらず、90まで減らすと層と層の食いつきが弱くなり、冷えたところで真ん中らへんで割れてしまった。93steps/mmくらいがちょうどいい。ABS以外のフィラメントを出力する際にはスライサー側で吐出量の乗数をかける設定があるのでそちらで調節することにしたい。
まだちょっと荒れてる所はあるけれども、それはキャリアの移動時の振動を抑えたり、マイクロステップをもっと細かく割ったりしてみようかと思う。今回はこの辺りでひとまず満足とする。最初よりはだいぶ綺麗になったと思う。
いよいよの2色刷り
せっかく2Xなので2色刷りも試してみたい。Benchyには各部を分割したデータもあり、多色刷りのテストにも対応している。すごい。何にも考えず2色で刷ってみた。が、やはりどうしてもうまくいかなかった。
原因は、marlinのconfiguration_adv.hにあるTOOLCHANGE_ZRAISEオプションであった。これは、複数のエクストルーダーを切り替えて使う時、Z軸を動かして逃がし、ツール切り替え時のトラブルを避ける目的て使われる。失敗した時にはここの値が2となっており、ツールチェンジの度にZ軸が2mm動きビルドプレートがちょっと下がるという動きになるはずだった。だが実際にはツールチェンジの時に2mmビルドプレートが下がって、チェンジが完了し終わっても2mm上がらないという謎の挙動をしたために、ツールチェンジの度にビルドプレートが下がっていき、ホットエンドが空中に造形してもじゃもじゃになるという惨劇が繰り広げられていた。そのため、TOOLCHANGE_ZRAISEは0に設定した。
/**
* Universal tool change settings.
* Applies to all types of extruders except where explicitly noted.
*/
#if EXTRUDERS > 1
// Z raise distance for tool-change, as needed for some extruders
#define TOOLCHANGE_ZRAISE 0 // (mm)
//#define TOOLCHANGE_ZRAISE_BEFORE_RETRACT // Apply raise before swap retraction (if enabled)
//#define TOOLCHANGE_NO_RETURN // Never return to previous position on tool-change
#if ENABLED(TOOLCHANGE_NO_RETURN)
//#define EVENT_GCODE_AFTER_TOOLCHANGE "G12X" // Extra G-code to run after tool-change
#endif
するとどうでしょう、2色刷りで完走したではないか!すごい。とはいえ完走はしたものの、出力がぼろぼろであった。使ってないほうのエクストルーダーから垂れたフィラメントが造形物の表面を汚している。そして何より、紫が本体、黒が縁取り、という感じの構成なのだが縁取りの黒がうまく紫の部分にくっついていない。なぜか。それは、煙突の部分を見て原因が分かった。ズレてるのだ。左右のエクストルーダーがそれぞれズレたXY座標で造形している。
先に貼ったMakerbot純正ファームウェアの設定値では、左右のエクストルーダーのオフセット値は、X軸方向に35mm、Y軸方向に0.1mmであった。これも、パラメータを変更しながらテスト用の縞々を出力することで適正な値を探っていく。最初はあたりを付けて数値を変えられるのだが、最後の方になってくると調節する値が小さくなり、0.1mmや0.01mm単位の調節ともなると目視でズレてるのはわかるが、そのずれがどの程度なのか全くわからないのでぴったりになるまで数値を変えては出力しを繰り返した。根気のいる作業だった。
実際には、X軸方向に34.77、Y軸方向に0.24であった。Marlin上では右エクストルーダーを0として考えるので、-34.77と-0.24となる。個々の値は右エクストルーダーの値が0.0となっているが、これを変更するとビルドエラーとなるので変えてはいけない。
// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
// For the other hotends it is their distance from the extruder 0 hotend.
#define HOTEND_OFFSET_X { 0.0, -34.77 } // (mm) relative X-offset for each nozzle
#define HOTEND_OFFSET_Y { 0.0, -0.24 } // (mm) relative Y-offset for each nozzle
//#define HOTEND_OFFSET_Z { 0.0, 0.00 } // (mm) relative Z-offset for each nozzle
この設定でこれだけズレるという事は分解や組み立ての度に、組付け方次第でだいぶズレるんだろう。ホットエンドの分解の度にこの辺りの調節が必要になってくるんだという事を理解してしまった。これからは気軽に分解できない。気軽に分解できていたのは知らなかったからだ。いろいろ見えてくるものが増えるにつれ、身動きが取れなくなる。知らなかったあの頃にはもう戻れない。
そんなこんなでずれを治したら、2色刷りができた!煙突もズレておらず、黒の縁取りが一応できている。でもやっぱりタレが干渉して表面をボコボコにしていてあんまりきれいじゃない。タレを解消する秘密兵器を購入したのだが、ヘッドの分解と調整がめんどくさいことが分かったので、試すのを先延ばしにしてしまっている。気力が充実しているときに試してみたい。
リニアアドバンスの設定
最後に、Marlinに搭載されたハイテク機能リニアアドバンスも設定しておいた。実際には最後じゃなくて品質を挙げようとあれこれ試している途中でやったわけであるが、どのタイミングでやったか忘れたので記事上では最後になった。
ヘッドの動きは加速したり減速したりするが、エクストルーダーの押し出しは一定の速さで行われるため、フィラメントで描かれる線が加速時には細くなり、減速時には太くなってしまう。これを解決し、加速時と減速時でエクストルーダーの押し出し量を調整するのがリニアアドバンスである。ハイテク。ハイテクカッコいい。
これで、表面の造形が残像のように繰り返されて浮かび上がるゴースト現象などが解決されると言われているが、他にも先に出力したBencyが1色の場合の煙突より2色の時の煙突の方が綺麗に出ているのは、たぶんリニアアドバンスで加速時と減速時の出力が調整されたためだと思われる。
キャリブレーションパターンジェネレーターで調整パターンを出力するG-codeを生成して、それをG-codeファイルに保存してReplicator2X本体にぶち込んで出力してみた。最初は荒い間隔で、次に細かい間隔でたくさん出して、目を凝らして加速部分、減速部分で線が一定の太さで出せているところを見つける。
見つけた均一な線が出せているところの数値をconfiguration_adv.hに入力する。
/**
* Linear Pressure Control v1.5
*
* Assumption: advance [steps] = k * (delta velocity [steps/s])
* K=0 means advance disabled.
*
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
*
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
* Larger K values will be needed for flexible filament and greater distances.
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
* print acceleration will be reduced during the affected moves to keep within the limit.
*
* See https://marlinfw.org/docs/features/lin_advance.html for full instructions.
*/
#define LIN_ADVANCE
#if ENABLED(LIN_ADVANCE)
#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants
#define LIN_ADVANCE_K 0.05 // Unit: mm compression per 1mm/s extruder speed
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
#define EXPERIMENTAL_SCURVE // Enable this option to permit S-Curve Acceleration
#endif
これで、安定して出力ができるようになり、2色刷りも可能となった。あとはベッドレベリングの自動化やoctprintの便利な使い方の追求なんかをやっていきたいと思っているがそれはまた別のお話。気長に待て!