CNCjsの使い方、設定、CNCマシンにG-code送る方法

CNCjsを使い始めて2日のド素人です。
ホーミングについて教えてください。

現在1軸のスライダーを自作しており、CNCjsで操作したいと考えています。エンドストップスイッチを使って原点出しをしたいのですが、ホーミングボタンを押しても全くスライダーが動かないので、質問させていただきました(本来はスイッチまで動くという認識で正しいですよね…?)。x300のような、単純にスライダーを動かすコマンドは普通に実行できます。以下、詳細です。

使用しているスイッチはこちらのよく使われているもので、赤と黒のコードをCNCシールドのEND STOPSのX+に接続しています。

ホーミングに関係しそうなパラメータは以下のように設定しています。
$22を1にすれば動くという認識だったのですが、ピクリとも動きません。

$21=0 (hard limits, bool)
$22=1 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$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)

配線やパラメータ設定、操作などに何か問題がありますでしょうか?もし問題なければ、他に考えられることなどを教えていただけたら幸いです。
(X軸だけだとホーミングしないとかありますか…?)
何か足りない情報があればお申し付けください。

よろしくお願いいたします。

こんにちは。

自分のマシンはホーミングを押すとZ軸からホーミングしてZ軸のホーミングが完了してからXYのホーミングとなります。
なのでデフォルト設定ではX軸だけだとZ軸ホーミング時点で失敗になって止まっているような気がします。

ホーミングボタンを押したときにX軸だけホーミングする、といった設定があればいいですがパッと見つからなかったので、起動→接続→アンロックで動くようにする→Xホーミング とかで動かないでしょうか。

返信ありがとうございます!
なるほど、その理屈だと動かないのも納得ですね…

お手数をおかけして申し訳ないのですが、Xホーミングというのはどうすればいいのか教えていただけないでしょうか?

あんまりXホーミングだけやらないのと今すぐ確認できないのでうろ覚えですが
このボタンでできないでしょうか

どうも押せないようです。一軸だからかもしれません…
とりあえず起動した時を原点とする方法でやりたいと思います

ありがとうございました。

度々で申し負けないのですが、もう一点質問させてください。
ステッピングモーターを逆回転させると、その瞬間だけ移動誤差が発生する現象が起きているのですが、何か原因に心当たりのある方はいらっしゃらないでしょうか。

例えばコンソールから「x100 → x200 → x500」と順回転の指令を送ると、その通りにきっちり動くのですが、「x100 → x200 → x500 → x300」のようにモーターを最初進んでいた方向とは逆回転する指示を送ると、きっちり300の位置には戻らず、5mmぐらいズレます。ただし、きっちり動かないのは逆回転させた時だけで、それ以降は指示した分だけ動きます。

スライダーはボールねじではなく、タイミングベルトを使ったベルト式スライダーです。何か原因の心当たりや解決策があれば教えていただけると幸いです。よろしくお願いいたします。

こんにちは

これはバックラッシュかもしれないです。
https://jp.misumi-ec.com/special/gear/tips/03/

ベルト駆動なのでバックラッシュはネジ駆動に比べ大きいとは思いますが、5mmはさすがに大きいのでベルトの張りが甘いのかもしれません。

grblでの1軸だけのホーミングに関して補足です。

grblではホーミングコマンドで軸指定をしてホーミングということはできません。ホーミングをしようとするとすべての軸がホーミングされ、その順番はデフォルトではZをホーミング後、XYのホーミングとなっています。

CNCシールドを使っているとのことなので、arduinoとgrblのセットかと思いますが、1軸だけのホーミングを実現するにはgrblの設定ファイルの編集が必要かと思います。(grbl_esp32の場合はマシン定義のファイル編集になるかと思います)

動作するかどうかは未確認ですが、簡単に流れを説明します。
Arduino IDEでArduinoにgrblを書き込む前にgrblのソースコードを編集します。
config.hというファイルがあるので、それを編集します。

その中に以下のような表記があるので書き換えます。

#define HOMING_CYCLE_0 (1<<Z_AXIS)                // REQUIRED: First move Z to clear workspace.
#define HOMING_CYCLE_1 ((1<<X_AXIS)|(1<<Y_AXIS))  // OPTIONAL: Then move X,Y at the same time. 

これを下記のようにしてHoming cycle1を無効化、homing cycle0をX軸のみとします。

#define HOMING_CYCLE_0 (1<<X_AXIS)                // REQUIRED: X move ONLY
// #define HOMING_CYCLE_1 ((1<<X_AXIS)|(1<<Y_AXIS))  // OPTIONAL: Then move X,Y at the same time.

この編集を終えたらgrblをArduinoへ書き込みます。
実際に動かしてはないですが、たぶんこれでX軸だけのホーミングになるのではないかと思います。
もし1軸でのホーミングを試してみたい場合はチャレンジしてみてください。

X-Large剛性版を購入したものです。
機体組み立てとCNCjsのダウンロードまで進みました。
X軸のリミットスイッチを取り付けるため、移動ボタンを押したいのですが
押す場所がガードかかっている状態でボタンを押せず頓挫しています。
なにか解除手順があるのでしょうか? それとも配線接続がいけないでしょうか?
下画面となります。

こんにちは
CNCxPRO v5を使っている場合ですが

・コンソールにホーミングコマンドやアンロックコマンドが見えるが操作可能になっていないこと
・コンソールに接続中の後に起動ログが出ていないこと

これらから接続後にCNCxPRO v5本体のリセットボタンを押していないことが考えられます。
CNCjsにて接続後に反応がない場合は本体のリセットボタンを押してみてください。


また接続の設定の
・ハードウェアフローコントロール
・自動的に接続
にはチェックを入れてください。

nyaruさん 返信ありがとうございます。
リセットした際にカシュッ音も確認できておりますが、当初の画面上の問題解決
に至っていません。
本来、同梱されるべきケーブルUSB AtoCケーブルが無く(別なタイプのケーブル有 添付写真)、携帯充電器のUSB AtoCケーブルを代用した点に問題があるのかもしれないと考え、Avaron Tech側に確認のメールを送ることにしました。
問題点が別な点にありましたら、改めて質問をさせてください。
早く動かせるようになりたいです。。

スマホ用のUSB-AtoCケーブルでもたぶん問題は発生しないとは思いますが、写真の延長ケーブルではCNCxPROv5には接続できないので、その点については購入元に問い合わせて見たほうが良さそうです。
スマホもPCに認識されない完全な充電専用ケーブルだとCNCxPROv5も動かないので、ケーブルを変えてみるのは良いと思います。

念の為、以下も試してみてください

CNCjsで接続を開始し、CNCxPROv5のリセットボタンを押した後にCNCjsのコンソールに以下のような起動ログが表示されていれば問題なくPCはCNCxPROv5とで通信ができています。
一度確認してみてください。

CNCjs 1.9.22 [Grbl]
COM3 にボーレート 115200 で接続中
ets Jun  8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8
[MSG:Grbl_ESP32 Ver 1.3a Date 20201022]
[MSG:Compiled with ESP32 SDK:v3.2.3-14-gd3e562907]
[MSG:Using machine:CNC_xPRO_V5_XYYZ]
[MSG:Axis count 3]
[MSG:RMT Steps]
[MSG:Init Motors]
[MSG:TMCStepper Library Ver. 0x000701]
[MSG:X  Axis Trinamic TMC5160 Step:GPIO(12) Dir:GPIO(14) CS:GPIO(17) Disable:None Index:1 Limits(0.000,300.000)]
[MSG:X  Axis Trinamic driver test failed. Check motor power]
[MSG:Y  Axis Trinamic TMC5160 Step:GPIO(27) Dir:GPIO(26) CS:GPIO(17) Disable:None Index:2 Limits(0.000,300.000)]
[MSG:Y  Axis Trinamic driver test failed. Check motor power]
[MSG:Y2 Axis Trinamic TMC5160 Step:GPIO(33) Dir:GPIO(32) CS:GPIO(17) Disable:None Index:3 Limits(0.000,300.000)]
[MSG:Y2 Axis Trinamic driver test failed. Check motor power]
[MSG:Z  Axis Trinamic TMC5160 Step:GPIO(15) Dir:GPIO(2) CS:GPIO(17) Disable:None Index:4 Limits(-300.000,0.000)]
[MSG:Z  Axis Trinamic driver test failed. Check motor power]
[MSG:PWM spindle Output:GPIO(25), Enbl:GPIO(4), Dir:None, Freq:5000Hz, Res:13bits]
[MSG:Local access point CNC_xPRO_V5 started, 192.168.0.1]
[MSG:Captive Portal Started]
[MSG:HTTP Started]
[MSG:TELNET Started 23]
[MSG:Flood coolant on pin GPIO(21)]
[MSG:Mist coolant on pin GPIO(21)]
[MSG:X  Axis limit switch on pin GPIO(35)]
[MSG:Y  Axis limit switch on pin GPIO(34)]
[MSG:Z  Axis limit switch on pin GPIO(39)]
[MSG:Probe on pin GPIO(22)]
Grbl 1.3a ['$' for help]
client> $$
$0=4 (Step pulse time, microseconds)
$1=255 (Step idle delay, milliseconds)
$2=0 (Step pulse invert, mask)
$3=0 (Step direction invert, mask)
$4=0 (Invert step enable pin, boolean)
$5=1 (Invert limit pins, boolean)
$6=1 (Invert probe pin, boolean)
$10=1 (Status report options, mask)
$11=0.010 (Junction deviation, millimeters)
$12=0.002 (Arc tolerance, millimeters)
$13=0 (Report in inches, boolean)
$20=0 (Soft limits enable, boolean)
$21=0 (Hard limits enable, boolean)
$22=0 (Homing cycle enable, boolean)
$23=3 (Homing direction invert, mask)
$24=200.000 (Homing locate feed rate, mm/min)
$25=2000.000 (Homing search seek rate, mm/min)
$26=250.000 (Homing switch debounce delay, milliseconds)
$27=2.500 (Homing switch pull-off distance, millimeters)
$30=24000.000 (Maximum spindle speed, RPM)
$31=0.000 (Minimum spindle speed, RPM)
$32=0 (Laser-mode enable, boolean)
$N1=
$N0=
$100=200.000 (X-axis travel resolution, step/mm)
$101=200.000 (Y-axis travel resolution, step/mm)
$102=200.000 (Z-axis travel resolution, step/mm)
$103=200.000
$104=100.000
$105=100.000
$110=2500.000 (X-axis maximum rate, mm/min)
$111=2500.000 (Y-axis maximum rate, mm/min)
$112=2500.000 (Z-axis maximum rate, mm/min)
$113=1000.000
$114=1000.000
$115=1000.000
$120=100.000 (X-axis acceleration, mm/sec^2)
$121=100.000 (Y-axis acceleration, mm/sec^2)
$122=100.000 (Z-axis acceleration, mm/sec^2)
$123=200.000
$124=200.000
$125=200.000
$130=300.000 (X-axis maximum travel, millimeters)
$131=300.000 (Y-axis maximum travel, millimeters)
$132=300.000 (Z-axis maximum travel, millimeters)
$133=300.000
$134=300.000
$135=300.000
ok

追記:
CNCjs バージョン1.9.23とCNCxPROv5の組み合わせを試してみました。
接続後に一切のコマンドを受け付けなくなる挙動が見られたので、CNCjs 1.9.23は使わないほうが良いです。一度アンイストールして古いバージョン(1.9.22とか)をインストールしてみてください。

私も同じ状態でしたが、使えるようになりました。
grblのバージョンは最新でしょうか?ネットの記事を見ていると「v0.8を使えばよい」みたいなことがけっこう書かれていましたが、最新でなければきちんと動かないそうです。

もし最新でないようなら、古いバージョンの実行ファイルではなく、最新のものをzipで落として試してみてください。

(X-Large剛性版というのをよくわかっていないので、的外れだったらすいません)

ご回答いただきありがとうございます!
確かにバックラッシの可能性は高そうですね。それにしても5mmは大きい…

ベルトはしっかり張ってるので、あとは制御でなんとかするしかないかもしれません
現在のメカ設定だと、1mm移動するのに5stepかかる(分解能0.2mm)なので大きすぎるのでしょうか?モーターのマイクロステップモードで試してみます。

ホーミングに関しても非常に分かりやすいご説明ありがとうございます。実際に試してみたところ、無事にホーミングできました!

ただ、プラス方向($23=0)にホーミングすると、スイッチの位置が座標0、スライダーの逆端がマイナス(500mmスライダーなら、座標-500)になってしまいます。これだと、スライダーを動かす時にマイナス入力になるので気持ち悪いのですが、なんとかなりませんでしょうか?

スイッチを反対側に付け替えた上でマイナス方向($23=1)にホーミングすると、スイッチの位置が座標-500になるので、状況が変わりません…
というか、スイッチの位置が必ず0になる訳じゃないんですね…座標-500になるのは「$130=500」にしているからでしょうが

「$3=1」にしてDirection の入力信号の反転させたりもしましたが、回転方向が逆になるだけでプラスホーミングでスイッチ位置0、逆端マイナスになるのは変わりませんでした。

ホーミングしてスイッチが座標0、逆端が座標500となり、プラス入力できるのが理想です。
よろしくお願いいたします。

CNCjs 最新バージョンでの不具合もありえるのですね
ケーブル変更で駄目だった場合、旧バージョン試してみます。
また後続の方の為にも結果報告いたします。

プラス方向に動かしたいという話ですね。

配線を入れ替えるかパラメーターでモーターの回転方向を逆にして、$23=1でホーミング方向を逆にすることを試してみてください。

公式のwikiではホーミング時に負方向にセットされる理由が説明されています。
またconfig.hでHOMING_FORCE_SET_ORIGINをコメントを解除し有効化するとホーミングすると原点に設定できるようになるとも説明されています。

試してみてください

ご回答ありがとうございます。
なるほど、昔からのCNCの仕様なんですね。

→配線を入れ替えるかパラメーターでモーターの回転方向を逆にして、$23=1 でホーミング方向を逆にすることを試してみてください。

というのは、$3=1'で入力信号を反転させてから $23=1` でホーミング方向を逆にするという認識で正しいでしょうか?試してみたのですが、(間違えていなければ)負になるのは変わらなかったと思います。

HOMING_FORCE_SET_ORIGINは上手く動きそうなのでやってみたいと思います!ありがとうございました!

ちなみにg-codeで動かす時って、三軸じゃないとダメみたいなことってないですよね?
今後スライダーを二軸にする予定なのですが、一軸や二軸でもCNCjs使ってg-codeで制御可能でしょうか?

返信ありがとうございます。
なかなか質問する側もトラブルをどのように伝えるかも難しいのですが、回答側の方も同じ経験をしている事を知るだけで励みになります。今後とも宜しくお願いします。

その認識で合ってます。ダメだったのであればconfig.h弄った方が良さそうです。

3軸じゃないとダメということはないはずです。config.h内にも2軸用の設定例とか書いてありますし、レーザー加工機などは2軸なので。
現状G01 X100 F100とか適当にコンソールに入力して問題なく動くのであれば、制御も特に問題もないかと思います。