3Dプリンターの出力サイズとフィラメント吐出量のキャリブレーション手順と私家版支援ツール
2020/07/31
価値ある情報をユーザー視点で発信するブログ
2020/07/31
動作手順書であるG-CODEをSDカードなどから読み取って、その指示通りにモーターやヒーターを動かす3Dプリンター。
都度与えられるG-CODEだけが3Dプリンターを動作させる要素のすべてかと思いきや、そうではありません。
搭載されたマイコンに内蔵された不揮発メモリであるEEPROMに記録されている、デフォルト設定も動作に影響を及ぼしています。
EEPROMは電源を切ってもそこに保存された内容は消えません。EEPROMに保存された設定が、3Dプリンターの起動時に読み出され、復元されています。
しかし、それらは3Dプリンターの液晶パネルから存在を伺い知ったり、内容を確認したり変更したりができません。
従って、筆者は3Dプリンターを使い始めて相当期間経過するまで、EEPROMに動作に影響を与える設定が存在するということを知りませんでした。
EEPROM内の設定には、3DプリンターとPCとをUSBケーブルで接続し、対話的な通信をすることで初めてアクセスできます。
もくじ
EEPROMに保存されている設定の中に「M92 – Set Axis Steps-per-unit」というものがあります。
これは、1mm当たりステッピングモーターを何ステップ動かすか、という変換テーブルです。
具体的には次のようなものですが、この場合「1mm動かせ」というG-CODEが実行されたら、X軸とY軸は80ステップ動かす。Z軸は400ステップ動かす。エクストルーダーは385ステップ動かすという取り決めの意味です。
それぞれの駆動軸で減速比が違うので、同じ1mmでもステップ数が違います。
XYZは読んで字の如く。Eはエクストルーダーのことです。
この変換テーブルは重要で、ここの設定を変更することでフィラメントの吐出を適正量に調整でき、指定したノズル移動距離と実際の移動距離にずれがあれば、それを調整できます。
例えば、X軸を10cm移動させたところ、実際には10.7cm移動していた。
この場合、M92のX軸のステップ数を少なくすれば10cmに近づけられることになります。
エクストルーダーに10cm送り出しを指示。送り出されたフィラメントをノギスで測ってみると、実際には10.4cm送り出されていた。
370.2を設定すると送り出し量が減り、10cmに近づくはずです。
筆者が使っているプリンターに、ANYCUBIC MEGA-Sという機種があります。
Marlinというオープンソースのファームウェアベースの3DプリンターはM92に対応しており、同じMarlinベースのANYCUBIC MEGA-Sでも、G-CODEによる設定変更が可能です。
ANYCUBIC MEGA-Sを例に取って、実際にEEPROM内の設定を確認してみます。
まずは、3DプリンターとパソコンをUSBケーブルで接続します。(写真はもう一台のi3 MEGAです。MEGA-Sの方は箱に入っているためこちらを撮影)
パソコン側から3Dプリンターを認識するのにドライバが必要な場合もあります。
この手の用途にはRepetier-Hostを使うのが常ですが、筆者の使うmacOSではRepetier-Hostのバージョンアップが止まっており利用できないため、今回はArduino IDEを使いました。
Arduino IDEのシリアルモニタ機能で3Dプリンターとのやりとりが可能です。
3DプリンターをUSB経由で認識するのに必要なUSBシリアルドライバーを導入した後Arduino IDEを起動。
ちなみに、ANYCUBIC MEGA-S用のUSBドライバーは以下からダウンロードできます。
「ツール>シリアルポート」から当該のポートを選択。
「ツール>シリアルモニタ」を起動。
プロンプトからG-CODE「M503 – Report Settings」を実行してEEPROMの内容をダンプしてみます。
M503
プロンプトにM503と打ち込み、送信ボタンを押すだけです。MEGA-Sでは、ボーレートは250000 bpsを選択しました。
3Dプリンターの起動直後は、ここでダンプできる設定はEEPROMに保存された内容そのものになりますが、SDカード上などのG-CODEを実行すると、それによって一時的に上書きされる場合もあります。
ダンプされたEEPROM内の設定の中に、M92で始まる行があるはずです。これが「M92 – Set Axis Steps-per-unit」、つまり1mm当たりステッピングモーターを何ステップ動かすか、という変換テーブルです。
仮に、ダンプした数字が以下のようなものであったとしましょう。
M92 X80.00 Y80.00 Z400.00 E385
ノズルをX軸に沿って10cm動かすよう指示したところ、実際には10.7cm移動していたとしたら、10 / 10.7 * 80 = 74.77で74.77にすれば10cmに近づくはず。この場合、実行すべきG-CODEは以下のようになります。
M92 X74.77
他の数字はEEPROMに保存されていた数字そのままでYZ、Eもいっしょに実行しても同じことです。
M92 X74.77 Y80.00 Z400.00 E385
M503で現状のEEPROMに保存されている設定値としてダンプしたM92ですが、これは3Dプリンターに設定変更を指示する命令の書式になっており、書き換えて実行すると設定を変更することができます。
ただし、それだけでは電源を切ると変更したものがリセットされてしまうので、EEPROMに書き込む操作を加える必要があります。それがG-CODEの「M500 – Save Settings」です。
つまり以下のように実行すれば新しい値がEEPROMに保存され、次回以降の起動時にも新しい設定が維持されることになります。
M92 X74.77 M500
もしくは、
M92 X74.77 Y80.00 Z400.00 E385 M500
キャリブレーションの結果、妙な設定になってしまったと感じたら、以下のようにすると工場出荷設定に戻すことができます。
M502 M500
ここまでの前提を踏まえ、3Dプリンターの動作を改善するキャリブレーションの実際の手順を、ANYCUBIC MEGA-Sを例に取って解説します。
キャリブレーションには、最低限デジタルノギスが必要でしょう。
0.1mmオーダーで長さを測るのは、目視では難しいと思います。
おすすめのデジタルノギスは筆者の愛用するシンワの19975です。
非常にしっかりした作りです。自分で使っているので、その品質は日々体感しています。
予算に余裕があればミツトヨのCD-15APXも検討の価値があります。
計測機器の校正を仕事の一つとしている方によれば、ミツトヨが優れていることに間違いはないが、シンワとミツトヨの差は0.02mmあるかないかとのことで、サーボの精度が0.1mmオーダーの低価格3Dプリンタの世界では差が出ないかもしれません。
まずはエクストルーダーのキャリブレーションから始めます。G-CODEでフィラメントを10cm送り出すよう指示し、実際の送り出しも10cmになるようにします。
それにはまずエクストルーダーに10cmフィラメントを送り出させるためのG-CODEが分からないと始まりません。
具体的には以下のようになります。
M104 S210 M83 G1 E100 F100
次に、エクストルーダーから送り出されたフィラメントの長さを確認する方法を検討します。
セットされたフィラメントがあればノズルからアンロードし、クイック継手からPTFEチューブを抜きます。
クイック継手は、黒ないし青の樹脂部品を押し込むとPTFEチューブを抜くことができます。
溶けた先端をニッパーで切断。
クイック継手の先端ツライチになるまでフィラメントを引っ込め、ここをスタート地点とします。
この状態で先述のG-CODEを実行し、送り出された長さを測ればいいことになります。
筆者の場合は送り出されたフィラメントの長さを測るのに悪戦苦闘して、10cmの送り出しが終わったら、送り出された分をニッパーで切断することにしました。
やってみると分かりますが、曲がったフィラメントをデジタルノギスで測るのはなかなか面倒です。
そこで、筆者はフィラメントを真っ直ぐに伸ばす
送り出されたフィラメントの長さを測ったら、前掲のようなやり方でM92の補正値を計算しますが、今回専用のツールを作成しました。
ここではその使い方を案内します。
支援ツールの存在で、プロセスがかなりシンプルになっています。
一度M92の書き換えをやった後、もう一度フィラメントを送り出し、結果を確認します。
このプロセスを何度か繰り返すと結果が良くなっていくかと思います。
続いて、X軸、Y軸、Z軸のキャリブレーションです。
G-CODEでヘッドを各軸10cm移動するよう指示し、実際の移動も10cmになるようにします。
それにはまずヘッドを10cm移動させるためのG-CODEが分からないと始まりません。
具体的には以下のようになります。
G91 G21 G1 X100 F100
G91 G21 G1 Y100 F100
G91 G21 G1 Z100 F100
ちなみに、逆方向の移動は「G1 X-100 F100」といった具合にマイナスの数字を与えるとできます。Fは移動のスピードです。例えばF300とすると速くなるのが分かると思います。
G-CODEでグリグリ動かしていると、思うように動かなくなることがあります。その場合は、治具を外した上でHome Allをしてやり直すといいようです。
次に、ヘッドの移動が実際にはどれぐらいになっていたのかを確認する方法を検討します。
宙に浮いているヘッドがどのぐらい移動したのかを測るのはなかなかやっかいです。
筆者はここでも
どこを目印にしていいかが難しいので、目印になるパーツを作成してヘッドに取り付けました。視認性を高くするために、白のフィラメントで造形しました。
ヘッドを改造してある機体ではファンのボルトに共締めしました。
目印の治具ができるだけベッドやフレームにスレスレになるよう調節してから10cm移動させるG-CODEを実行しました。
その方が位置を確認しやすいからです。
スタート地点と終点にそれぞれ目印を貼って、移動距離を測定しました。この辺は目視頼りなので、そもそもこのやり方では精度は出ないのかもしれません。
付箋紙だとノギスで挟むとすぐクシャっと折れてしまいやりづらいので、レゴの片面ツルツルパーツを裏返しに使い、両面テープを貼るなど硬いものを使った方がいいと思います。
支援ツールは、エクストルーダのキャリブレーションのときと同様、
この手順を何度か繰り返して10cmに近づけていきます。
記事中で使ったフィラメントをまっすぐにする治具、ヘッドに取り付けた目印とする治具のSTLは以下からダウンロードできるようにしました。