これまでのあらすじ:
2016年3月、フェルト生地を手で裁断している際にレーザーカッターがあれば複雑なカットが容易にできるなあと思って、安価になってきたレーザーカッターを購入しようと思ったのがきっかけ。調べていくうちに、合板も切れたほうがいいと思うようになって、CNCルーター(CNCミリング)についても考えるようになった。
Arduinoは以前から使っており、CNCシールドがあると気付いて自作も可能と思うようになった。当初はShapeOkoやX-CARVEを参考にMakerSlide、OpenRail、V-Wheel、2GTタイミングベルトなどで5万円くらいで自作しようと思っていた。AliExpressでも部品が安く買えることが分かって、しばらくは部品探し。探せば探すほど安くて本格的な部品も見つかってくるので、そんなにケチらなくてもいいのではないかと徐々にスペックアップ。最終的には剛性や精度のことも考えてボールスクリューやリニアスライドを使うことになり、予想以上に重厚な3軸CNCマシンをつくることに(約7万円)。
構想から約5週間(制作約3週間)でルーターとレーザーともに使えるようになり、現在はgrbl1.1+Arduino CNCシールドV3.5+bCNCを使用中(Macで)。余っていたBluetoothモジュールをつけてワイヤレス化。bCNCのPendant機能でスマホやタブレット上のブラウザからもワイヤレス操作可能。


CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:

*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。

2017年2月16日木曜日

Grbl1.1の$コマンドやGコードについて

Gコードについてはまだまとめていないので、とりあえず覚書程度に書いておこうと思います。
普段Gコードや$コマンドについては、やっているうちに覚えるだろうと思って、それほど深く勉強はしていません。作業の効率化が必要というほどでもないので、だいたい動けば問題ないという程度です。全て覚えようとすると大変なので、いつも使っているGコードや$コマンド(よく使うものや設定の際に必要そうなもの)についてです。

参考としているのは、
・Grbl:CommandsページConfigurationページ
LinuxCNC/クイックリファレンス
・一般的なNCコード(ここがわかりやすい

まずは$コマンド(Grbl用)から:
$$
CNCマシンの各設定を表示させるコマンド。$$と入力。一度設定してしまえば、あまり用はないかもしれませんが、たまに間違って設定したままになっていることがあります。レーザーモード($32=0または$32=1)をオンにし忘れていたなど。とりあえず通信できているか確認する時にもよく使います。

$I
Grblのバージョンを確認するコマンド。$Iと入力。
入力すると、[VER:1.1e.20161208:]などと表示され、バージョン1.1、2016年12月8日ビルドということがわかります。古いバージョンだとバグが直っていなかったりするので、最新の方がいいと思います。問題がありそうなら最新バージョンにしてみるというのも解決策だったりします。特に問題なく動いているのであれば、そのままの方がいいかもしれません。

$X
ロック解除。$Xと入力。最初にCNCマシンと接続開始すると、このコマンド(あるいは専用ボタン)を押さないと、その後の操作ができないようになっています。また作業中に異変があって自動停止したあと再開する時も入力する必要があります。

$H
$Hを入力するとホーミングサイクルが開始します。ただし事前に$22=1で設定をオンにしておく必要があります。ホーミングサイクルによってリミットスイッチを頼りに機械原点を探しに動き始めます。
リミットスイッチの設置や事前の設定がなされていない場合は、$22=1にしたり、$Hに相当するボタンなど押さないよう注意した方がいいと思います。

$G
$Gと入力すると(あるいは毎回表示される)、現在アクティブになっている設定モードが出てきます。
[GC:G0 G54 G17 G21 G90 G94 M0 M5 M9 T0 S0.0 F500.0]
それぞれ何なのか、最低限これくらいを覚えればいいと思います。
G0は位置決め用の早送りモード(G1に変更しない限り移動速度は一定)、G21で単位はmm、G90で絶対座標を使用中など。
例えば、この設定の状態のまま[G0の速度($110で設定)で、単位はmm(インチではなく)、絶対座標(G90)]、X10とだけ入力するとX軸座標10mmの位置へ動くことになります。最後の項目でF500.0が設定されていますが、G0になっているため$110で設定した速度が優先されます。もしF500の速度を反映したい場合はG0をG1へ切り替えます(G1と入力)。

$J=
ジョグ操作コマンド。
$J=G91X10F100入力で、現在地からXを10mm分F100の速度で動かすというジョグコマンド。これはGrbl1.1からの新機能で、従来まで(Grbl0.9)は、$Gにある設定モードに左右された入力方法になっていましたが、それとは無関係に入力できるようになりました。例えば、$G内で早送りモード(G0)かつ絶対座標設定(G90)になっているときに、相対座標(G91)でゆっくり(G1)ジョグ操作したい時には、今までは設定を変えてからジョグ操作し、それが終わればまた元の設定に戻すということでしたが、元のモードに戻さなくても$Gの内容はキープされたままというわけです。
ペンダント(ジョグダイヤルやジョイスティックなど)で操作する場合は、これを使った方がいいらしいです。フィードが設定されていないと動かないのでFも入力必要。

$3
XYZ軸の移動向きの設定。配線したものの、実際動かしてみるとY軸だけ逆の動きになっていたという場合は、ここで向きを反転設定できます。
$3=0 (N/N/N:X軸/Y軸/Z軸:デフォルト値)
$3=1 (Y/N/N:デフォルト値に対してX軸だけ反転)
$3=2 (N/Y/N:デフォルト値に対してY軸だけ反転)
$3=3 (Y/Y/N:デフォルト値に対してX軸とY軸を反転)
$3=4 (N/N/Y:デフォルト値に対してZ軸だけ反転)
$3=5 (Y/N/Y:デフォルト値に対してX軸とZ軸を反転)
$3=6 (N/Y/Y:デフォルト値に対してY軸とZ軸を反転)
$3=7 (Y/Y/Y:デフォルト値に対してすべて反転)
例えば、Y軸だけ反転したいのであれば、$3=2を入力


$10
現在のマシンのステータスを知らせる設定。$10=1になっていないと、使っているG Code Senderに現在の座標値MPosやWPosが表示されなくなります。$10=2にすることでバッファの内容を表示することもできるようですが、通常は$10=1でいいと思います。たまにMPosやWPosが表示されなくなったというときはここをチェックしてみるといいと思います。

$13
$13=0で作業単位mm、$13=1でインチ。

$20
ソフトリミット設定。$20=0でオフ、$20=1でオン。
$130、$131、$132で、そのCNCマシンのXYZ軸の最大移動距離を設定できます。ソフトリミットをオンにしておけば、この設定距離を超えると自動停止してくれます。$Xで再開。

$21
ハードリミット設定。$21=0でオフ、$21=1でオン。
リミットスイッチを各軸につけておけば、$21=1にすることでリミットスイッチが押された時に自動停止してくれます。$Xで再開。

$22
ホーミングサイクル設定。$22=0でオフ、$22=1でオン。
ホーミングサイクルを可能にするには、各軸にリミットスイッチを接続する必要があります。
$Hをコマンド入力(あるいは専用ボタン)すると、ホーミングサイクル開始となり、Z軸が+方向へ、続いてXとY軸も+方向へ移動し、リミットスイッチを感知して機械原点MPos(0,0,0)を見つけ出します。通常は左奥上が機械原点MPos(0,0,0)となり、作業エリアはWPos座標上では全てマイナス座標となります。毎回作業前に、ホーミングサイクルを行えば、CNCマシンは機械原点を覚えるので、その後座標をずらしても常にどこにいるのか把握できます。
しかし、実際の作業はMPosとは別に作業用の原点WPos(0,0,0)を任意の位置に設定し(G92で)、WPosを元に位置を割り出すので、MPosがなくても問題ありません。ただ、複数の部品を複数の座標系を使って作業するときなどは、MPosが絶対座標となってくれるのであった方がいいとはおもいますが、個人的にはホーミングやMPosは毎回使っていません。

$23
ホーミングの際のXYZ軸の動く方向の設定。通常は右奥上ですが、使いやすいように左前上に設定する人もいます。$3の反転設定の表を同じで、デフォルト($23=0)に対してY軸だけ反転したい場合は$23=2を入力。

$24
ホーミングの際にリミットスイッチ手前で位置合わせする移動速度。正確に位置合わせをするためにゆっくりめの速度にしておく。20〜50mm/minなど。$24=25などと入力。

$25
ホーミングでリミットスイッチを探しに行く際の移動速度。最高速よりは遅めで。
$25=600などと入力で600mm/minで移動開始します。

$26
ホーミング中にリミットスイッチ押した際のデバウンス/チャタリング(特に機械式スイッチ)防止用のディレイ時間。20〜250msec程度。$25=50と入力でディレイ時間50msecに設定。

$27
ホーミング終了後、安全のためリミットスイッチから少しだけ離れておく距離の設定。1〜5mm程度。例えば、$27=3.0と入力でリミットスイッチが押されたポイントから3mm戻った位置に止まるように設定。

$32
レーザーモードの設定。$32=0でオフ、$32でオン。
Grbl1.1からはレーザモード機能が追加され、主にはダイナミックレーザーモード(M4)というヘッドの移動速度に応じてレーザー出力を微調整する機能があります。
従来までは、$32=0のまま、M3S500(レーザーオン、出力50%)などと入力していましたが、$32=1にするならば、M4S500となります。
レーザーを使わないのであれば、$32=0にしておいた方がいいと思います。

$100、$101、$102
XYZ軸のsteps/mm設定。CNCマシンのスペックに応じて設定する必要があります。
以下の条件であれば:
・ステッピングモーター:1回転200ステップ
・ステッピングモータードライバのマイクロステッピング設定:1/8
・送りネジの1回転で進む量:5mm
1/8のきめ細かさでマイクロステップすることになるので、ステッピングモーターは200x8で1回転するには1600ステップ、1回転で送りネジが5mm進むので、1600/5=320steps/mmとなります。$100=320などと入力。
ここは最初に設定すれば、もう変えることもないでしょう。

$110、$111、$112
XYZ軸の最高速度設定。mm/min。
例えば、$110=1000を入力でX軸を1000mm/minに設定。
これらの値は、G0の速度に適用されます。

$130、$131、$132
XYZ軸の最大移動距離。
そのCNCマシンの各軸の移動可能な距離を入力しておくことで、$20=1でソフトリミットをオンにした時にこの値を越えれば非常停止するようになります。
例えば、$130=600を入力でX軸の移動可能な距離を600mmまでと設定。

おそらく初期設定で必要な$コマンドはこのくらいでしょうか。その他の設定はデフォルトのままでも大丈夫かと思います。

ここからGコード:
G0
位置決め用の移動速度モード(速め:一定速度)。
最初はG0になっていますが、G0またはG1のどちらかにモードを切り替え指定します。
$$で表示される$110、$111、$112(XYZ軸の各最高移動速度)に設定してある一定速度で動く。速度を設定し直したい場合、$110=800などと入力し直す。
ジョグボタンで移動する場合は、この移動速度が適用されます。G0のままF100などフィードを入力設定しても移動速度はG0($110〜$112)の速度になってしまいます。一時的に速度を変えて動かしたい場合は次のG1を入力してモードを変えるか、ジョグ操作であれば$J=を使うといいと思います。
ある地点へ斜め方向に移動する場合、X軸もY軸も固定速度($110〜$112で設定した速度)で動くため、例えばX軸が目標となるX座標へたどり着いたら、Y軸だけがまだ動き続けているという現象になることがあります。最短距離で目標地点に動くのではなく、各軸の固定速度で動くために折れ曲がった軌道を描くことから加工作業には適していないようです。

G1
フィード(F)設定による移動モード。G0とは違って、その都度設定したフィードで動きます。主に加工用のモードです。モードがG0になっている場合は、G1を入力することで、このモードに切り替わります。
加工条件に合わせたフィード設定が必要となります。F値が設定してない場合(F=0になっている場合)は、移動コマンドを入力してもフィード未設定というエラーが出るので、F値も忘れずに入力。

G2、G3
円弧を描く移動モード。G2が時計回り、G3が反時計回り。
G0とG1が直線なのに対し、G2とG3が円弧で動くという程度で覚えておけばいいと思います。円を描く際には、このほかI、J、K、Rなどの値も設定しなければいけないのですが、わかりにくいのでCADなどで描いてGコード化した方が早いかもしれません。
G2 X0 Y0 I0 J-20 F300
これは以前実験のために使った円を描くGコード(現在地から時計回りに半径20mmの円を描く)ですが、直感的にわかりにくいです。
G2(円弧時計回り)、X0 Y0(終点座標/開始点でもあるけど)、I0 J-20(現在地からの中心座標の差分)、F300(300mm/minのfeed速度設定)。
IはXに、JはYに対応しており、J-20の部分は、現在地からY軸方向へ20mm下がったところに中心点があるという意味になります。
この程度の試運転用Gコードであるならば、覚えるというよりも、コードを記録しておいてコピペして使ったり、ソフトのボタンなどに割り当てておけばいいと思います。

G17
作業がXY平面という設定。これも変えたことがない。G18(XZ平面)、G19(YZ平面)らしい。おそらくXY平面が基本となることがほとんどなので、これもこのままでいいかと。

G21
作業の単位がmm。G20でインチへ変更可能。これも大抵はmmなので、このままでいいかと。動きが変だと思ったら一応チェックする程度。G20かG21で切り替え。

G54
これは変えたことがない。G54〜G59までの6種類の異なる加工用の座標系を登録しておくことができるようです。その都度単体のものしか加工しないのであれば、おそらくずっとG54のままで大丈夫かと。大量生産や異なる部品を複数作業台に並べて加工するときは、それに合わせて複数の座標系があったほうが便利なので、そのうち使うかもしれないという程度。

G90
絶対座標系。これは位置調整するときに、よく使うかもしれません。G90X10Y20Z10などと入力。
絶対座標なので、X10という移動コマンドは座標上のX軸10mmの位置へ移動ということ。10mm右へ(X軸上に)動かすというのと混同するので要注意。
よく勘違いしていたのは、G90のままX10を入力して右へ10mm動いた後、再度X10を入力してさらに10mm右へ動かそうとしたのに動かないという現象。この場合は次の相対座標(インクリメンタル/増加分)の設定にしないといけない。
ちなみにG90のままX0Y0Z0と入力すれば、原点に移動ということになります。
G90を入力して、一旦絶対座標に切り替えると、変更しない限りこのモードは持続します。

G91
相対座標系(インクリメンタル/増加分)。G90と比べればわかると思いますが、G91を入力してX10を入力すれば、現在地から10mm右へ動きます。再度X10を入力すれば、さらに右へ10mm動きます。人によっても違うと思いますが、直感的に絶対座標の方がイメージしやすい場合と相対座標の方がイメージしやすい場合があると思います。10mm右へ移動した後、あと5mm右へ移動したいと思うか、それとも15mmの位置へ移動したいと思うかの違いです。
よくあるミスとしては、あと5mm右へ動かそうと思って(相対座標系でのイメージ)X5を入力したら、G91ではなくG90になっており、いきなり原点近く(座標上のX5mmの位置)まで戻ってしまったという現象。移動途中に障害物などなければいいのですが、材料固定用金具にぶつかってしまったり、場合によっては作業エリアをはみ出るまで動こうとしたりするのでかなり危険です。
なので、毎回G91X10と入力すれば、その勘違いも防げると思います。

G92
座標系の設定コマンド。現在地の座標を任意の座標値にセットするコマンド。
例えば現在地でG92X0Y0Z0を入力すると、そこがWPos(0,0,0)に変更されます。また、G92Z20と入力すれば、現在のZ軸の高さが20mmという設定になり、プローブなど使ってZ軸の位置を設定する際に使います。
大抵は、材料に対してのスピンドルの位置決め(加工原点出し)の時に使います。
ソフトによっては、「X=0」というような現在の位置を原点にしてくれるボタンもありますが、同じコマンドを使っているというわけです。

G94
毎分送りというフィードの単位設定。F800mm/minやF20inch/mmという〜/mm。これもこのまま。
このほかG95なら毎回転送り〜/revolutionらしい。G93だとInverse Timeモードと言ってF2.0なら1min/2.0つまりその工程を30秒で終わらせる速度となるみたいです。ここまでは覚えなくても良さそう。

M0
プログラム一時停止。起動させれば、残りの工程を再開。このほかM1も一時停止。

M3
スピンドル出力オン(時計回り)。Grblでスピンドルを制御している場合。ただしM3S1000などと、S値も入力しないといけない。M3S0ならスピンドルオンだけれど出力ゼロ。Grblの場合、S0で出力0%、S1000で100%。
ルーターやミリングでは、加工中にあまりオンオフはしないけれども(Z軸の昇降で切削するかしないかなので)、レーザーなら常に加工中はオンオフしたりS値で出力の強弱をつけたりします。ただし、Grbl1.1からはレーザモードが導入されたため、M3(従来の方法)ではなく、M4を使う方が便利かもしれません。

M4
スピンドル出力オン(反時計回り)。Grblでスピンドルを制御している場合。これもS値が必要。M4S1000などと入力。
Grbl1.1の場合、M4はレーザーモードとして機能が割り当てられています。M3でもレーザー可変出力加工は可能ですが(Grbl0.9の方法)、M4のレーザーモードにするとヘッドの移動速度に応じてレーザー出力を微調整してくれます。その結果、移動開始直後やパスの折り返し地点などの速度が変わる箇所の焦げムラが少なくなります(かなり効果あります)。ただし、M4を使うには事前に$32=1でレーザーモードをオンにしておく必要があります。

S
スピンドルの出力値。GrblならS0で0%、S500で50%、S1000で100%。現在は8bitの設定になっているようでS0~1000とは言っても256段階しかないようです。Arduino Unoの11番ピン(PWM)を使っており、そのピンならtimer2で16bit出力も可能ですがそうはなっていないようです。cpu_map.h内でPWM周波数を変えることができます。デフォルトは0.98kHz。
ルーターやミリングならスピンドルモーターの可変制御を可能にしてくれるTTLモータードライバをCNCシールドのSpnEn(pwm)へ接続する必要があります。
レーザーならレーザー用TTLドライバを接続し、可変出力制御が可能になります。
オンオフしかできないリレーを使っている場合は、S0(オフ)かS1000(オン:Max値)に設定することになります。

M5
スピンドル停止。Grblでスピンドルを制御している場合。特にレーザーの場合はM5でオフにするかS0で出力ゼロにしないと危険。

M9
クーラント停止。冷却装置をつなげていなければ関係なし。

M30
プログラム終了。Gコードの最後につけることで、作業の終了ということを告げます。生成したGコードファイルをエディタなどで見てみると、たまにM30がない時もあるので、書き足しておくといいと思います。

T0, M6
ツールチェンジ。Tはツールの種類。M6で加工作業中で異なる刃に変えるときのコマンド。これも使わないかと。オートツールチェンジャがあって、自動で刃先を変えてくれるなら必要かもしれませんが、普通は加工中断して手で変えることになると思います。加工途中でのツール交換すらあまりしないし、したことはないです。

F
フィード。送り速度。G1(加工用の移動速度)で必要なフィードを設定します。単位は大抵はmm/minですが、たまにmm/secになっているソフトもあったりします。
個人的には、F600(10mm/sec)くらいがゆっくりめのちょうどいい速度という感じがします。
素材や加工方法に応じて、この速度を設定しなければいけません(詳しくはこちらなどで)。
X10Y20F600などと入力すれば、X軸10mm、Y軸20mmへ600mm/minで移動します。


このうち実際使うのは、$$、$X、M3、M4、S、G90、G91くらいでしょうか。あとはだいたいソフトのボタン操作になるので、それほど覚える必要はないと思います。ただ、ちょっとした動きを確認したり、トラブルがあった時に、コンソール画面のコマンドを多少読めた方がいいというくらいです。
当初はGコードも覚えないとダメなのかなと思っていましたが、ソフトでGコードを自動生成してくれるので、ほとんど覚えなくても作業上問題ないという感じです。
Gコードを入力するとエラーが出る場合は、このページにエラーコード表があるので見てみるといいと思います。設定や入力の仕方が間違っている場合があります。

実際の使用例(接続から加工までの流れ):
・CNCマシンと接続(ソフト上のOpenボタン押す)
・$Xで初期ロック状態解除(Unlockボタンでも可)
・$$で設定内容表示(一応確認)
・ジョグボタンで動作確認(少し動かしてみる)
・必要であれば、ここでホーミングサイクル($H)、機械原点MPos(0,0,0)のセット
・材料を作業エリアに固定する
・Gコードファイルの読み込み(ファイル読み込みボタンなど押す)
・ジョグボタンで材料左手前角に移動(XY軸のみ)
・ジョグボタンでZ軸(刃先)を材料上面ぴったりまで下げる(移動量0.01〜0.1mmボタン使用)
・この位置を加工原点WPos(0,0,0)にセットする(「X=0」ボタンなど押す、もしくはG92X0Y0Z0)
・Z軸を材料上面から少し上げておく(5mm程度の逃げ)
・加工スタート
・加工終了
という感じで、Gコードファイルを読み込ませて加工するときは、Gコード手入力はほとんど使いません。ボタンがソフト側にもついているので、それらのボタンで済んでしまいます。ホーミングサイクル($H)も普段はやりません。MPosではなくWPosで位置決めするという感じです。

このほかG41とG42のオフセット(工具径補正)機能もあるようなのですが、Grblには実装されていないようです。G41(左へオフセット)とG42(右へオフセット)のモードをキャンセルするG40は入っているみたいなので、将来的に実装されるのかもしれません。ただ、Arduino UNO(ATmega328)では、もうメモリに余裕がないので、Arduino MegaやArm CoreのArduino などになってしまうと思います。
ちなみにオフセット加工については、Jscutbcnc、あるいはIncscapeでも可能です。



さらに追記していく予定です。曖昧な部分もあるので、知っている方いらっしゃったらコメントお願いします。

0 件のコメント:

コメントを投稿

人気の投稿