ARDUINOでのGRBLの使い方

GRBLシリアル通信設定

 GRBLの使い方をもう少し調べてみようと思います。
 先回、GRBLコントローラーを用いて、原点復帰,JOG運転をテストしてみましたが、内容はUSBシリアル通信(RS232C)を使って専用コマンド,Gコードを送信してモーターを制御している様です。つまり、送信データの意味を理解すれば、C#等で自分で作成したツールからでも制御可能と思われます。
 下記表に各バージョン対応の英語マニュアルらしき記載へのリンクとシリアル通信初期設定を記載します。
 今回、私がインストールしたのは、‘v0.8’です。但し、「旧サイトは最終的に消える」という表記もありますので、継続的に利用する場合は検討が必要です。

GRBLバージョンとリンク baud rate シリアル通信設定
GRBL0.8(Configuring Grbl v0.8) 9600 8-N-1
(8-bits, no parity,
and 1-stop bit)
GRBL0.9(Configuring Grbl v0.9) 115200
GRBL1.1(Grbl v1.1 Commands)


 尚、Gコードは主に工作機械の位置決め・方向指定など座標系準備、主軸移動などの動作指令を行うものとのことです。


GRBL原点復帰動作($H)

 先日、GRBLコントローラを使って原点復帰後、リセットしないと、JOG運転が出来ませんでした。 config.h でZ軸を対象から外したつもりでしたが、現設定ではZ軸のEND STOP(リミットSW)入力も必要でした。原点復帰フローは下図の通りです。
 “$H”コマンドで実行される原点復帰は、原点に戻る時間を短縮し精度を高めるため、高速・低速の2回原点復帰動作を行っています。1回目は2軸(X・Y)のリミットSW検出で良いのですが、2回目以降の処理は3軸(X・Y・Z)のセンサー入力状態(ON/OFF)を確認しながら、1つづつ処理しています。
 実際には、移動軸はありませんが、X・Y・Z軸のリミットSWに相当するプッシュSWをつけてモーターの動きを確認しています。

パラメータ設定

 下表の通りパラメータ設定しています。機能は他の方が書かれたサイトや英語マニュアルから推測した内容です。$17~22は原点復帰に関連するパラメータです。$18は原点復帰時のモータ移動(回転)方向を定義します。“224”(10進数)→”11100000”(2進数)となり、上からZ・Y・X軸です。

【各軸の1mm移動に必要なSTEP数($0,$1)】
(1)マイクロステップ : 1/16 ※全短絡
 各マイクロステップ端子設定内容を表に示します。

(2)モーター分解能
 ①X軸:400(STEP/回転)
 ②Y軸:200(STEP/回転)
(3)プーリー(仮):20(歯/回転)X2(mm/歯)  = 40(mm/回転)
(4)設定値(各軸の1mm移動に必要なSTEP数)
 ① X軸 ($0): 16X400/40=160(step/mm)
 ② Y軸 ($1): 16X200/40=80(step/mm)

【設定方法】
 方法はArduinoIDE等のシリアルモニタを立ち上げ、送信用入力欄に “$0=160” 等の形式で入力後、送信ボタン押します。

 結果は、同様に“$$”を送信するとリスト表示されます。

(スペース)

GRBLコントローラからの操作

 ネットでいろいろ調べているとGRBLコントローラはあまり使われていない印象を持ちましたが、簡単な確認は出来るので使ってみました。“Send”ボタンをクリックすると赤枠内の登録コマンド・Gコードを順番に実行し、上段エリアで工具が動きシミュレーションします。
 実際にXYテーブルになっている訳ではないので、正しく動いているか判りませんが、接続しているモーターも連動します。

 送信した登録コマンドは下の表の通りです。
 GRBL専用コマンド“$H”を送信し原点復帰します。原点復帰後はパラメータ “$22=2”を設定していますので、各軸リミットSWがHigh→Lowに変化後、2(mm)づつ移動し、(x,y,z)= (2,2,2)の位置にいます。次に行番2の“G92X0.00Y0.00”で現在位置(x,y)= (0,0)に変更しています。(Z軸は未変更)結果、行番3以降のGコードでは設定変更した座標系で移動・位置決めを行います。
 行番3“G90”はアブソリュート(絶対値)指令、行番4“G91”はインクリメンタル(相対値)指令です。絶対値/相対値指令後にある “G0”は位置決め指定するコードで、同時に移動先座標を送信し位置決めを実行します。(例:“G0X28.00Y15.00”) 

番号 コマンド・Gコード 内 容
$H 原点復帰(GRBL専用コマンド)
G92X0.00Y0.00 現在位置を(0,0)に設定
G90G0X30.00Y30.00 絶対座標系で(30,30)位置決め
G91G0X-20.00Y-20.00 現在位置から(-20,-20)相対移動
G91G0X-20.00Y20.00 現在位置から(-20,20)相対移動
G91G0X-20.00Y-20.00 現在位置から(-20,-20)相対移動
G90G0X-20.00Y-20.00 絶対座標系で(-20,-20)位置決め
G90G0X15.00Y-5.00 絶対座標系で(15,-5)位置決め

 登録したコマンド・Gコードはファイル保存できます。メニューの「File」-「Save」で保存、「File」-「Open」でファイルを開く等の機能があります。

 ‘ ? ’ コマンド

 ‘ ? ’ コマンドは現在位置・状態を取得するコマンドです。動作状態に関係なく、リアルタイムで実行するコマンドの様です。
 このコマンドについて確認した理由は、簡易的な位置決めを独自ツールとして作成する場合に。コントローラ側の状態を確認し次動作に移行する為です。
 原点復帰、座標系変更、位置決め等を行い、‘ ? ’ で状態確認した結果が次の図です。“異常(Alarm)”・“動作中(Run)”・“停止(Idle)”の状態と現在位置が確認出来ました。

 ※ 確認はArduinoIDEのシリアルモニタを利用しました。
※ 参考:下記は他コマンドリストです。

まとめ

 NCフライス、レーザー加工、3Dプリンタとか作ってみたいですが、まだまだ先のことですね。(お金と時間の問題もありますし・・・・・)
 でも、簡単な位置決め用途では利用できそうな感触を持つことが出来たことは大きな収穫です。