フィラメント押出量はどう計算されている?

3Dプリンタの条件出しの際にはスライサーで樹脂の吐出を微調整して合わせこんでいきます。ですが、そもそもフィラメントの押出量はどのようにして決まっているのかについてはスライサー任せのところが多く、実際のところはあまり知られていないようです。
いきなり結論的に書くと、フィラメントの押出量は次のようになっています。

 

フィラメント押出量の計算

 

✅E = (4w·h·L)/πD^2 というのはどこからでてくるかというと…。

押し出す側の体積をVin、押し出される側の体積をVoutとしたときに、押し出す体積は押し出される体積に等しいので、Vin=Voutです。
Vin=E·πD^2/4
Vout=w·h·L
なので、

 

E·πD^2/4=w·h·L → E=(4w·h·L)/πD^2
となります。

 

このEがフィラメントが押し出される長さで、GコードのG1コマンドE指令の値になっています。実際に吐出しながら3点をA→B→C→Aと移動したときのフィラメント押出量を計算するとこんな感じです。

 

Gコード G1コマンドにおけるE指令

 

押出幅(w)0.5mm、積層ピッチ(h)0.2mm、フィラメント径(D)1.75mmとしたときの例です。ΔX, ΔYが各座標の差で、√(ΔX^2 + ΔY^2)が二点間の距離Lになります。後は式に当てはめればEの値が出てきます。実際にGコードとして書かれる場合は、押出量を各パスごとに書く場合と、累積で書く場合の二通りがあります。

 

各パスごとで表記する場合は、毎回G92 E0でリセットをかけます。

G0 X50 Y50
G1 X165 Y95 E5.1342
G92 E0
G1 X70 Y150 E4.5638
G92 E0
G1 X50 Y50 E4.2399

 

押出量を累積で書くとこんな感じです。

G0 X50 Y50
G1 X165 Y95 E5.1342
G1 X70 Y150 E9.6980
G1 X50 Y50 E13.9379

 

実際にスライサーで扱われる場合には、Eの値は係数がかかっています。この係数がフローとかフローレートといわれるものになります。

 

3Dプリンタのフローレート

 

How is the E command in the G-code calculated?
https://www.reddit.com/r/3Dprinting/comments/821lze/how_is_the_e_command_in_the_gcode_calculated/dv7exkt/

 

はたしてこれで吐出は解決か?

これで全部吐出は正確に記述できたようにも思えますが、実はそうでもありません。大きく2つの不確定要素が残ります。

 

1. 実際のビード幅が確定しない

上の図の中で、積層ピッチ(h)、ビードの長さ(L)、フィラメント径(D)は確定しますが、ビードの幅(w)は確定しません。実際に定着する際のビードの幅は積層ピッチやノズル温度によって変わってくるのと、ダイスウェルで振られるからです。スライサーで入力する押出幅は、値を設定するとその分の体積を押し出してくれるだけで、実際にその通りの幅で定着するとは限りません。

 

2. 実際のビード断面は四角形ではない

また、計算ではビード断面が四角形だとしていますが、実際のビード断面は楕円状態になっているので、どうしても誤差が生じます。

 

3Dプリンタの実際のビード断面と計算上のビード断面

 

新規のフィラメントだとこのあたりはどうしても読めないので、スライサーで押出幅やフローなどを微調整して現物を確認し、何度も調整をかけて合わせ込んでいくことが必要になります。

 

引用:Calculating Filament Feed in the Fused Deposition Modeling Process to Correctly Print Continuous Fiber Composites in Curved Paths