手作りCNCフライス〔Grbl設定編〕

前回、何も考えずに飛びついたGrblですが。。。。。。。

甘かったです。日本語のドキュメントがほとんどなく、英語と格闘すること数か月、ようやく見えてきたのでメモ書きとしてのこします。


まず、Arduino UNOにファームを書き込みます。

書き込み方法は、v0.9iまでなら「guidude: Arduinoに任意のHEXファイルを書き込む。 AVRライタ不要」 を使いUSBケーブル経由で書き込みできとても便利だったのですが、v0.9jから「フラッシュROMの容量を超える」とエラーが出て不可能になってしま いました。きっとArduinoのブートローダーが使用している分だけ余計にROMを消費するのでしょう。v0.9jは前のバージョンより容量が増えてい るので一杯になってしまったのではないかと。
という事で、Arduinoのブートローダーを削除して、純正のAVRライターとAtmel StudioでArduinoの6pinから書き込みを行いました。

この記事はGrbl v0.9j Atmega328p 16mhz 115200baud with generic defaultsを使用して書いています。常に新しいバージョンを使った方が良いと思いますが、バージョンが違うと設定できる項目なども結構変わっているようです。($??の番号も変わっていたりして確認した方が良いです。)

また、Grblのバージョンがv0.9からスピンドルのピンと制御方法が変更になっていて、単なるON/OFFではなくPWM信号が出るようになりました。作っていた回路はON/OFFでリレーを制御していただけなので、困っていましたが、こちらに答えがありました。S1000M3コマンドでデューティー比100%の信号がでるようで、ONの状態と同じです。スピンドルを動かしたくなく、値だけ設定できれば良いのであればS1000M5です。「$ N0 = S1000M5」とコマンドを送っておけば、起動時・リセット時に、自動的にこの設定にしてくれます。

また、パソコン側のソフトですが、ここを見るといくつかあるようです。全てを試したわけではありませんが、見た目でGrblPanelを選びました。見た目は大事です。

起動するとしてConnectすると、Unlock&ALARMが点灯し動きません。Unlockボタンを押すと解除されますが、最初は動かなくてビビります。他のパソコン側ソフトでも同じ挙動なので、Grbl(Arduino側)のプログラムの問題のようです。

このソフトウェアの「Setting」タブで設定をするわけですが、ちょいと癖があります。Valueを変更してもそれだけでは、設定がArduino側に保存されません。値の上のセルでダブルクリックをすると変更が保存されるようです。

設定コマンドは、詳しくはオリジナルサイト(英語)を見て欲しいですが、以下の用語を頭に入れておくと理解しやすくなります。

Homing・・・原点出しの事です。(Home+ing?)
travel・・・旅ではありません。距離というニュアンスですかね。

以下は、翻訳というよりいろいろ試してみて得た知見ですので、解釈がちがうかもしれませんが、参考に。

Grbl設定値

$0 (step pulse, usec)

モーターのパルス間隔の最小時間の設定です。この時間以下の早いパルスを出すことが出来なくなります。ステッピングモータなどは、早いパルスだとトルクが下がり、位置がずれたり止まったりしますので、実機を動かしながら調整するとよいでしょう。$110~$112の最高移動スピードに影響します。

$1 (step idle delay, msec)

一動作から次の動作に移る時の停止時間です。ステッピングモーターの中には順方向から逆方向になる時に一時停止せずいきなり逆方向に動くと脱調する可能性があるので、このパラメータがある(と思います)

$2 (step port invert mask:00000000)
$3 (dir port invert mask:00000110)

$2はStep Pulse、$3はDirection の入力信号の反転を行います。Step Pulseは通常パスルがロー→ハイになるのが反転します。通常は使いません。Directionの反転はモーターが思った方と逆に動いた時に使えます。ハードウェア的に配線を変えるなど反転方法は他にもありますが、こちらの方が値を変更するだけで済みますので楽ちんです。

設定値 マスク  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

$4 (step enable invert, bool)

よくわかりません。英文を解読してください。(汗

$5 (limit pins invert, bool)

この値が0の時、Limit X-Axis、Limit Y-Axis、Limit Z-Axisの各ピンは、内部プルアップ抵抗を介して常にHighになっています。入力する場合はGNDにショートします。1の時は、入力なしの状態を作り出すのにGNDに抵抗を介して接続します。入力する場合は+5Vをショートします。(Arduinoの一般的な入力方法です)。とここまで書いていますが、1の時に書いてあるような動作になるか試していません。(わたしゃー0で使用してます)

$6 (probe pin invert, bool)

probeピンの入力の反転を設定する。フライス刃先がどの位置にあるのか調整するサイクルの時に、刃物にProbe端子を、接触する接点をGNDに接続し、接触し通電したところを検出する。離れている時に電流が流れず、接触した時に電流が流れる時に、0です。その反対は1。

$10 (status report mask:00000011)

コントロール基板から、どのステータス情報をコントロールソフトに返すか選択します。デフォルトでは、運転状態(OFFにはできません)、機械位置、作業位置なので3です。全てのステータスを返すにはリソースを消費するので、他のステータスはセットアップ時のみONにして調整が終わったらOFFにするとよいと思います。

設定値は、2進数で値をいれ、10進数に変換したものを入れます。

レポートタイプ 制限ピン RXバッファ プランナーバッファ 作業位置 機械位置
デフォルト値 0 0 0 1 1

00011(2進数)=3(10進数)とし3を設定します。

制限ピンのステータス返したい時には、10011(2進数)=19を設定値にいれます。

$11 (junction deviation, mm)

$12 (arc tolerance, mm)

円弧公差です。この値以上、円が正確になることはありません。

$13 (report inches, bool)

ポジションを管理する単位を変更します。$13=0でミリ、$13=1でインチです。

$20 (soft limits, bool)

0か1の値です。1だと、入力された値が$130~$132の設定の範囲内での動作かを計算し、外れるようだとアラームを出して停止します。

$21 (hard limits, bool)

0か1の値です。Limit X-Axis、Limit Y-Axis、Limit Z-Axisの入力をハードウェア的にリミット入力に設定します。この入力があると、各軸・スピンドル・クーリアントなど全てが即時強制停止します。

$22(homing cycle, bool)

0か1の値です。1だと、原点出しが出来ます。原点出しを行う動きを英語ではホーミング サイクルと言うようです。ホーミングは$23で設定した方向に動いて行き、各軸のLimitスイッチが反応するところで原点を出します。

$23 (homing dir invert mask:11010000)

ホーミングを行う動作をプラス方向かマイナス方向で行うかを設定します。

Z軸 Y軸 X軸
0 0 0

0がプラス方向で、1がマイナス方向です。

Z軸=1、Y軸=0、X軸=1ならば、101(2進数)=5(10進数)になります。

※この値と軸の関係ついて、英語でもドキュメントが見つかりませんでしたので、実測値です。

$24 (homing feed, mm/min)

2度目に行うホーミングで、一度リミットスイッチが反応すると、ちょっと戻り、このスピードで再度リミットスイッチの場所を計測します。この値を低くすると正確にリミットスイッチの場所を計測できます。

$25 (homing seek, mm/min)

1度目にホーミングを行うスピードです。リミットスイッチを素早く探すために早くても構いませんが、リミットスイッチを超えてクラッシュしないスピードにします。

$26 (homing debounce, msec)

リミットスイッチのチャタリングを無視する秒数のようです。公式ドキュメントには「5〜25ミリ秒でOK」と書いてあります。

$27(homing pull-off, mm)

ホーミングが終わった後、何ミリ移動するか設定します。ホーミング用スイッチとハードウェアリミットのスイッチを兼用しているので、ホーミングが終わった位置のままだとハードウェアリミットが効いてしまいます。それを避けるために動くんだと思います。

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

何パルスで1mm動くかを設定します。例えば、1パルス0.72度動くステッピングモーターの場合、一回転するのに、360度÷0.72度=500パルス。ボールねじが一回転で2mm動く場合は、500パルス÷2mmで250パルスになります。

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

XYZ軸の最高移動スピードを設定します。$0で設定したパルス幅以下のスピードを出そうとすると、許容オーバースピードで停止してしまうようです。$0の値を小さくするか、この値を小さくする必要があります。

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

XYZ軸の台形駆動の加速・減速のスピードを設定します。値が大きい程、急加速します。急加速・急停止すると、本体が大きく揺れますし、ステッピングモータの場合は脱調する事がありますので、程々小さい値にします。

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

XYZ軸の端から端まで最大移動距離をmm単位で設定します。ホーミングした場所を0とし、反対の端までの長さを入れます。$20(soft limits, bool)が1の設定の場合、ここで設定した値以上に行くと停止します。絶対値のようです(200と設定した場合、+200以上もしくは-200以下の値になる時に停止します)

7 コメント
  1. Zeus Arts より:

    大変勉強になり、翻訳した後もわかり難いGBRLのマニュアルが更に簡単に理解出来るようになりました。このような記録を残して頂き、どうもありがとうございました。

  2. Mole09 より:

    Grblを使うのは初めてだったので戸惑っていたのですが、素早い理解にとても役立ちました。有用な情報の公開ありがとうございます。

    なお、抜けている説明の部分については以下のような事と思います。
    $4はステッピングモータードライバーのイネーブル信号を負論理($4=0)にするか、正論理($4=1)にするかの指定です。フォトカプラで絶縁駆動する場合などに正論理が必要になるのだと思われます。
    $11はコーナーに突っ込む時の減速度合いを与える数値です。アルゴリズムは複雑ですが、設定値が小さいほど大きな減速指向を示します。最適値は実験的に求める必要があります。

  3. […] かりにくいかも知れません。(Z軸の制御方法を説明する時に、文面調整します)http://ichirowo.com/2016/09/cnc_grbl/http://ruur.hatenadiary.com/entry/2016/01/02/040735$0=10$1=25$2=0$3=1$4=0$5=0$6=0$10=0$11=0.020$12=0.020$13 […]

  4. […] なる)すでに記載していますが、今回はconfigに入れておきました。 (参考)→http://ichirowo.com/2016/09/cnc_grbl/・今回の設定値としては、原点を0°として、S0としてZ軸が一番持ち上がるよう […]

  5. […] なる)すでに記載していますが、今回はconfigに入れておきました。 (参考)→http://ichirowo.com/2016/09/cnc_grbl/・今回の設定値としては、原点を0°として、S0としてZ軸が一番持ち上がるよう […]

  6. […] かりにくいかも知れません。(Z軸の制御方法を説明する時に、文面調整します)http://ichirowo.com/2016/09/cnc_grbl/http://ruur.hatenadiary.com/entry/2016/01/02/040735$0=10$1=25$2=0$3=1$4=0$5=0$6=0$10=0$11=0.020$12=0.020$13 […]

コメントをどうぞ

*