1.はじめに
他投稿記事で3Dモデルをスライスし、構成ごとにノズルが移動する経路(パス)を算出できました。
最後に、このパス情報を使い、G-Code化していきます。
- ここでの説明には花瓶モード(Simplify3Dでのvase mode)は含まれません。1層毎に積層していくモードです。
2.G-Codeファイルの構成
G-Codeファイルは以下のような構成になっています。
- 初期化
- 層毎の出力
- 後始末
層毎の出力は以下のような構成になっています。
- Zの移動
- スカード/ブリム出力
- モデル(ターゲット/ラフト)出力
3-1. 外周
3-2. 内周
3-3. インフィル - サポート出力
4-1. 通常サポート
4-2. 密集サポート
3.初期化/後始末
G-Codeではヘッドの現在位置が不明です。(3Dプリンタ内部(ファームウェア)でも不明です。ファームウェアが指示を出した場所であるとの過程で制御されています)
このため、最初にG28で全軸を初期位置へ移動させます。
その後、ベッド温度の設定,ヘッド温度の設定,ユーザ指定の初期化コードなどを実行します。
また、ファームウェアに対し、これから指定する座標系のモードなどを指定します。
後始末としては、ベッドやヘッドを初期位置に戻したり、熱している箇所を冷却(加熱停止)したりします。
4.層毎の出力
積層式ですので、第1層から順次出力します。
スカート/ブリムは特性上最初に出力する対象です。
次にラフトやターゲットモデルの外壁となるループを出力し、インフィルで塗りつぶします。
サポートは最後に出力します。
5.G-Code化時の考慮点
5.1 パス
ヘッドの移動などは、基本G1を利用します。
G1を指定で現在位置から指定位置に移動します。
モデルなどの出力対象の場合、Eパラメータを付けると、移動経路を移動中、所定の長さのフィラメントを押し出すことになります。
Eパラメータが無い場合は、フィラメントの押し出しをせずにヘッド/ベッドが移動します。
また、場所によりFパラメータを与え速度を変更することも可能です。
- 現状は未実施ですが、場所に応じて、”ゆっくり”や”早く”することが、出力品質に影響すると考えています。(”ブリッジ部分は早く”など)
5.2 単位系
座標は[mm]単位のようです。
速度は[mm/分]のようです。私はこの単位が分かりにくいので、パラメータファイルの速度は[mm/s]としています。
このためG-Code化のときに変換しています。
5.3 フィラメントの量
この点については、各種議論されているようです。
**
ノズルの吐出部分は基本円形状です。
ですが、吐出後は、ベッドや、オブジェクトの上に0.1~0.3[mm]の高さで押し付けています。
このため、出力後の断面は円形では無く、長方形+左右に半円をつけた楕円のような形ではないか?などの議論です。
**
例:長方形と考えるの場合
ノズル径=0.4[mm]
積層高さ=0.3[mm]
フィラメント径=1.75[mm]
G-Code
G1 X0 Y0
G1 X10 Y0 E?
の場合、X方向へ10[mm]の長さの線となります。
幅はノズル径,高さは積層高さですので、出力する体積として、10x0.4x0.3=1.2[mm^3]となります。
この体積に相当するフィラメントの押出量を逆算します。
フィラメントの断面積は、円の面積から約2.4[mm^2]ですので、1.2[mm^3]の体積を出力するには 0.5[mm] 押し出せば良いことになります。
この値に、ユーザ指定のパラメータの押出率を適用してG-Code化しています。
本ソフトでは現状、まだ実験段階ですが、スライス時に「基準となるノズル径で線を出力する」や「細く(0.4[mm]ノズル径に対し0.2[mm]幅)する」などの付加情報も算出するようにし、条件に応じて3種類の断面を分けています。
1つ目は、標準的場合(0.4[mm]ノズル径で0.3[mm]高さ)の場合、長方形+円となる断面。
2つ目は、ノズル径のままの円(高さがノズル径以上ある場合は、そのままの形状としてる)
3つ目は、指定幅と積層高さの長方形(左右が出力済の物体があり幅0.2[mm]の溝を埋めるなどの場合)