Ultimaker Cura 4.8.0 ノズル経路の考察 ライン幅とフローとパスの関係

3Dプリンター

今回はCuraについての話しですが、使い方ではなく精度に関わる話しです。3Dプリンターのノズルから押し出されるフィラメントには幅があります。私が使っているAnycubic Mega-s では通常、0.4mmの設定で印刷をしています。精度良く印刷するためには当然この0.4mmを考慮する必要がありまが、実際にノズルはどの位置を動いているのでしょうか。また、押し出し量(フロー)の設定はこのノズルの位置に関与しているのでしょうか。気になったので、Curaが出力したGコードを覗くことでその関係性を考察します。

Gコードのおさらい

工作機械を制御するためにはプログラム言語のひとつである数値制御プログラムを使用しますが、その中にGで始まる命令があり、それらをまとめてGコードと呼びます。他にもMコードなどたくさんの命令があります。ですので、本来Gコードといえば命令の一つに過ぎないのですが、機械の軸移動などのメインとなる動作をGコードで書くことから、3Dプリンターを制御するプログラム自体をGコードと呼んでいるのではないかと想像しています。私が生業としていた機械加工の現場ではプログラムを作るのは、あくまでもNCプログラムを作るのであって、Gコードを作るとは表現していなかったので、3Dプリンターの世界に入ってみて、Gコードがプログラムそのものを表す雰囲気がある事に違和感を覚えています。

そんな話しはさておき、Gコードとは簡単に言うとノズルの位置を座標で指令したりフィラメントを何ミリ押し出すかなどが記述されたプログラムであり、拡張子は異なっていますが、通常のテキストファイルですので、テキストエディタで中身を覗くことができます。例えば

G1 X66.748 Y109.05 E1.28723

と書いてあれば、ノズルの中心がX座標が66.748mm、Y座標が109.05mmの場所に直線で移動して、その移動の間にフィラメントを1.28723mmの位置まで押し出しなさいという命令となります。
XYZは座標で指令しますので、原点が何処であるかが大切となります。
この行にZ軸の指令がありませんが、指令の無い軸は動作しません。この行より前のどこかで指令された座標値をキープしています。また、動く速さもすでに指令された速さで動きます。この行より前のどこかにFで始まる値があるはずです。

余談ではありますが、産業用の工作機械は立ち上がった時点で機械の位置を把握していますが、安物の3Dプリンターは電源を切ったり印刷が終了したりするとノズルの位置を忘れてしまいます。印刷開始時に毎回ホームポジションに戻るのは原点を再認識する必要があるためです。

フィラメントの押出に関しては、印刷が始まる直前のフィラメントの位置を”0”として、その値を基準として指令の位置まで押し出されます。したがって、実際に押し出される量は、この行のEの値から前の行のEの値を差し引いたものです。
また、Gコードに書かれている最後のEの値を見れば、何mmのフィラメントが必要かがわかります。まぁ、Curaの画面でも見れますが。

Gコードについて深く知りたい方は次のURLが参考になります。

デフォルトでのパスを見る

パスとはノズルが通る経路のことでこれを詳細に見ることでどのように積層されていくかがわかります。まずはデフォルトでのパスを見ていきます。
スライスの条件は以下の通りでライン幅が0.4mmです。

説明のモデルとして、縦横20mmの直方体をスライスしてみました。

この図は2層目の状態を表したものです。モデルの中心が中途半端な座標となってますが、105,105として考えてください。角の座標が上図のようになっています。もし、ノズルがこの座標上を動けばライン幅の分だけ大きい製品が出来上がることになります。

右下の角の詳細を見てみます。

ライン幅が0.4mmですので、ノズルの経路はX座標は114.8、Y座標は95.2になっているはずです。
実際のプログラムを見てみましょう。

349行目が右下の角の座標です。間違いないようです。

初期レイヤーは?

初期レイヤーのライン幅は140%となっていますが、こちらは反映されているのでしょうか?
1層目のラインの様子です。

140%の太さは0.56mmです。この時のプログラムは、

69行目が右下角です。しっかり反映されているようです。

ライン幅を変えてみる

同じモデルをライン幅0.4mmから0.6mmに変更してスライスしてみます。

249行目です。ちゃんと反映されています。
行数が0.4mmの時より随分と少ないのは下面を構成するライン(図中の黄色のライン)の幅も広くしたためライン数が減っていることによります。

フローを変えてみる

Curaのプリント設定のマテリアルにはフローという項目があります。フィラメントの押し出し量を基準値からの増減値で指定します。通常この値を触ることは無いと思いますが、変更した場合にラインの幅が変わることがイメージできますので、フローの変更に伴いノズル位置に影響があるのかを検証しておきます。

外壁のフローのみを150%にしてみました。その他はライン幅も含めデフォルトのままです。Curaの画面上では外壁の幅が広くなっているのが見て取れます。

予想したとおりではありますが、ノズル位置の制御はされていません。幅0.4mmの時と全く同じ座標上をノズルが通過しています。ラインの幅が増える分だけ設計と誤差が発生することになりそうです。
裏を返せばフローを増やせば隣接するラインとの密着度が上がりそうですが、Curaの公式サイトに ”押し出し不足を補うために流量を増やすことはお勧めしません。” と書いてあります。

あとがき

さて、ライン幅とパスの関係について見てきました。ライン幅を広く設定しても設計した大きさとなるようノズルのパスが変更されることがわかりました。また、フローの増減はパスに影響しないこともわかりました。但し、今回はCura上でのシミュレーションとGコードでの検証であって実際の印刷物が精度良く出来上がるかどうかの検証ではありません。印刷された経験のある方ならわかるように実際に精度をだすのはなかなか難しくて、一筋縄ではいかないことが多いです。ということで今回はあまり役に立たない話しでしたが知識として知っていれば面白いのじゃないかと思いまとめてみました。

コメント

スポンサーリンク