SIMPLIFY3Dでデュアルノズルのオフセット値を設定する方法

SIMPLIFY3Dを購入して3Dプリントが楽しくなりました。以前はSlic3rのバグの回避に頭を悩ませる方が多かったですから。

今回はデュアルノズルのオフセット補正の設定について書いてみます。
プレビューでズレて表示されてるなんてイヤだ!


前回の記事 SIMPLIFY3Dでデュアルノズルの造形をしてみる ではデュアルエクストルーダの設定を行い何とかABSとPolySupportを使った造形をすることができました。

しかしながら、ノズル位置のオフセット指定に納得できません。
もっと良い方法があるはず。システムの設計としてこんな当たり前の問題を解決する方法としてはあまりにもおかしい。ちなみに私は基本的にシステム設計屋です。

最もスマートなのは3Dプリンタにノズル位置のオフセット値を記憶して、送られてきたG-CodeのTool番号に合わせたオフセット値をプリンタで計算し実際の座標を求める方法です。
こうすればプリンタ個体に固有のオフセット値はG-Codeと関係が無くなり、オフセット値の違いに影響されないG-Codeになります。G-Codeを他のプリンタで使えるという事です。G-Codeの座標自体がオフセットを含んだ状態では1台1台専用のG-Codeが必要になってしまいます。

とはいえ、BS01のファームウエアはオフセット値を後で変えて記憶するようにできていません。ファームのパラメータを事前に変更して焼けば可能そうです。(良く知りませんがたぶん)

オープンソースでできたシステムとはいえこんな当たり前の課題を解決するのにもう少しスマートな方法は無いのか?
個人用なら1台しか使わないからどうでもいいっていえばそうなんですけど。もっとシステマチックな上位設計でカバーする方法があるはずです。

と、ハク姐さんのプリントを仕込んだ後、ベッドで横になりながらスマホで検索してしまいました。

その結果、よさそうな情報が見つかりました。
私とは逆にfirmwareを使わない方法は無いのか聞いていたようですけど。
"I ended up fixing the issue by not using the firmware. For some reason the commands were being ignored.
So what I have done is the following
I added this to my gcode.start file.
M218 T1 X0.0 Y31.28
and added this to the (tools) (firmware) ( General) (Tool Change) T$ F5000
This seems to work just fine."
General Discussion and Tips / SIMPLIFY3D
"M218" コマンド。何をするコマンドでしょう?

"Sets hotend offset (in mm): T<extruder_number> X<offset_on_X> Y<offset_on_Y>."
RepRap wiki
ホットエンドのオフセットを設定するコマンドのようです。
おぉ、これこれ!

プリンタにオフセット値が記憶できないなら、最初に1回オフセット値を送ってプリンタ側で補正してくれればいいはず。それを実現するのがM218コマンドのようです。このM218コマンドのパラメータだけプリンタに依存する値になってしまいますが、G-Codeのすべての座標がオフセットの影響を受けるのに比べれば1~2行の修正でオフセットの問題を回避できてしまいます。この程度のG-Codeの修正ならバッチやスクリプトでもできます。十分ですね。

となると、次の問題はBS01がM218命令を受け付けるのか?という事になります。
先ほどのwikiに命令をサポートするfirmwareが載っています。ほとんど対応してないですね。
Marlinは唯一対応しています。

BS01のファームはMarlinだと記憶しています。つまり使えるはず・・・。
ちょっとM218で検索すると・・・日本語の情報が無い!ダメなの?誰も使ってないの?

これは実機で試すのが早いですね。

ノズル位置をオフセットする

まずはSIMPLIFY3DのFFF SettingsのG-Codeタブで設定したオフセットを消去します。


前回の記事でチェックしてしまった Apply toolhead offsets to G-Code coordinatesのチェックを外します。
Toolhead offsetの値は何に使われているか判りません。今のところ何も影響してないようですので放っておきます。

これでG-Codeの座標はオフセットを含まない値となるはずです。

そして、M218コマンドをプリントの最初に送るようにします。
ScriptsタブのStarting Scriptにコマンドを追加します。



ノズルT1の設定をしてみましょう。

M218 T1 X28.0 Y0.0 ; T1 extruder offset

BS01の場合、ホームに近い左側がT0、右側がT1です。T0のオフセットはゼロ、T1にすべてのオフセットを書きます。
このオフセット値は実際にノズルの位置合わせをする値を設定します。Y方向もね。

適当なモデルを置いてスライスするとプレビューでtool間のズレが無くなりました。当たり前ですね。
これで実際にプリントしてズレが無くなればハッピー。

1層だけ見れば結果が判るのでさっさとプリントしてみると・・・ちゃんと出ました!

実はオフセット値を最初-28としたのですが、ズレが広がりました。+28mmでいいみたいです。Y方向の符号は試していません。

これでSIMPLIFY3Dのプレビュー画面でズレて表示することは無くなります。BS01を使う他の人にG-Codeファイルを渡す時もこのコマンドだけ値を修正すれば使えることになります。そんな場面は個人でそうそうないと思いますが。

あぁ、すっきり。こうでなくてはいけません。

原点をオフセットする

ノズルのオフセットをすると原点もそれに合わせてオフセットする必要があります。

M218コマンドでノズルのオフセットを設定したため指定座標が同じなら2つのノズルは同じ場所へ移動するようになります。
さて、ここで疑問が生じます。X座標のゼロは実機のどこでしょうか?

BS01で座標X=0はいつもおなじみの左手前の位置です。シングル機なら左ノズルの原点と解釈してもいいです。
しかし、右ノズルは?右ノズルは物理的に左ノズルのあるX=0の位置へ行けません。

ヘッドが原点にある時、論理的な原点は左ノズルの位置ではなく右ノズルの位置にある必要があります。そうでなければ両方のノズルがx=0で同じ造形ベッド上の位置に来れません。

何を書いてるか分からなくなってきました。左端は右ノズルが届かないから使うなという事です。
原点をX方向に30mmほど移動する必要があります。

M218コマンドでtoolのオフセットを設定すると自動的に原点がオフセットされるようです。

これでG-CodeなどでTool0のG1 X0の移動をすると、普段見慣れたホーム位置より右に約30mmズレた位置に来るようになります。この場所なら両方のノズルがたどりつけます。

実験していて混乱したことがあります。
何度かM218コマンドを手動で送って実験したのですが、原点のオフセットが勝手に設定される時と設定されない時がありました。

Tool0もM218コマンドを書いてみました。
M218 T0 X0.0 Y0.0 ; T0 extruder offset
M218 T1 X28.0 Y0.0 ; T1 extruder offset

すると原点はオフセットしませんでした。ノズル位置のオフセットはもちろん反映されています。

順番を変えてみました。
M218 T1 X28.0 Y0.0 ; T1 extruder offset
M218 T0 X-14.0 Y0.0 ; T0 extruder offset

原点はオフセットしました。

オフセットをプラスマイナスで分けてみました。
M218 T0 X-14.0 Y0.0 ; T0 extruder offset
M218 T1 X14.0 Y0.0 ; T1 extruder offset

原点はオフセットしました。

どういうことでしょうか?ファームのバグでしょうか?私のコマンドの理解は不足しています。firmwareのコードでも見ないと理解できないです。

2016/05/18追記
【原点のオフセットの再現性がありません。原点のオフセットをコマンドで行う方が確実のようです。

G28 ; home all axes
M218 T1 X28.1 Y0.0 ; T1 extruder offset
G92 X-30.0 ; offset origin


G28でホームポジションへ移動した後、G92で座標をオフセットします。オフセット座標はノズルの実際のオフセットではなくX-30.0だけで良いでしょう。】

最大造形サイズを小さくする

左端側、原点の座標は解決できました。次は右端側の設定をします。
左ノズルが右ノズルの位置へ移動できない範囲をソフトに教えなくてはいけません。これは最大造形サイズを設定すれば良いでしょう。

オフセットの分だけSIMPLIFY3Dの造形サイズのXを小さくします。シングルノズルと同じサイズのままでは可動範囲を超えてしまいます。


X方向は約30mm使えなくなるので120mmをBuildVolume欄に設定しましょう。
Y方向のオフセットも同様に指定できますが、可動範囲を超えるようなオフセット値はあり得ないでしょうから変えなくて良いでしょう。

効能

今回の設定でSIMPLIFY3Dのプレビューは実際の造形と一致するようになったはずです。
そういえばsoftware endstopって無かったのでしょうか?ヘッドぶつけすぎです。slic3rでヘッドがぶつかることはなかった気がする。何か忘れてるかな?

今回の方法はSIMPLIFY3Dだけではなく他のスライサーでも使えるでしょう。いや、使うべきです。

Slic3rの作者さんも認識してます。

Option to use firmware-controlled toolhead offset (M218)
alexrj commented on 15 Nov 2013
"Hi, people who use firmware-controlled extruder offset just set the Extruder Offset options in Slic3r to [0,0] and add M218 to the start G-code.
Adding an option for basically injecting one M218 line seems an overkill solution to me. But I'll leave this open for further consideration."

また、デュアル機のG-Code交換が簡単になります。1行書き換えるだけですから。スライサーの比較などにいいかも。
あっ、Slic3rのExtruder指定のオフセットバグにも効くかも。オフセットを変に反映するんで悩んでたんですよね。

Jeffさん、ありがとう!

コメント

最近のコメント

Threaded Recent Comments will be here.