Grblの設定
Grblの設定のチュートリアルが英語で、
よくわからなかったので自分なりに訳してみました。
Configuring Grbl v0.9 · grbl/grbl Wiki · GitHub
※これは大いに間違っている場合があるので、
自己責任で十分注意して下さいね。
※間違いや指摘等があればコメントしてくださいね。
$でヘルプの表示
$$ (現在の設定を表示)
$# (パラメタ#の値を表示)
$G (Gcodeパーサの状態の表示)
$I (ビルド情報の表示)
$N (スタートアップブロックを表示)
$x=value (設定項目xをvalueに設定)
$Nx=line (スタートアップブロックを保存)
$C (Gcodeモードをチェック)
$X (アラームロック無効)
$H (ホーミングを実行)
~ (サイクルスタート)
! (フィードホールド)
? (現在の状態)
ctrl-x (リセット)
‘$’に続くコマンドで、設定の表示や値のセットを行う
$から始まらない4コマンドは、リアルタイムに送信して振る舞いを変更するコマンド(aka DRO).
$$ - 現在の設定を表示
下記に例を示します
これらの設定はEEPROMに保存され、arduinoを再起動すると前回までの設定がロードされます
$0=10 (ステップパルス, μ秒)
$1=25 (ステップアイドル時間, m秒)
$2=0 (ステップポート反転マスク:00000000)
$3=6 (方向ポート反転マスク:0000110)
$4=0 (ステップ有効反転, bool)
$5=0 (リミットpin反転, bool)
$6=0 (探針pin反転, bool)
$10=3 (状態リポートマスク:00000011)
$11=0.020 (接続偏差, mm)
$12=0.002 (円弧寛容性, mm)
$13=0 (リポートインチ, bool)
$20=0 (ソフトリミット, bool)
$21=0 (ハードリミット, bool)
$22=0 (ホーミングサイクル, bool)
$23=1 (ホーミング反転マスク:00000001)
$24=50.000 (ホーミングフィード, mm/min)
$25=635.000 (ホーミングシーク, mm/min)
$26=250 (ホーミング非跳ね返り, msec)
$27=1.000 (ホーミングpull-off, mm)
$100=314.961 (x, step/mm)
$101=314.961 (y, step/mm)
$102=314.961 (z, step/mm)
$110=635.000 (x 最大レート, mm/min)
$111=635.000 (y 最大レート, mm/min)
$112=635.000 (z 最大レート, mm/min)
$120=50.000 (x 加速, mm/sec^2)
$121=50.000 (y 加速, mm/sec^2)
$122=50.000 (z 加速, mm/sec^2)
$130=225.000 (x 最大移動量, mm)
$131=125.000 (y 最大移動量, mm)
$132=170.000 (z 最大移動量, mm)
$x=val の形式のコマンドは、設定を保存または変更します
シリアル通信で出来ますが、それ用のソフト等を使った方がいいでしょう
例えば手動での変更で、
マイクロ秒単位でのステップパルスを10にする場合はの設定は、
$0=10
設定がうまくいった場合、'ok'を出力して設定をEEPROMに書き込みます
これはユーザーが変更するまで保持されます
$$コマンドで、再度設定が確認出来ます
$x=val 形式の設定の意味
注意: 設定番号はv0.8から変更されました
$0 ステップパルスの設定(マイクロ秒)
ステッピングモータードライバの最小のパルス長です
データシート等を参考に調整して下さい
ドライバが確実に認識出来る最小のパルス長で、
長く設定し過ぎると高いパルスレートで運用した場合に問題が発生します
これはステップパルスは互いに重なってスタート出来ないからです
10マイクロ秒前後が推奨されます
デフォルトは10マイクロ秒です
$1 ステップアイドル時間(ミリ秒)
毎回ステッピングモータの動作完了後、無効にするまでの時間を設定します
これとは別に常に軸を有効にするには最大値の255を設定します
$1=255
システムによりますが、0を設定するとこの機能は無効になります
25~50マイクロ秒に設定するとその軸は確実に終了する前に停止します
これは長い時間何も動作させなかった場合に役立ちます
またドライバによっては、どのマイクロステップで停止したかを覚えていない事に注意して下さい
再度有効にした時にステップが失われている場合は、$1=255に設定すると全ての軸の位置を保持します
$2 ステップポート反転マスク(バイナリ)
この設定は、ステップパルスを逆にします
デフォルトではパルスは通常のlowから始まり、highになると重要なイベントになります
その後$0で設定された時間経過してピンがリセットされ、次のパルスイベントまでlowに戻ります
逆にした場合、ステップパルスは通常のhighから始まりlowになるように振る舞います
ほとんどのユーザーはこの設定を使用する必要はありませんが、一部のCNCドライバーで要求されます
例えば1方向に故意的な遅れを作る場合等です
この設定は各軸に対してビットフラグで設定します
どの様に設定するのかを完全に理解する必要はありません
逆にしたい軸に対しての設定をシンプルに設定できます
例えばX軸とZ軸を逆に設定したかったら、$2=5として読み込ませます (ステップポート反転マスク:00000101).
Setting Value |
Mask |
Invert X |
Invert Y |
Invert 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 |
$3 方向ポート反転マスク(バイナリ)
この設定は各軸の方向のパルス値を逆にします
デフォルトではlowの時に正方向に動き、highの時に負の方向に動きます
いくつかの装置はこの通りではありません
この設定はこれらの軸の方向を逆にします
この設定はビットフラグによって行います
設定を行うには、シンプルに逆にしたい軸に対して値を送信する必要があります
上の表を使って下さい
例えばY軸の方向のみを逆にしたい場合、$3=2を送信し、読み込ませます (方向ポート反転マスク:00000010)
$4 ステップ有効反転(ブール)
デフォルトではモータの有効/無効はhighが無効でlowが有効です
もしこれを逆にしたかったら、,$4=1とし、戻す場合は$4=0です
(電源の周期を変更しなければなりません)
$5 リミットピン反転(ブール)
デフォルトでは制限用のpinはarduinoの内部プルアップ抵抗でhighが保たれます
制限用のpinをlowにした事がトリガと解釈されます
これを逆にする場合、$5=1とし、戻す場合$5=0とします
電源の周期を変更しなければなりません
注意: もし制限用pinを逆にする場合は、配線された全ての制限用pinに負担をかけ過ぎないように外部プルダウン抵抗が必要です
$6 プローブピン反転(ブール)
デフォルトでは探針用pinはarduinoの内部プルアップ抵抗によってhighに保たれます
探針用pinをlowにした事がトリガと解釈されます
これを逆にする場合、$6=1とし、戻す場合$6=0とします
電源の周期を変更しなければなりません
注意: もし探針用pinを逆にする場合は、配線された全ての探針用pinに負担をかけ過ぎないように外部プルダウン抵抗が必要です
$10 状態リポートマスク(バイナリ)
この設定はユーザーが「?」を送信した際にリアルタイムデータをレポートするかどうかを決定します
デフォルトでは有効です
・runningかどうかの状態 (これはオフに出来ません)
・マシンの位置
・ワーク位置 (座標位置とその他のオフセットが適用されたマシン位置)
3つのレポートはユーザーのマシンに対する設定や問題の発見等に役立ちます
これはシリアルRXバッファ、ブロックバッファの使用方針、リミットpinの状態を含みます
(high または lowでZYXの順序が示されます).
Grblは下の表で決定されるデータを返します
確認したいレポートのタイプを選択して送信して下さい
例えばマシン位置とワーク位置が必要な場合1と2を追加するのは$10=3とします
またマシン位置と制限用pinの状態が必要なら1と16なので$10=17です
一般には表示するためのリソースを必要とするので、リアルタイムの状態データは最小にします
例えばリミットpinのレポートはユーザーがマシンをセットアップした時だけ必要で、
それ以降は無効にすることが推奨されます
全てを表示すると使い易くはありません
Report Type |
Value |
Machine Position |
1 |
Work Position |
2 |
Planner Buffer |
4 |
RX Buffer |
8 |
Limit Pins |
16 |
$11 接合偏差(mm)
接合偏差は加速管理がどの程度の速さでG-codeのパスのセグメントの接合ラインを動かせるかを決定します
例えばG-codeのパスが鋭角10°で曲がってからフルスピードで戻ってくる場合を考えます
この設定はステップを落とす事なく安全に角を曲がるにはどの程度速度を落とす必要があるかを決定します
どの様にそれを計算するかは少し複雑です
しかし一般的には高い値を与えるとより速く角を通りますが、その間ステップをロスするリスクが高まります
低い値を与えると加速管理はよりゆっくり慎重にコーナリングします
速すぎる速度で角に入る事が問題になる場合、この値を減少させて失速させます
もし速く交差箇所を通過させたいなら、この値を増加させてスピードアップします
コーナリングアルゴリズムについて気になる人はリンク(https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/)を参照して下さい
これは非常に単純で効率的です
$12 円弧寛容性(mm)
GrblはG2/G3(円弧補完)を小さい線に再分割する事によって円や円弧や螺旋にします
その様な円弧は正確にこの値以下になりません
0.002mm以上が大半のマシンの精度なので、恐らくこの値を調整する必要はないです
しかしあまりに円が荒いまたは円弧がゆっくり動作している場合は、この設定で調整します
より低い値にすると精度が上がりますが、あまりに小さいラインが多くなると、オーバーロードしてパフォーマンスに問題が発生します
高い値は精度が下がりますが、少ない行数にしなければスピードは上がりません
好奇心のある人のため、弧の許容誤差は弧の終点による線分から最大の垂直距離で定義されます
別名コード
多少の基礎幾何学を持って、弧をたどる線分で設定を満たす長さを解きます
この様に弧をモデル化しています
最適なパフォーマンスのための長さによって、弧線分のセグメントが自動で調整/スケールされます
$13 リポートインチ(ブール)
Grblはリアルタイムに位置ならびに座標オフセットと探索パラメタをレポートします
デフォルトではミリで表され、$13=1とすると、インチで表されます
戻す場合は、$13=0とします
$20 ソフトリミット(ブール)
ソフトリミットはマシンが範囲外に行って何かを壊すことを安全に防ぎます
これはわかっている各軸とマシン座標の場所で働きます
常に新しく送られたGコードが、マシンスペースを上回ったかチェックされます何処にあろうとスピンドルと冷却装置を停止して問題を示すアラームを出します
その後ハードリミットで強制停止した位置からのマシン位置を返します
注意: ソフトリミットはホーミングが有効で、どの位置にあるか知るために正確な軸の最大移動設定が必要です
$20=1で有効、$20=0で無効
$21 ハードリミット(ブール)
ハードリミットは基本的にソフト制限と同じ動きです
物理的なスイッチを使用する点で異なります
(機械、磁気、光学等の) スイッチを、各軸の終わりの位置か、トラブルが発生しないと感じる場所に配線します
スイッチを押すと迅速に冷却装置とスピンドルを停止し、全てをリセットします
ハードリミットを使う場合は、制限用のpinが内部プルアップによってhighに保たれます
オープンスイッチをpinとグランドに配線し、$21=1とします(無効にする場合は、$21=0とします)
電気的な干渉を避けることを強く進めます
一つの軸の両端に制限を設ける場合は、2つのスイッチのpinとグランドを並列に配線します
ハードリミットは致命的なイベントとして考えられます
ステッピングモータは速やかに停止してステップはロスされます
位置のフィードバックが保証される方法はありません
ハードリミットが実行されると、無限アラームモードになりマシンのチェックと強制リセットの機会が与えられます
これは純粋に安全の為の機能です
$22 ホーミングサイクル(ブール)
ホーミングは、スタートアップで毎回設定される正確精密な位置です
言い換えると何時でも何処にいるかを正確に知ることです
一度Grblを使用して加工を行った後、再起動した時に今どの位置にいるのかがわかりません
何処にいるかを算出するタスクが残されています
もし原点があれば、それを常に0参照位置として再開し戻ることができます
ホーミングサイクルのセットアップは固定された位置にリミットスイッチがなければいけません
通常それらは+x, +y, +zの中で最も遠い点です
ハードリミットと同様にリミットスイッチにリミットpinとグランドを配線してホーミングサイクルを有効にします
もし好奇心があるならリミットスイッチとハードリミット両方の使用もできます
デフォルトではホーミングサイクルは最初にZ軸のワークスペースをクリアにしてからX軸とY軸を同時に動かします
設定方法は下記です
(コンパイルオプションも含みます)
またもう一点、ホーミングサイクルを有効にすと、ホーミングサイクルが動作している間は全てのGコードを締め出します
これはこの後の説明でもありますが、ロック無効コマンド($X)が有効でない限りは軸が動かない事になります
全てのCNCコントローラーではないが、ほとんどのもので同じような事が行われていて、ユーザーの位置設定ミスを防ぐための安全対策です
もしあなたが問題のあると思われるバグを見つけたら、改善を試みますので我々に知らせて下さい
注意: config.hをチェックアウトするとよりこの機能の詳細がわかります
ホーミングサイクル中に最初に動く軸の設定で、ホーミングサイクル中のロック機能を無効にしてスタートアップする事も出来ます
$23 ホーミング方向反転マスク(int,バイナリ)
デフォルトでは、原点用のスイッチは正方向にあると仮定します
最初にXY軸が動く前に、正確な位置に移動するためZ軸をゆっくりとスイッチのまわりを正方向に動かします
もしマシンのスイッチが負の方向にあれば、逆にする事が出来ます
これはステップポートを逆にするマスクや、方向ポートを逆にするマスクの様に、軸を逆にするために検索して示されたテーブルの値を送信します
$24 ホーミングフィード(mm/min)
ホーミングサイクルは最初にリミットスイッチを高いシークレートで探してから、見つかると低いシークレートにして精度を上げます
フィードレートは遅くなります
この設定を適切に行うと、どんなレート値でも反復可能で正確な原点が用意されます
$25 ホーミングシーク(mm/min)
シークレートはホーミングサイクルの検索のレートでリミットスイッチを探すための最初の試みです
速すぎて壊れないように十分短く調整して下さい
$26 ホーミング非跳ね上がり(ミリ秒)
スイッチのトリガ時間についてです
上下する少ないミリ秒の幾らかの電気/機械的ノイズの解決のために、ハード的に調整された信号か、ソフト的に短い遅延によって上下させた信号を使う必要があります
Grblは短い遅延を原点サイクル中に発生させます
この遅延設定はどんなスイッチにも必要な反復可能な回帰をします
ほとんどの場合5-25ミリ秒です
$27 ホーミングプルオフ(mm)
良いハードリミットは、リミットスイッチを共有出来て、原点サイクルの動作完了後に全てを引き上げて停止します
この設定でホーミングサイクル後のハードリミットのトリガでのトラブルを防ぎます
$100, $101 と $102 [X,Y,Z] (ステップ/mm)
各軸のステップがどれくらい離れた実動作をするのか知る必要があります
マシンに合わせてステップ/mmを計算します
・ミリ単位でモータの回転運動を調整します
これはリードネジのピッチやベルトによって実現されます
・フルステップの回転(一般的に 200)
・マイクロステップのコントロール (一般的に 1, 2, 4, 8, か 16)
ヒント:高いマイクロステップの値を使用する事(例えば 16)はトルクを減少させます 最も低い値が望んだ軸の解決と快適な動作特性をもたらします
ステップ/mmで下記のように計算できます
ステップ毎mm = (ステップ毎の回転運動*マイクロステップ)/mm毎回転運動
あらゆる軸にこの値を計算して設定して下さい
$110, $111 と $112 [X,Y,Z] 最大レート(mm/min)
各軸が動作可能な最大レートを設定します
Grblは常に動作を計画し、個々の軸のいずれかが最大レートでないかをチェックします
もし確実に最大レートのリミットを超える場合は動作を遅くします
これは各軸が独立したスピードを持つことであり、一般的にはより遅いZ軸の制御にとても役立ちます
シンプルな設定方法はこれらの値を各軸でゆっくりと徐々に上昇させながら動作させます
例えばX軸のテストで、G0 X50を送信すると、十分距離があれば加速して最大レートになります
モーターが立ち往生した時に最大レートの閾値だと判ります
それは僅かなノイズの発生でも、モーターを傷つけてはいけません
これより10~20%下回った値で、製品、摩擦、制作物、道具に合った値に設定して下さい
それを他の軸にも繰り返し適用して下さい
注意: この設定はG0のシークレートも設定されます
$120, $121, $122 [X,Y,Z] 加速度(mm/秒^2)
この設定は軸の加速のパラメーターをmm/秒/秒で設定します
簡単には低い値だと容易にゆっくりした動きに入れます
高い値の間は望んだ動作をより速く堅く行います
最大レートの設定は独立して加速させます
これはマルチな軸の動作で最も貢献していない軸と同じ加速度にできる事を意味します
もう一度、独立した各軸に設定値を増加させていき、モーターを立ち往生させるシンプルな設定方法について、
最終的に最大レートの10~20%低い値の加速度を設定します
これは製品の摩擦と磨耗の原因です
ちょっとしたG-codeでドライテストを行う事を強く勧めます
全軸を同時に動かすとたまに積載が異なる事があります
$130, $131, $132 [X,Y,Z] 最大移動量(mm)
これは各軸の最大移動量をミリ単位で設定します
この設定が有効になるのは、ソフトリミット(ホーミングも)を有効にした場合のみです
ソフトリミットが動作コマンドによってマシンリミットを超えないようにチェックしている時にだけ使用されます
その他の$で始まるコマンド
は追加の操作を提供します
G-codeのパーサーの状態や原点サイクルの状態を表示したりします
このセクションはこれらのコマンドの使用方法の説明です
$# Gcodeパラメタ表示
G-codeで保存されるパラメーターはG54-G59の動作座標、G28/G30で定義済みの位置、G92の座標オフセット、ツール長のオフセット、そして探索されたもの(オフィシャルではないが追加したもの)です
これらのパラメーターは殆どEEPROMに直接書き込まれます
これは電源がダウンする事を考慮せずに、明確に変更があるまで維持される事を意味します
一時的なパラメーターの場合は、電源サイクルで消えます
G92とG43.1のツール長のオフセットととG38.2の探索データです
G54-G59の動作座標はNIST Gコード規格とEMC2 (linuxcnc.org) によって定義されたG10 L2 PxかG10 L20 Pxによって変更出来ます
G28/G30の定義済み位置はそれぞれG28.1とG30.1のコマンドによって変更出来ます
$#が呼ばれると、各システムで対応したマシン座標からのオフセットを返します
TLOはツール長のオフセットを意味し、PRBは最後の深く探った座標を意味します
[G54:4.000,0.000,0.000]
[G55:4.000,6.000,7.000]
[G56:0.000,0.000,0.000]
[G57:0.000,0.000,0.000]
[G58:0.000,0.000,0.000]
[G59:0.000,0.000,0.000]
[G28:1.000,2.000,0.000]
[G30:4.000,6.000,0.000]
[G92:0.000,0.000,0.000]
[TLO:0.000,0.000,0.000]
[PRB:0.000,0.000,0.000]
$G Gcodeパーサ状態表示
このコマンドはGコードパーサーのアクティブな全てのモードを表示します
下記の様になります
[G0 G54 G17 G21 G90 G94 M0 M5 M9 T0 S0.0 F500.0]
これらのアクティブなモードは、次はどの様なGコードブロックかコマンドがGコードパーサーによって解釈されるかを決定します
新しいGコードとCNCマシニングのために、モードを部分的にパーサーにセットすることで、定期的にどの様に解釈するかをパーサーに伝えなくてもよいです
これらのモードはモーダルグループに統制され、 これは同時に論理的にアクティブには出来ません
例えばインチで解釈するかミリで解釈するかを設定します
下記はサポートされるモーダルグループの一部のリストです
より複雑なものや詳細はLinuxCNCのウェブサイトにあります
G-codeコマンドで太字のものは電源オン時にデフォルトのモードです
Modal Group Meaning |
Member Words |
Motion Mode |
G0, G1, G2, G3, G38.2, G38.3, G38.4, G38.5, G80 |
Coordinate System Select |
G54, G55, G56, G57, G58, G59 |
Plane Select |
G17, G18, G19 |
Distance Mode |
G90, G91 |
Arc IJK Distance Mode |
G91.1 |
Feed Rate Mode |
G93, G94 |
Units Mode |
G20, G21 |
Cutter Radius Compensation |
G40 |
Tool Length Offset |
G43.1, G49 |
Program Mode |
M0, M1, M2, M30 |
Spindle State |
M3, M4, M5 |
Coolant State |
M7, M8, M9 |
更にアクティブな道具の番号をT、スピンドルのスピードをS、フィードレートをFで表し、これらは全てリセットに際してはデフォルト値の0です
これらの詳細は説明しませんが、重要なのはパーサーの状態を決定する事です
$I ビルド情報表示
これはGrblのソースのビルド日時を表示します
$IオプションでユーザーがCNCマシンのその他の使用情報を短い文字列で保存出来ます
$I=xxxの送信で、xxxの所に80文字以下でユーザーの文字列を入力します
次に$Iを使用しビルド情報を表示します
この文字列はバージョンとビルド日時の後に表示されます
$N スタートアップブロック表示
$Nxは電源オンまたは再起動時に毎回実行されるスタートアップのブロックです
言い換えればGコードのスタートアップブロックは、何故かデフォルトで設定されているか、必要として毎回開始しているかです
システムのデフォルトでは2つのブロックを保存できます
Grblに接続した時に$Nをタイプしてエンターします
この様に応答します:
$N0=
$N1=
ok
簡素な表示ですが、これは保存されているGコードのブロックは無い事を意味し、 $N0がスタートアップで実行され、$N1は次に実行されます
$Nx=line スタートアップブロック保存
重要: スタートブロックでの(G0/1,G2/3,G28/30) コマンドによる強い動作は、十分注意して行って下さい
これらの動作コマンドが電源オンまたは再起動で毎回実行されることになるので、緊急時に、停止や再起動すると、スタートアップブロックの動作によって、より状況を悪くする事が出来てしまいます
また、EEPROMにデータを保存するコマンド(G10/G28.1/G30.1の様な)は置かないで下さい
これはGrblが絶えず全てのスタートアップとリセットを上書きしてしまいます
ので、Arduino's EEPROMをすり減らしてしまいます
典型的なスタートアップブロックの使用方法はシンプルにG20インチモードのようなモーダルの状態を設定することで、毎回異なるシステム座標で動作するか、ユーザーが書いたユニークな形のクレイジーなプロジェクトに必要な方法を提供することです
スタートアップブロックを設定するには $N0=の後に続けて正しいGコードブロックを入力してエンターします
Grblは入力されたGコードブロックが正しいかどうか判定してokまたはerrorを返します
何かが上手くいかない場合はそれが返されます
エラーした場合は保存されません
例えばG54の動作座標、G20のインチモード、G17のXY通常、を最初のスタートアップブロックの$N0に設定したいとすると、
$N0=G20 G54 G17と入力しエンターしてokが返されます
$Nを入力すると設定内容が確認できて、 $N0=G20G54G17となります
前の例のように一度スタートアップブロックがEEPROMに保存されると、実行可能であれば、スタートアップ時か再起動時に何時でも表示し示されます
Grbl 0.9i ['$' for help]
G20G54G17ok
もし複数のGコードスタートアップブロックを使っていれば、毎回適切に表示されます
もしスタートアップブロックを消したい場合は(例えばブロック0)$N0=と等号の後に何も続けずに入力して下さい
また、もし原点回帰を有効にしていれば、スタートアップブロックはスタートアップではなく、原点サイクルの後に即座に実行されます
$C Gcodeチェックモード
この設定はGコードパーサーのプロセスを完了させるための切り替えです
通常の操作のようですが、軸を動かす訳ではなく、ネジ面の平行部を無視してスピンドルと冷却装置の電源をオフします
これは新たなGコードプログラムをパーサーとエラー(ソフトリミット違反のチェック)表示モニタによってチェックする方法を提供する意図があります
オフにした場合は自動でソフトリセットします(^X)
これには2つの目的があります
コードの管理を簡単にすることと、Gコードモードが想定していない場合にユーザーがジョブを行うのを防ぎます
システムの再起動は常にフレッシュな状態にします
$X アラームロック強制終了
アラームモードは何かしらの致命的な誤りがあった時の状態で、ハードリミットかサイクルの中断、または位置が不明のような場合です
デフォルトではホーミングを有効にしてArduinoの電源を入れると、アラーム状態に入ります
何故ならGrblはこの位置を知らないからです
アラームモードは$Hコマンドでホーミングサイクルが実行されるまで全てのGcodeコマンドをロックします
またはユーザーがアラームロックを上書きする必要があるなら、リミットスイッチで軸を動かします
例えば$Xコマンドはアラームロックを上書きして、機能をもう一度動かします
しかし気を付けて下さい!!
これは緊急時の状況で使用すべきです
位置は失われ、思いもよらない事になります
G91に付加されるモードで短く動かすことが推奨されます
ホーミングサイクルの後速やかにリセットして下さい
$H ホーミングサイクル実行
このコマンドはホーミングサイクルを動作させる唯一の方法です
他のモーションコントローラーはホーミングサイクルのために特別なGコードコマンドを示します
しかしこれは標準のGコードによる誤った形です
ホーミングはコントローラによって区別されたコマンドで完了されます
ヒント:ホーミングサイクルの後、むしろ手動でワークスペースの真ん中に位置を決める場合には、G28かG30のプリ定義位置のホーム位置を設定できます
これらはホーミングサイクルの後の最初の動作でどこへ動かしたいのかを設定します
G28.1(or G30.1)で位置を保存します
$Hの後のホーミングはG28(or G30)で自動で動作します
一般的にはXY軸を真ん中にしてZ軸を上に残して、 スピンドルがツールを妨げないようにします
$RST=$, $RST=#, and $RST=* デフォルトの設定を保存
これらのコマンドはリスト化されていないメインの$ヘルプメッセージで、利用可能なユーザーの保存したものや全てのEEPROMのデータです
注意: 確実なシステムの初期化完了のため、これらのコマンド実行後に自動的にリセットされます
$RST=$ で現在の内容を消去して$$のデフォルトの設定になります
これはGrblのコンパイル時に定義されたデフォルトの設定ファイルです
しばしばOEMはマシンの仕様により要求された設定で、ファームウェアをビルドします
これはもし誤っていたりやり直したい時に、1つの正方形に戻す方法を提供します
$RST=# で現在の内容を消去し、G54~G59の動作座標オフセットとG28/G30でEEPROMに保存された位置を0にします
これの一般的な値は$#で表示されます
これはそれぞれ手動でG20 L2/20またはG28.1/30.1コマンドによる設定以外の、これらの消去の簡単な方法を提供します
$RST=* 使用される全てのEEPROMのデータを消去/保存します
これは$$を含む設定で$#のパラメータ、$Nのスタートアップライン、$Iのビルド情報文字列です
注意すべきことは削除されるのはユーザーデータエリアのみで、確実にEEPROMのデータを削除する訳ではないことです
完全にEEPROMのデータをクリアするにはArduinoIDEのEEPROM関連のスケッチの例を使用してください
リアルタイムコマンド: ~、!、?、とCtrl-X
最後の4コマンドはリアルタイムコマンドです
いつでもどこでも送信できることを意味していて、動作に問題がなければ即座に返答します
詳しくいえば、シリアルストリームで実行される特別な'picked-off'文字です
数ミリ秒で使用できます
~ サイクルスタート
これはサイクルのスタートまたは再開のリアルタイムコマンドで、いつでも送信できます
動作をキューに持っている時に、バッファを準備してサイクルをスタートして軸を動かします
とはいえデフォルトでは自動サイクルが有効になっていて、サイクルの供給停止時を除き、新たにユーザーがこのコマンドを必要とすることはありません
サイクル供給停止時はサイクルをスタートさせます
サイクルのスタートはバッファの準備ができていて、ホーミング動作等をしていない場合のみです
! フィード保持
供給停止コマンドは、制御決定によってアクティブなサイクルを停止することで、位置は失われません
これはリアルタイムでほとんどの場合有効です
一度終了か一時停止すると、プログラムを再開するためのサイクルスタートのコマンド発生まで待ちます
供給停止は回帰プロセスやその他のプロセスに影響しない一時停止ができます
もしプログラムの途中で停止する必要があり、位置をロストしないくらいの余裕がない場合、供給停止は停止の全てを持っていくように動作します
初回終了時、リセットの命令ができます
緊急時以外は、常にリセット前の動作時に供給停止を実行して下さい
? 現在の状態
?コマンドはリアルタイムで即座に今アクティブな位置と動作座標を返答します
オプションで、受信のシリアルバッファとリポートマスク設定の状態による計画バッファの使用方法を返答します
?コマンドはおそらく他のGrblのプロセスと非同期でいつでも送信できます
$13の設定は、ミリかインチかを決定し、リポートする設定です
?が押された時、即座に下記を返答します
<Idle,MPos:5.529,0.560,7.000,WPos:1.529,-5.440,-0.000>
アクティブな状態は、: Idle, Run, Hold, Door, Home, Alarm, Checkです
Idle: キューに動作命令はなく、全てのシステムで準備ができている
Run: サイクル動作中を示します
Hold: 供給停止が実行されると、ゆっくりと停止した後ホールドされ、プログラムの再開のためのサイクルのスタートを待ちます
Door: (v0.9iで追加) コンパイラオプションの供給停止の項目で、スピンドルと冷却装置をシャットダウンし、ユーザーがdoorスイッチを閉じてサイクルをスタートするまで待ちます
セーフティードアのOEMに役立ちます
Home: ホーミングサイクルの途中です
注意: 一度ホーム位置が設定されますが、ホーミングサイクル中は位置は更新されません
Alarm: 位置がわからないか、何かの誤りを示します
この状態は全てのGコードコマンドがロックされている時、設定が必要な時です
$Xはロックを解除してこの状態をIdleの状態にします
これはもう一度動作を考慮することになります
先にも触れたようにアラームの後にどのように動作させるかに注意して下さい
Check: Gコードのモードをチェックします
これは全てのGコードコマンドの応答とプロセスですが、動作や変更ではありません
$Cで一度切り替えオフにすると、自動的に再起動します
Ctrl-x リセット
これはソフトリセットコマンドです
リアルタイムにいつでも送信できます
リセットしますが、コントロールする方法を含み、マシン位置を保持し、Arduinoの電源オフ以外のリセット動作を行います
唯一ソフトリセットは、ステッピングモータ動作中に行われると、問題が発生し位置を失います
この場合は失ったマシン位置を追跡しリポートします
制御不能な減速度なので失ったステップがどの程度ロストしたかをフィードバックできないからです
(この問題はステッピングモータの一般的な問題です)
別の方法は、再初期化してスタートアップし、継続することです
ジョブをスタートさせる前にソフトリセットすることが推奨されることに注意して下さい
これはジョブを走らせる前にセットアップまたはGコードモードをアクティブにすることを保証することです
マシンが常に矛盾せずフレッシュにスタートし、これを予期して動作させることです
あかん。。
あかん。。
プロッタ段階で色々試していて、
色々あかんことがわかってきた。
Inkscapeで原点を設定する時のOrientation points→Z depthと、
Path to Gcode→Z safe height for G00 move over blankでZ軸の入りと出の上下を調整するんだね。。
プロッタの場合基本同じ値になる気がするけど、微調整して試した。
いくつか致命的なところが出てきちまったんだが。。
まずは今回のMAXクオリティの結果をみてくれ
ひどいことは覚悟していたが、
まさかここまでとは。。
Z軸がうまくいっていないのは、2つモーター設計だけど、1つしか動かしていないから。
これは今発注しているA4988が来てから考える。
片側のZ軸は動いているので、それと全く同じ動きをすればよく、
A4988は電流量を調整できるから、Z軸だけ単純に倍にすればいける!?
もしくは謎のA軸にA4988をセットして試してみようと思う。
あと一番の問題はX軸で、
3Dプリンタで出力した部品の設計に無理があって、
動作中に目に見えてわかる位にゆらゆらブレながら動いている。
唯一安定しているように思えるY軸も、X軸程ではないが、
3Dプリンタで出力した部品が目に見えてゆらゆらブレながら動いている。
剛性弱し!阿部寛!!
X軸はアルミを加工した部品に変えたい。
でもZ軸とかなり密接なので、苦労して作った3Dプリンタの部品はできるだけ使いたい。
なのでそこは切除できるようになった段階で、
加工した金属パーツでグレードアップという形にしたい。
ということでX軸のモータ受け、軸受は頑張って今できる手作業で加工した金属パーツに総取り換えになりそう。
とほほです。
プロッタ段階までいけ?
肝心のハードウェアは色々考えすぎてこんなんなりました。
CNCというか3Dプリンタ?変なハードになりました。
作成はものスゲー難しかった。。しかも現状精度がどうなんていえないレベルの代物で。。。
Z軸のモーターを2つにしたはいいけど、制御方法がわからんwwwwww。
モーターは熱くなるのでフレームに触れさせないほうがいいって、
後から知ったよwwww。
3Dプリンタで作った部品の精度が低く、いろいろ歪んでるぽくて、
軸がうまくまわらないwww。
ま、まぁ、、色々とあかん点は追々改善していこうと思う。
スピンドルの所はどうするか決定できてないけど、
とりあえずプロッタとして動かせればそこから光明が見いだせるんじゃないか!?
と思い、単純な矩形の画像をGrblControlerで読み込んで、
デフォルトのままStartしてみた。
結構音うるさい。。。
結果がこちらです
wwwwwwwwwwwwwwwwwwwwwww。。。
これ矩形じゃねぇわwww。
では!
CAMに関しては見えてきた
CAM関係をどうしようかと考えていたんだが、
ある程度2D,3D共にやり方が見えてきたのでメモ+紹介します。
環境はWindowsです。
2Dの場合は二つ見つけたやり方があって、
一つ目が、
○Inkscape+そのプラグイン→Gコード→NCVCというやり方で、割と王道?っぽい。
User:BHSPitMonkey/Inkscape and Gcodetools Tutorial - ShapeOko
まずInkscapeをインストールして、プラグインをcnc-club/gcodetools · GitHubから「DownloadZip」から落として解凍したファイル全てを、
Inkscapeをインストールしたフォルダ\Inkscape\share\extensions
に展開。
Inkscapeを(再)起動するとエクステンション→Gcodetoolsがあらわれる
□この方法でGcode化してNCVCに読み込むために最低限必要なことは
・CAMレイヤーとORIGINレイヤーがあること
・対象の画像がパスに変換されていること
・原点情報が設定されていること
・Tool情報が設定されていること
なので、まずCAMレイヤーとORIGINレイヤーを作成。これは単純にInkscapeの使い方なので省略。
ここからがGcodetoolsの設定。
ORIGINレイヤーでエクステンション→Gcodetools→Orientation pointsで原点の設定をする。
とりあえず今回は単純にNCVCで読み込めるかを見たいだけなので、
Z surfaceを0、Z depthを1にして適用した。うまくいくと左下に原点情報が表示される。
surfaceは削られる材料の表面の基準値で、depthは掘り込みの深さで削る方向がマイナスなので基本ここはマイナスになるっぽいです。
ここで自分の環境特有かわからんが、
Gcodetoolsのメッセージが表示されるっぽい所に
「AttributeError: ‘module’ object has no attribute ‘unittouu’” or “unittouu not part of inkex module」
と表示され、原点が設定されてくれなかったので、ここ等を参考に、Gcodetoolsをインストールしたフォルダにあるlaserengraver.pyを修正。
具体的には
doc_height = inkex.unittouu(self.document.getroot().get('height'))
のところを
doc_height = self.unittouu(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0])
に変更。
オブジェクトのプロパティが違うのに、何故これでちゃんと動く人がいるのだろう??と疑問に思いつつ、動いたので深追いはしなかった。
次にToolの設定。エクステンション→Gcodetools→tools liblary
とりあえずdefaultで適用。
Inkscapeのテキスト入力する機能を使って、緑の領域をフォーカスして値を書き換えられます。
でGcode化する時にパスが選択されている必要があるので、ここで画像のオブジェクトを選択してCTRL+SHIFT+C。
これで画像がパスに変換されて、選択されている状態になる。
やっとエクステンション→Gcodetools→Path to GcodeでGcode化する。
Preferenceタブでファイル名と出力先を入力。
※ファイル名は.ncdの拡張子にしないとNCVCで読み込めない。
Post-processorをRound all values to 4 digitsに選択、
Path to Gcodeタブに戻って適用。
NCVCで読み込んでみる。
こことか非常に参考になりました。
この方はマジ神。早く自分もこれくらい出来るようになりたいです。
2Dでもう一つ発見できたやり方は、
○一度画像をSTLにして、下記で説明する3Dの場合と同じ流れに持って行きます。
2D→STL変換できるソフトは他にも沢山あるだろうが、
2D Image to STL Converterというなんともそのまんま、なソフトを使わせていただいた。 このソフトはシンプルで超簡単。
OpenImagesで画像ファイルを選んでCreateSTLで出力するだけw。
123D designで開くと、
STLに出来れば、2Dのデータをいつもの3DCADのソフトで修正したりできちゃう。
ここからは3Dの場合のやり方になる。
slic3rってソフトでGコード化→NCVC
slic3rはなんかゴイゴイスーなソフト。
起動してAddからSTLを読み込む。
なんか凹凸が変wwww。
と思ったけどGcode化してみるとNCVC上のパスは普通だった。。
Plater→Export G-code
でncdにしてNCVCで読み込んでみる。
もちろん3Dになってるから、Inkscapeでやるやり方とは、大分違うパスのデータになる。
この例の様に単純なデータだといいんだけど、もっとパスが複雑になってデータが多くなると、特に3Dだとなんだかよくわかんないデータになってしまうので、要所要所で修正が必要。
2Dならなるべく最初の時点で、輪郭を際立たせて後の3D化→Gcode化で綺麗にいけるようなデータ作成を練習して慣れる事が必要。
後実際に動かすハードウェアに対する最適化の設定も追々ということで。。
まぁその辺は意気込んでやろうとすると挫折しそうだから、やりながら適当に。。
他に安上がりで精度高いやり方知ってる人いたらドンドココメント下さいね!!
Arduino+A4988でGrblの経過報告
先日配線ミスにより、ArduinoのUSB通信機能がぶっ壊れましたので、
Arduinoをもう一枚発注していて、届きましたが。。。
早速ぶっ壊しました~wwwwww。
では、今回のぶっ壊し方を説明します。
環境的にはArduinoIDEと、AVRISP-mkⅡの両方でスケッチが書き込める環境で、
何回かArduinoIDEからLチカ等の適当なスケッチを書き込んだ後、
単にAVRISP-mkⅡで「書き込み装置を使って書き込み」も同じスケッチが書き込めるかテストしました。
これだけです。
AVRISP-mkⅡでのスケッチの書き込みの後、arduinoIDEからはスケッチが書き込めなくなりました。
今回はこの時arduinoのpinは使っていなかったので、電気的に壊れた訳ではないです。
うわ~と思い、arduinoのリセットボタンや、USBドライバの再インストール等をしてみましたが復旧せず、
DFUモードにしてファームを焼き直すというのを行いました。
方法についてはWeb上の他の記事が多くあるので割愛します。
前に壊れたもう一つの方のarduinoは基板上のショートさせるべきpinをショートさせても、この様にAtmega16u2として認識してくれませんでした。
電気的に壊れているからだと思います。
この方法でFlipを使ってファームのHexを書き込む画面ですが、
この画面なのですが、
Eraseが成功後、Flashの時にアイコンが赤くなったまま、
うんともすんともいわなくなりました。〔画像ではグレー色〕
その状態でUSBを抜き差しすると、なんとDFUモードのままです!?
(ショートさせるべきpinはショートさせていない)
買って2日で一生DFUモードです。
さすがにこりゃまずいと思い、avrdudeでの書き込みを試してみました。
avrdude -F -D -C ../etc/avrdude.conf -c avrisp2 -P usb -p atmega16u2 -U flash:w:Arduino-usbserial-atmega16u2-Uno-Rev3.hex:i
デバイスのシグネチャがおかしくなってしまった様で、
コマンド実行時にシグネチャが違うと怒られましたが、avrdude.confの16u2のところのシグネチャを、強引に間違ったシグネチャに合わせたら書き込めました。
シグネチャが違うって事は模造品を掴まされたとかって場合も考えられるのかな?
とか思いつつ。。
これで、シリアル通信自体は復旧し、Grblも動かせましたがスケッチの書き込みは相変わらずできません。
結局原因は未だ調査中ですが、今後AVRISP-mkⅡとarduinoIDEの併用は避けます。
こんな事でとても時間がかかってしまっています。。orz
肝心のA4988とGrblですが、結局シールドを買ってしまいました。。
Grblを書き込んだarduinoとA4988+モータと外部電源を接続しただけのシールドで、
とりあえずモーターは回りました!!
前回の回路で回らなかった原因はA4988の電流調整を絞りすぎていて、
電流量が少なかったからです。
なので勿論シールドはなくてもいけるだろうけど、coolantや緊急停止スイッチ等も付いているので、シールドがないとその辺の管理が大変なのかな~と思います。
フレーム回りは現在こんな感じです。
どんなかんじやねんwww。
CAMはNCVCでやろうと思っていますが、
3Dの場合123Ddesignを使っていて、dxfに変える方法が判っていません。
その点は安価には難しいのかもしれません。
STLをdxfにできればいいんだから、ありそうだけど、
ぶっちゃけあまり調べていません。
Jw_cad→NCVCでやった方が解りやすく情報も多いみたいですね!
今回は以上です。
寸ぎり(長ネジ)を切断してみる
CNC的な何かは、長ネジ方式にしようと思っていて、
モノタロウで10本入りの長さ1000mmの長ネジが安かったので購入した。
もうちょっと太いのにしてもよかったんだが、
M6のやつにした。
切断は前にこの動画を見て、便利そうだと思い買ってしまった
「evolution Fury3」でやろうとした。
固定型の丸鋸は初めて使ってみたんだが、
安全ゴーグルと手袋をしていざ、ハンドルを握りスイッチを入れると、
ご近所さんごめんなさい的なうるささで、固定した寸ぎりに刃をあてると、
「ドン!」という衝撃音とともに切断できたんだが。。
断面はこんなんなっちった。
もうちょっとゆっくり刃をあてれば良かったんだが、
固定する器具が片方にしか付いていないので、刃をあてた瞬間にずれてしまったし、
衝撃で完全に歪んでもうたし。。
練習してもいいけど兎に角うるさくて、あまり長い時間使いたくなくなった。。
初心者には使いづらいのかもしれん。
そこでちょっと前に衝動買いした
RYOBI のASK1000
これでやるとFURY3に比べると割と静かだし、ゆっくり切れていくので
細かい調節ができる。
ただMAXパワーにしても、切れていく速度が遅いので時間がかかるのと、
その間頑張ってホールドしていなければいけないので、ちょっと疲れる。
これで多少整えればいっか。
軸受けの部分に普通のブッシュを使う予定なのでネジを削りたいがどうしよう。。
モーターで回しながら鑢で削ればいいのかな~。。
今日はここまで。
Arduino+A4988でGrblができない
前回ArduinoのUSBのシリアル通信がおかしくなってしまった。。
頓挫したところから、
avrdudeでusb通信まわりのhexを焼き直してみるというのをやってみた。
※以下は解決できなかった方法です。
※環境などが違えば問題が発生します
avrdudeのインストールは、自分で頑張ってビルドとかしようとすると、
やんややんやって時間がかかってしまうので、
WinAVR download | SourceForge.net
からインストーラでサクッと入れて、
cmdで
Arduinoをインストールしたパス
\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2
に移動して、
avrdude -c avrisp2 -P usb -p m328p -U flash:w:Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex:i
とコマンドすると、
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex"
avrdude: writing flash (15668 bytes):
Writing | ################################################## | 100% 2.66s
avrdude: 15668 bytes of flash written
avrdude: verifying flash memory against Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex:
avrdude: load data flash data from input file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex:
avrdude: input file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex contains 15668 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 5.07s
avrdude: verifying ...
avrdude: 15668 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done. Thank you.
となって書き込めたっぽい。
で、適当なスケッチをArduino IDEから「マイコンボードに書き込む」と、
はい。ダメ~~~~~。
状況は変わらず、mk-Ⅱからシリアル通信する適当なスケッチを書き込んで確認してみる。
シリアルモニタから何か送信すると、ArduinoのRXは点灯して文字で分岐したif内にある処理は実行されるけど、
その分岐にSerial.print(~
と書いていても、ArduinoのTXが点灯しない。シリアルモニタには何も表示されない。
PCからみて受信が、完全にぶっ壊れていました。
ああああああああああああああああああ。
というわけで、またArduinoを発注するしかなさそうです。
orz....
ま、経験ない奴がむちゃくちゃやってる訳だからこういう事もあるよ。
ぶっ壊さずに経験積もうなんてはなっから思ってないから!!。
という謎のカッコつけを自分の中でした後、ふと思った。
自分で互換機を作成していたら、ぶっ壊れた箇所だけ直して使い続けるみたいな、
スマートなことができるんだろうなぁ。。
いつか手を出すと思います。
では!!