サイトロゴ

【XYペンプロッター制作⑤】リミットスイッチでホーミング

著者画像
Toshihiko Arai

はじめに

こんなこと、やります。

  • Y軸のリニアレールの追加
  • CNCシールドV3.00にリミットスイッチ取り付け
  • Grbl v0.9の初期設定値の変更
  • ホーミングで原点復帰

この記事は、ArduinoでXYプロッターを制作する過程の一部をご紹介してます。今回はホーミングに絞って解説いたします。

Y軸のリニアレール追加

X軸のステッピングモータ側と同じレールを作って、Y軸にしました。タイミングベルトは少し緩めに作って、後からバネで引っ張ります。タイミングベルトの接続部分は、写真のとおり機械的に圧着してつなぎ合わせてます。

細かい部品は3Dプリンタで自作してます。作ったパーツはThingiverseで無料ダウンロードいただけます。 https://www.thingiverse.com/thing:5241745/files

リミットスイッチの取り付け

写真のように、マイクロスイッチをホットボンドで固定しました。合計2つのマイクロスイッチを使って、X軸とY軸の片側にリミットスイッチを設けいてます。安全を考えると、もう片方側にもリミットスイッチを設けるべきですが、今回は最小限の設備で先へすすめます。

リミットスイッチの配線

リミットスイッチの配線は次のとおりです。

マイクロスイッチの端子は通常、C(Common)、NO(Normally Open)、NC(Normally Closed)です。片方の配線をCommonへつなぎ、もう片方の配線をNormally Openにつなげば、スイッチが押されていないときはオープン(絶縁)状態になります。また、Normally Closedにつなげば、スイッチが押されていないときは、ショート(導通)状態になります。 ここらへんは、 でも扱った、リレースイッチと同じ原理になります。

環境によっては、リミットスイッチ周辺のノイズ対策が必要になるようです。 https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches

Grbl v0.9設定値

ホーミングを行うにあたって、Grbl v0.9の初期設定値をいくつか変更する必要がありました。ここでは私の環境下での設定値を紹介します。

$0=10 (step pulse, usec)

モータードライバへ送る最小パルスの長さです。A4988を使用する場合は、1μs以上が必要です。 A4988のデータシート デフォルトのままです。

$1=25 (step idle delay, msec)

デフォルトのままです。

$2=0 (step port invert mask:00000000)

デフォルトのままです。

$3=0 (dir port invert mask:00000000)

デフォルトのままです。

$4=0 (step enable invert, bool)

デフォルトのままです。

$5=0 (limit pins invert, bool)

デフォルトのままです。

$6=0 (probe pin invert, bool)

デフォルトのままです。

$10=3 (status report mask:00000011)

デフォルトのままです。

$11=0.010 (junction deviation, mm)

デフォルトのままです。

$12=0.002 (arc tolerance, mm)

デフォルトのままです。

$13=0 (report inches, bool)

デフォルトのままです。

$20=0 (soft limits, bool)

ソフト的に移動限界を制御するかどうか設定します。※今回は使用しません。

$21=1 (hard limits, bool)

リミットスイッチを使う場合は、1を設定します。

$22=1 (homing cycle, bool)

ホーミングサイクルを許可するかどうかの設定です。ホーミングするには1を設定します。

$23=7 (homing dir invert mask:00000000)

ホーミングの回転方向を変えます。設定値と動作の関係は、次の表のとおりです。

設定値 マスク Xを反転 Yを反転 Zを反転
0 00000000 N N N
1 00000001 Y N N
2 00000010 N Y N
3 00000011 Y Y N
4 00000100 N N Y
5 00000101 Y N Y
6 00000110 N Y Y
7 00000111 Y Y Y

当然ですが、ステッピングモータの端子の向きによっても移動方向は反転されます。私の場合は、$23=7にしましたが、CNCマシンのセッティング合わせて変更してください。

$24=25.000 (homing feed, mm/min)

ホーミング後の微調整時の速度です。

$25=500.000 (homing seek, mm/min)

ホーミング中の速度です。

$26=250 (homing debounce, msec)

機械式のリミットスイッチにて、チャタリングを防ぐための余裕時間です。

$27=1.000 (homing pull-off, mm)

リミットスイッチを押した後に、設定値の距離だけ移動して、リミットスイッチが入りっぱなしになるのを防ぎます。

$100=80.000 (x, step/mm)
$101=80.000 (y, step/mm)
$102=250.000 (z, step/mm)

軸の単位mmあたりのステップ数です。この値は、ステッピングモータとタイミングベルト、プーリの仕様を元に算出します。算出方法は、こちらの記事をご覧ください。 {{arduino-cnc-micro-step.html#header-2-2}}

$110=500.000 (x max rate, mm/min)
$111=500.000 (y max rate, mm/min)
$112=500.000 (z max rate, mm/min)

デフォルトのままです。

$120=10.000 (x accel, mm/sec^2)
$121=10.000 (y accel, mm/sec^2)
$122=10.000 (z accel, mm/sec^2)

デフォルトのままです。

$130=200.000 (x max travel, mm)
$131=200.000 (y max travel, mm)
$132=200.000 (z max travel, mm)

ソフトリミットが有効の場合の軸の最大移動量です。デフォルトのままです。

いざ、ホーミング!

XY軸にリミットスイッチを取り付けて、$Hを送信しホーミングしてみました。そのようすを動画でご覧ください!

Z軸を使わない場合は、config.hを修正する必要があります。詳しくは をご覧ください。

機械原点(Machine Position)をゼロにするには?

ところで、CNCjsでホーミングを行ったあと、画像のようにX軸Y軸の機械原点がゼロになりません。

加工原点(Work Position)をゼロにすることはできるのですが、機械原点をコマンドなどでゼロにセットする方法が見つかりませんでした。 そもそも機械原点は、CNCjsがCNCマシンと接続した時点をゼロとみなします。よって、少し手間ではありますが、次のような手順で機械原点をゼロにセットしてます。

  1. $Hでホーミングして、ホームポジションへ移動
  2. Arduinoとの接続をいったん解除、再接続する
  3. 機械原点がゼロにセットされる
  4. $Xでアラームロックを解除する

ホーミングサイクルを有効にしている場合は、CNCマシン接続時にアラームロックがかかってます。その状態でGコードを送信すると「error:Alarm lock」となり動作しないので、\(Hでホーミングするか、\)Xでロックを解除させる必要があります。

機械原点をゼロにしてからたとえば、「G01 X50 Y50 F200」を命令してみましょう。画像のように、正確に移動できるはずです。

関連記事