【XYペンプロッター制作③】CNCシールドの設定「マイクロステップ分解能」
こんなこと、やります。
- CNCシールドでマイクロステップ分解能の設定
- 単位mmあたりのステップ数[step/mm]の算出
- Grblで設定値の変更
この記事では、精度を出すためにステッピングモータの動かす単位をできるだけ小さくする「マイクロステップ分解能の設定」を行います。
▼ 本ページを読み進める前に、こちらの記事に目を通しておくと理解がスムーズです。
つかうもの
本記事で使うものはこちらです。
- Arduino Uno
- ステッピングモータ
- CNCシールド
- モータドライバ
- スイッチング電源
- タイミングベルト&タイミングプーリー
- リニアガイド
CNCシールドのバージョンはV3.00です。また、Arduino Unoに書き込んだGrblはv0.8cとなります。
その他に、細かい部品は3Dプリンタで自作してます。ちなみに、私が使用している3DプリンタはCrealityの「Ender3 V2」になります。
▼ 作ったパーツはThingiverseへ公開してます。
マイクロステップ分解能の設定
ここでは、ステッピングモータのマイクロステップ分解能の設定を行います。マイクロステップの値を小さくすることで、ステッピングモータをより細かく動かす事ができます。つまりCNC工作の精度を上げたい場合は、マイクロステップ値を適正なものにします。
CNCシールド端子をショート
モータドライバの下に配置されている6つのピンで、マイクロステップの設定を行うことができます。 CNCシールドV3.00、A4988モータドライバの場合、次の表のマイクロステップ値となります。
M0 | M1 | M2 | マイクロステップ |
---|---|---|---|
L | L | L | フルステップ 1/1 |
H | L | L | 1/2 |
L | H | L | 1/4 |
H | H | L | 1/8 |
H | H | H | 1/16 |
開放状態がL、ショートさせるとHになります。ここでは、最大の分解能である1/16に設定しました。
▼ 写真のように端子をショートさせるためには、こちらのジャンパーキャップが必要です。
単位mmあたりのステップ数の算出
実際にGコードでCNC工作するためには、ステッピングモータのステップ数でどれだけ移動するかあらかじめ計算し、Grblに設定しなければなりません。当然、ステッピングモータの種類や、タイミングベルト、プーリ、マイクロステップの設定値によって速度は異なります。ここでは次のようにして速度を算出しました。
使用したタイミングベルトのピッチは2mmです。また、タイミングプーリには歯が20個ついているので、1回転すると40mm移動することになります。
ステッピングモータは、 Raspberry Piでステッピングモータの制御 の記事で使用した SM-42BYG011 を使用しました。データシートによれば200[step/回転]となります。まとめると次のとおりです。
- 分解能、1/16
- タイミングベルト&プーリ、40[mm/回転]
- ステッピングモータ、200[step/回転]
次式により、ステッピングモータを1回転させるためには3200ステップ必要になります。
$$ 200 \times 16 = 3200 [step/回転] $$さらに次式により、タイミングベルトを使って1mm移動させるには、80ステップ必要です。
$$ \frac{3200}{40} = 80 [step/mm]$$ここで算出された80[step/mm]を、Grblの設定値に入力します。
Grbl 0.8cの設定値一覧
ここで、Grbl 0.8cの設定値一覧を確認します。ただし、Grbl 0.9以降の場合は、番号と内容が大きく変わってますのでご注意ください。 $$コマンドで設定値一覧を表示できます。
番号 | 内容 | 設定値 | 意味 |
---|---|---|---|
$0 | x, step/mm | 250 | X軸の単位mmあたりのステップ数 |
$1 | y, step/mm | 250 | y軸の単位mmあたりのステップ数 |
$2 | z, step/mm | 250 | z軸の単位mmあたりのステップ数 |
$3 | step pulse, usec | 10 | |
$4 | default feed, mm/min | 250 | |
$5 | default seek, mm/min | 500 | |
$6 | step port invert mask, int:11000000 | 192 | |
$7 | step idle delay, msec | 25 | |
$8 | acceleration, mm/sec^2 | 10 | |
$9 | junction deviation, mm | 0.05 | |
$10 | arc, mm/segment | 0.1 | |
$11 | n-arc correction, int | 25 | |
$12 | n-decimals, int | 3 | |
$13 | report inches, bool | 0 | |
$14 | auto start, bool | 1 | |
$15 | invert step enable, bool | 0 | |
$16 | hard limits, bool | 0 | リミットスイッチの有効化 |
$17 | homing cycle, bool | 0 | ホーミングサイクルの有効化 |
$18 | homing dir invert mask, int:00000000 | 0 | |
$19 | homing feed, mm/min | 25 | ホーミング中に座標ゼロポイントを決定するときの速度設定 |
$20 | homing seek, mm/min | 250 | ホーミング中にリミットスイッチを探すときの速度設定 |
$21 | homing debounce, msec | 100 | ホーミング時でリミットスイッチを押すときのチャタリング/デバウンス防止のためのディレイ時間設定 |
$22 | homing pull-off, mm | 1 | ホーミングサイクル後、リミットスイッチから少しだけ離れておく距離(事故防止のため) |
この中で、今回変更が必要となる設定値は、$0の「x, step/mm」です。
Grblで設定値の変更
Grblの設定値を変更します。Grbl 0.8cでは、$0がX軸の単位mmあたりのステップ数[step/mm]になってます。デフォルトでは250[step/mm]ですが、先ほど計算された80[step/mm]を設定します。
GRBLコントローラなどで、つぎのコードを入力して設定値を変更します。
$0=80
この後、たとえばちょうど50mmだけ移動させてみましょう。G01 X50を命令すると、こちらの動画のようにジャスト50mmの移動ができました。
ピッタリ5mm移動【XYプロッターへの道】 - YouTube
分解能1/16 プーリ40mm/回転 モータ200step/回転 以上より80step/mmが導き出され、$0=80で設定値を変更
G01 X50で移動させました。
さて、この後リミットスイッチを取り付けてホーミング(機械原点復帰)を行いたかったのですが、使っていたGRBLコントローラとGrbl v0.8が少し古くて問題があったため、Grbl v0.9をインストールしCNCjsを使うことにしました。
▼ CNCjsの設定はこちら。