【3Dプリンタ】G-codeの「E値」解説!フィラメント押し出し量の求め方まで

みなさんこんにちは。
ファブテラスいわてスタッフの稲垣です。

今回は3DプリンタにおけるG-codeの「E値」について詳しく解説いたします。
この記事を見ていただけたら、G-codeのE値がどういったものなのか、値はいくつが適切か……などを理解できるかと思います。
3Dプリンタを使うにあたって覚える必要はありませんが、是非3Dプリンタの学習として読んでみてください!

G-codeの事についてあまり知らないよ!という方はこちらの記事もご覧ください!
G-codeを知らない人向けに実際のコードを見ながら解説しています。

では早速見ていきましょう!

E値とは

E値というのは、3Dプリンタにおける「エクストルーダの押し出し量(mm)」を表しています。

もう少しかみ砕いて説明すると、
「フィラメントが3Dプリンタに吸い込まれる長さ」
と捉えてもらえればOKです。

実際のコードを見てみるとこんな感じです。

G1 F2700 E0
G1 F1200 X88.7 Y126.3 E6.13051
G1 X88.7 Y108.7 E8.00372
G1 X146.3 Y108.7 E14.13423
……

G1の指令に続ける形で、Eの値を入力しています。

G1 F○○(速さmm/分) X△△(X座標) Y□□(Y座標) E☆☆(押出量)
(Fの値を省略した際は、最後に入力された速さで動作します)

大体このような形で記述されていることが分かると思います。
Eの☆の部分に、フィラメントを何mm押し出すかを書きます。

その際、Eの値は累積されているところに注意してください。
例のコードを見ると、2行目ではE6.13051、3行目ではE8.00372となっていますが、実際に3行目で押し出されている長さは
8.00372 – 6.13051 = 1.87321mmになります。

なお、累積ではなく、一行ごとに押し出し量を記述する場合は文の間にG92 E0と入力することで行うことができます。

G1 F2700 E0
G1 F1200 X88.7 Y126.3 E6.13051
G92 E0                         ;Eの値を0にリセットすることで、1行ごとに押し出し量を記述できる。
G1 X88.7 Y108.7 E1.87321

押出量の算出法

続いてはこのEの値の算出法です。

スライスソフトを使えば、STLのデータからG-codeにする際に自動で値を求めてくれますが、いったいどうやってこの値を求めているかを考えてみましょう。
以下の図を用いて解説します。

赤色部分の太い方がフィラメント、細い方が印刷部分になります。

Eの値はフィラメントの押し出し量を長さで指定していますが、このEの値は印刷部分の体積で決まります。

つまり、印刷部分の体積とフィラメント押出量の体積を等しくすれば良いわけです。

Eの計算方法

では、Eの求め方を計算式に表してみましょう。

入力側(フィラメント側)と出力側(印刷部分側)で分けて考えると、上の図のようになります。

入力側は円柱の体積の公式を使って求めます。
出力側は吐出口の直径積層の高さ印刷部分の距離の値を使って疑似的な直方体と捉え、式を作ります。

E(フィラメントの押出距離)
D(印刷部分の距離)
Φf(フィラメント断面の直径)
Φn(吐出口の直径)
h(積層1層の高さ)とすると、


入力側(押出量の体積):\(\displaystyle \left(\frac{\phi{f}}{2}\right)^2\times{\pi}\times{E}\)

出力側(印刷部分の体積):\(\displaystyle \phi{n}\times{h}\times{D}\)


このように求められました。

後はこの式をくっつけて、Eを求める式にしましょう。


$$\left(\frac{\phi{f}}{2}\right)^2\times{\pi}\times{E}=\phi{n}\times{h}\times{D}$$
$$E=\frac{\phi{n}\times{h}\times{D}\times{4}}{\phi{f}^2\times{\pi}}$$


少しごちゃごちゃしているのを整えてあげると……


$$E=\frac{4\phi{n}\cdot{h}\cdot{D}}{\pi\phi{f}^2}$$


このようになります。

後は、それぞれ適切な値を入れてあげれば、Eの値が求まります。

例として、
ノズル径0.4mm、フィラメント径1.75mm、積層ピッチ0.2mmとすると、
印刷部分10mmに必要な押出距離Eは

(4×0.4×0.2×10)÷(3.14×1.75×1.75)=0.3327700506954374……

となり、おおよそ0.33277mmほどフィラメントを押し出せば良いということが分かりました!

本当にこれで正しいの?

さて、ここまでEの計算方法についてやってきましたが、果たしてこれで正しい押出距離を求められたといえるでしょうか。

実は、この式を使って求めた値とスライスソフトで出てくる値は少し変わります。
これは、スライサソフトや3Dプリンタのファームウェアによって、微調整をするための計算をしているからだと考えられます。

また、3Dプリンタには「ダイスウェル」と呼ばれる不確定要素も存在します。
ダイスウェルとは、3Dプリンタのノズルから樹脂が出てきた際に少し膨らみ、ノズル径よりも大きくなる現象のことです。

他にも様々な要素が絡んでいるため、この計算だけじゃ正しい押出距離を求められたとは言えません。

しかし、概ねの計算の仕組みは今回紹介したものなので、「仕組みを理解する」という点では納得していただけるものではないでしょうか。
この計算をして実際にG-codeを書いてみよう!……とは、私はなりませんでした笑
改めて、スライサソフトの偉大さを感じましたね……

まとめ

3DプリンタのG-codeにおけるE指令がどのようなものかわかっていただけましたか?

E指令は印刷部分に対するフィラメントの押出量であり、計算で求めることができる!というところを抑えてもらえたらなと思います。

この記事を書くにあたって何度か手計算をしましたが、なかなか骨の折れる作業でした笑
このような面倒な計算を自動でやってくれるスライサソフトは本当に偉大です。

ただ、どうしてもテーブルに上手く印刷物がくっつかない、印刷が失敗したけど何が原因か分からない……という場合はG-codeを見ることでわかるのかな……?とも思いました。
筆者はめんどくさがりな性格なので、G-codeを見ずに数値の調整をして試行錯誤を繰り返すか諦めますが笑

後は、3Dプリンタを自作したい!ファームウェアの書き換えをしたい!という方には参考になったのではないでしょうか。
皆さんの3Dプリンタライフが充実することを願ってます。

それではまた!