ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

3Dプリンターの出力サイズとフィラメント吐出量のキャリブレーション手順と私家版支援ツール

      2020/07/31

Calibration steps and assistance tools to do when you buy a 3d printer 00000

動作手順書であるG-CODEをSDカードなどから読み取って、その指示通りにモーターやヒーターを動かす3Dプリンター。

都度与えられるG-CODEだけが3Dプリンターを動作させる要素のすべてかと思いきや、そうではありません。

搭載されたマイコンに内蔵された不揮発メモリであるEEPROMに記録されている、デフォルト設定も動作に影響を及ぼしています。

EEPROMは電源を切ってもそこに保存された内容は消えません。EEPROMに保存された設定が、3Dプリンターの起動時に読み出され、復元されています。

calibration steps and assistance tools to do when you buy a 3d printer 00002

しかし、それらは3Dプリンターの液晶パネルから存在を伺い知ったり、内容を確認したり変更したりができません。

従って、筆者は3Dプリンターを使い始めて相当期間経過するまで、EEPROMに動作に影響を与える設定が存在するということを知りませんでした。

Calibration steps and assistance tools to do when you buy a 3d printer 00022

EEPROM内の設定には、3DプリンターとPCとをUSBケーブルで接続し、対話的な通信をすることで初めてアクセスできます。

EEPROMに保存された設定を変更すると3Dプリンターの動作を調整できる

EEPROMに保存されている設定の中に「M92 – Set Axis Steps-per-unit」というものがあります。

これは、1mm当たりステッピングモーターを何ステップ動かすか、という変換テーブルです。

具体的には次のようなものですが、この場合「1mm動かせ」というG-CODEが実行されたら、X軸とY軸は80ステップ動かす。Z軸は400ステップ動かす。エクストルーダーは385ステップ動かすという取り決めの意味です。

M92 X80.00 Y80.00 Z400.00 E385

それぞれの駆動軸で減速比が違うので、同じ1mmでもステップ数が違います。

XYZは読んで字の如く。Eはエクストルーダーのことです。

この変換テーブルは重要で、ここの設定を変更することでフィラメントの吐出を適正量に調整でき、指定したノズル移動距離と実際の移動距離にずれがあれば、それを調整できます。

例えば、X軸を10cm移動させたところ、実際には10.7cm移動していた。

この場合、M92のX軸のステップ数を少なくすれば10cmに近づけられることになります。

10 / 10.7 * 80 = 74.77

エクストルーダーに10cm送り出しを指示。送り出されたフィラメントをノギスで測ってみると、実際には10.4cm送り出されていた。

10 / 10.4 * 385 = 370.2

370.2を設定すると送り出し量が減り、10cmに近づくはずです。

3Dプリンターと対話する

筆者が使っているプリンターに、ANYCUBIC MEGA-Sという機種があります。

Marlinというオープンソースのファームウェアベースの3DプリンターはM92に対応しており、同じMarlinベースのANYCUBIC MEGA-Sでも、G-CODEによる設定変更が可能です。

ANYCUBIC MEGA-Sを例に取って、実際にEEPROM内の設定を確認してみます。

まずは、3DプリンターとパソコンをUSBケーブルで接続します。(写真はもう一台のi3 MEGAです。MEGA-Sの方は箱に入っているためこちらを撮影)

Calibration steps and assistance tools to do when you buy a 3d printer 00008

パソコン側から3Dプリンターを認識するのにドライバが必要な場合もあります。

この手の用途にはRepetier-Hostを使うのが常ですが、筆者の使うmacOSではRepetier-Hostのバージョンアップが止まっており利用できないため、今回はArduino IDEを使いました。

Arduino IDEのシリアルモニタ機能で3Dプリンターとのやりとりが可能です。

3DプリンターをUSB経由で認識するのに必要なUSBシリアルドライバーを導入した後Arduino IDEを起動。

ちなみに、ANYCUBIC MEGA-S用のUSBドライバーは以下からダウンロードできます。

「ツール>シリアルポート」から当該のポートを選択。

Calibration steps and assistance tools to do when you buy a 3d printer 00003

「ツール>シリアルモニタ」を起動。

Calibration steps and assistance tools to do when you buy a 3d printer 00004

M92の現状の設定を読み出す

プロンプトからG-CODE「M503 – Report Settings」を実行してEEPROMの内容をダンプしてみます。

M503

プロンプトにM503と打ち込み、送信ボタンを押すだけです。MEGA-Sでは、ボーレートは250000 bpsを選択しました。

Calibration steps and assistance tools to do when you buy a 3d printer 00005

3Dプリンターの起動直後は、ここでダンプできる設定はEEPROMに保存された内容そのものになりますが、SDカード上などのG-CODEを実行すると、それによって一時的に上書きされる場合もあります。

ダンプされたEEPROM内の設定の中に、M92で始まる行があるはずです。これが「M92 – Set Axis Steps-per-unit」、つまり1mm当たりステッピングモーターを何ステップ動かすか、という変換テーブルです。

Calibration steps and assistance tools to do when you buy a 3d printer 00006

仮に、ダンプした数字が以下のようなものであったとしましょう。

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プリンターに設定変更を指示する命令の書式になっており、書き換えて実行すると設定を変更することができます。

Calibration steps and assistance tools to do when you buy a 3d printer 00007

ただし、それだけでは電源を切ると変更したものがリセットされてしまうので、EEPROMに書き込む操作を加える必要があります。それがG-CODEの「M500 – Save Settings」です。

つまり以下のように実行すれば新しい値がEEPROMに保存され、次回以降の起動時にも新しい設定が維持されることになります。

M92 X74.77
M500

もしくは、

M92 X74.77 Y80.00 Z400.00 E385
M500

デフォルト設定への戻し方

キャリブレーションの結果、妙な設定になってしまったと感じたら、以下のようにすると工場出荷設定に戻すことができます。

M502
M500

M92項目のキャリブレーション手順

ここまでの前提を踏まえ、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
  1. M104 S210でヒートヘッドを210度まで加熱
  2. M83でエクストルーダーを相対モードに
  3. G1で実際に送り出し

次に、エクストルーダーから送り出されたフィラメントの長さを確認する方法を検討します。

セットされたフィラメントがあればノズルからアンロードし、クイック継手からPTFEチューブを抜きます。

クイック継手は、黒ないし青の樹脂部品を押し込むとPTFEチューブを抜くことができます。

Calibration steps and assistance tools to do when you buy a 3d printer 00009

溶けた先端をニッパーで切断。

Calibration steps and assistance tools to do when you buy a 3d printer 00010

クイック継手の先端ツライチになるまでフィラメントを引っ込め、ここをスタート地点とします。

Calibration steps and assistance tools to do when you buy a 3d printer 00012

この状態で先述のG-CODEを実行し、送り出された長さを測ればいいことになります。

筆者の場合は送り出されたフィラメントの長さを測るのに悪戦苦闘して、10cmの送り出しが終わったら、送り出された分をニッパーで切断することにしました。

Calibration steps and assistance tools to do when you buy a 3d printer 00014

やってみると分かりますが、曲がったフィラメントをデジタルノギスで測るのはなかなか面倒です。

Calibration steps and assistance tools to do when you buy a 3d printer 00015

そこで、筆者はフィラメントを真っ直ぐに伸ばす治具じぐを作成しました。ここにはめればデジタルノギスでの計測は容易たやすい仕事となります。治具のSTLは公開しています。ダウンロードリンクは後で案内します。

Calibration steps and assistance tools to do when you buy a 3d printer 00016

送り出されたフィラメントの長さを測ったら、前掲のようなやり方でM92の補正値を計算しますが、今回専用のツールを作成しました。

ここではその使い方を案内します。

  1. ツールの一番上の段、「→入力」行に「M503」でダンプした中からM92の行を抜き出してペーストします。ここでは「M92 X80.00 Y80.00 Z400.00 E385」であったとします
  2. 続いて、ツールの上から2番目「エクストルーダー」の行に、実際に送り出されたフィラメントの長さを単位ミリで入力。ここでは104mmであったとします
  3. ツールの一番下の段の「←出力」に自動計算されたM92をコピー。自動計算の結果は「M92 X80.00 Y80.00 Z400.00 E370.19
    M500」と、Eのみ補正後の数字になっているかと思います
  4. 自動計算の結果をArduinoのシリアルモニタにペーストして送信。さらに「M500」でEEPROMに保存

Calibration steps and assistance tools to do when you buy a 3d printer 00017

支援ツールの存在で、プロセスがかなりシンプルになっています。

一度M92の書き換えをやった後、もう一度フィラメントを送り出し、結果を確認します。

  1. フィラメント10cm送り出し
  2. 送り出された長さを計測
  3. 10cmからずれていたら、支援ツールで補正後のM92を自動計算
  4. Arduino IDEのシリアルコンソールで補正後のM92を適用

このプロセスを何度か繰り返すと結果が良くなっていくかと思います。

X軸、Y軸、Z軸のキャリブレーション

続いて、X軸、Y軸、Z軸のキャリブレーションです。

G-CODEでヘッドを各軸10cm移動するよう指示し、実際の移動も10cmになるようにします。

それにはまずヘッドを10cm移動させるためのG-CODEが分からないと始まりません。

具体的には以下のようになります。

  • X軸
G91
G21
G1 X100 F100
  • Y軸
G91
G21
G1 Y100 F100
  • Z軸
G91
G21
G1 Z100 F100

ちなみに、逆方向の移動は「G1 X-100 F100」といった具合にマイナスの数字を与えるとできます。Fは移動のスピードです。例えばF300とすると速くなるのが分かると思います。

  1. G91でヘッドの移動を相対モードに
  2. G21で単位をミリに
  3. G1で実際に移動

G-CODEでグリグリ動かしていると、思うように動かなくなることがあります。その場合は、治具を外した上でHome Allをしてやり直すといいようです。

次に、ヘッドの移動が実際にはどれぐらいになっていたのかを確認する方法を検討します。

宙に浮いているヘッドがどのぐらい移動したのかを測るのはなかなかやっかいです。

筆者はここでも治具じぐを作成しました。

どこを目印にしていいかが難しいので、目印になるパーツを作成してヘッドに取り付けました。視認性を高くするために、白のフィラメントで造形しました。

  • X軸、Y軸用

Calibration steps and assistance tools to do when you buy a 3d printer 00018

  • Z軸用

Calibration steps and assistance tools to do when you buy a 3d printer 00019

ヘッドを改造してある機体ではファンのボルトに共締めしました。

Calibration steps and assistance tools to do when you buy a 3d printer 00020

目印の治具ができるだけベッドやフレームにスレスレになるよう調節してから10cm移動させるG-CODEを実行しました。

その方が位置を確認しやすいからです。

スタート地点と終点にそれぞれ目印を貼って、移動距離を測定しました。この辺は目視頼りなので、そもそもこのやり方では精度は出ないのかもしれません。

Calibration steps and assistance tools to do when you buy a 3d printer 00021

付箋紙だとノギスで挟むとすぐクシャっと折れてしまいやりづらいので、レゴの片面ツルツルパーツを裏返しに使い、両面テープを貼るなど硬いものを使った方がいいと思います。

支援ツールは、エクストルーダのキャリブレーションのときと同様、

  1. 「入力」にM503でダンプした中からM92の行を抜き出しペースト
  2. 「X軸」、「Y軸」、「Z軸」にそれぞれ実際に移動した距離を記入
  3. 「出力」に自動計算された補正済みのM92をコピー
  4. Arduino IDEのシリアルモニタにペーストして送信
  5. M500を続けて実行し、EEPROMに変更を保存

この手順を何度か繰り返して10cmに近づけていきます。

STLダウンロード

記事中で使ったフィラメントをまっすぐにする治具、ヘッドに取り付けた目印とする治具のSTLは以下からダウンロードできるようにしました。

 - 3Dプリンター