はじめに
こんにちは、にんじんです🥕
それでは、自作CNC製作記第5回はじめます。
前回まではX軸単体の動きを確認してきましたが、ついにY軸用のステピングモーターが届きました!
これでようやく「点と線」の動きから、**「面(2D)」**の制御へと進化します。しかし、喜びも束の間。自作CNCの洗礼とも言える「中華製パーツの罠」が私を待ち受けていました……。
CNCjsによるY軸の追加と2軸同期テスト走行(Gコード実行)
今回のテスト環境は、以前製作したXYテーブルを流用したプロトタイプ機を使用しています。可動範囲はX軸・Y軸ともに250mmです。本番の筐体を組み立てる前に、まずはこの構成で制御系を仕上げる「要素設計」を進めていきます。
🎯 今回のテストでは、以下の3点を確認します。
- 範囲内(250mm)で問題なく動作するか
- X軸とY軸を同時に動かす複雑な動作が可能か
- 繰り返しの動作をさせた際にステップのズレが発生しないか
●スクエア走行テスト(test02.nc)による四角形描画の確認

まずは基本となる、四角形を描く動きを確認するため、CNCjsからテスト用のGコード(.ncファイル)を実行します。
🧠 動きのイメージ
👉 200mm四角を2周します。
(10,210) ┌─────┐ (210,210)
│ │
(10,10) └─────┘ (210,10)
「test02.nc」は以下の通りです
G21 ; mm単位
G90 ; 絶対座標
F500 ; 送り速度
G0 X10 Y10 ; スタート位置(少し内側)
; 四角形1周(200mmサイズ)
G1 X210 Y10
G1 X210 Y210
G1 X10 Y210
G1 X10 Y10
; もう一周(動作確認)
G1 X210 Y10
G1 X210 Y210
G1 X10 Y210
G1 X10 Y10
●円弧補間テスト(test03.nc)による同期と脱調のチェック

四角形の動作が確認できたら、次は円を描く動作をテストします。
きれいな円を描くためには、X軸とY軸が互いに加減速を連携させる必要があります。このテスト(test03.nc)を通じて、2軸の同期が正常に行われているかと、「脱調(ステップ抜け)」が発生していないかを細かくチェックします。
「test03.nc」は以下の通りです
G21
G90
F500
G0 X110 Y110
G2 X110 Y110 I50 J0
🔧 モーターが逆方向に動作する場合の対処法(の設定変更)
テストの際、モーターが想定とは逆方向に動いたり、斜めに走ったりする場合があります。その際は配線を物理的に差し替えなくても、GRBLの設定値である「$3(Step direction invert)」を変更することで、ソフトウェア側から回転方向を反転させることができます。
$3=1:X反転$3=2:Y反転$3=3:X+Y両方反転
環境に合わせて数値を調整してください。
GRBLでのホーミング(原点復帰)の有効化と事前準備
2軸の正常な動作が確認できましたので、次は「ホーミング(原点復帰)」の設定を行います。これはマシンの電源を入れた際に、現在の正確な位置をシステムに認識させるための重要な設定です。
Z軸未実装環境でのリミットスイッチとモーターの仮配線
GRBLやCNCjsの仕様として、Z軸の環境が確認できないと、ホーミング全体の処理を実行できません。

ニンジンの環境ではXYテーブルを流用しているため、現時点ではZ軸を物理的に固定することができません。そこで、XYテーブルとは別に、単独のステッピングモーター(Nema17)とリミットスイッチ(オムロン D2JW-01K1A1)を一時的に配線して検証を行います。
■使用した部品
CNCjsからのホーミング関連パラメータ(・)の設定

CNCjsのコンソールで以下のコマンドを実行し、設定を流し込みます。
$130=250 ; X最大移動距離
$131=250 ; Y最大移動距離
$132=10 ; Z適当(まだ仮です)
$22=1 ; ホーミングON
$23=3 ; ホーミング方向(今回は左奥を原点に設定)
※GRBLの仕様上の注意
なお、GRBLの仕様として「$22=1(ホーミング有効)」に設定すると、起動直後は必ずアラーム状態(ロック)になります。これは、現在地が確定していない状態でマシンが誤動作するのを防ぐための安全設計です。ホーミング処理が正常に完了すれば、このロックは自動的に解除されます。
異常事態:リミットスイッチ未操作なのに「Pn:Z」が常時ONになる問題
いざホーミングを実行しようと考えましたが、事前にリミットスイッチのステータスを確認するため、コンソールから「?」コマンドを実行しました。
※?コマンドとは:
主にGRBL(ガーブル)などの制御ファームウェアで使用される**「ステータスレポート要求(Status Report Query)」**というリアルタイムコマンドです。
「ん? Pn:Z って出てる……」
これは「Z軸のリミットスイッチが押されていますよ」というサイン。 ですが、私はまだスイッチに触れてもいません。 結線も「NC(ノーマルクローズ)」で正しく行っているはずなのに、なぜか「常時ON」扱い。
ここから、長い切り分けが始まりました……。
原因究明:CNCシールドの仕様変更とGRBLの歴史(D11とD12の入れ替わり)
テスターを使用し、Arduino UnoとCNCシールドの回路を1本ずつ確認したところ、原因が判明しました。

結論から言うと、Amazonで購入した市販のCNCシールド(おそらくC国製のコピー品)に、設計ミス(コピーミス)がありました!
- 本来の想定: ArduinoのD12ピンが、シールド上の「Z軸リミット端子」に接続される
- 実際の回路: ArduinoのD11ピンが、シールド上の「Z軸リミット端子」に導通している
- 付随する状態: D11であるべき「SpnEN(スピンドル有効)」信号が、ArduinoのD12ピンに接続されている……。
つまり、D11ピンとD12ピンが完全に入れ替わっている状態でした。これでは、Z軸のリミットスイッチを基板のシルク印刷通りに配線しても、現行のGRBL仕様では正常に認識されません。

この写真が正しい結線になります。
※見た目上はSpnENに接続されていて誤配のように見えますが正しいです。
安価な中華製パーツの洗礼。「基板のシルク印刷を信じてはいけない」という教訓を身を以て体験することになりました。
※ニンジンが購入したCNCシールド基板が対象です。あくまでも注意喚起の意味合いで記事にしています。購入品によって差異があるかも知れませんのでテスター等にて結線を確認することを推奨します。
旧GRBL(v0.8以前)と現行GRBL(v0.9以降)のピンアサインの違い
この原因をさらに深く調べたところ、基板の不良というよりも、制御ソフトである「GRBLのバージョンの歴史」が関係していることが分かりました。
GRBLは、過去のバージョンアップに伴い大きな仕様変更を行っています。
- 昔のGRBL(v0.8まで):D11ピンが「Z軸リミット」に割り当てられていた
- 今のGRBL(v0.9以降):D11ピンが「スピンドル制御(PWM出力)」に変更され、Z軸リミットはD12ピンへ変更された
D11ピンは「PWM(パルス幅変調)」という、電圧を細かく疑似的に調整してスピンドルモーターの回転数を制御するのが得意なピンです。より高度なCNC制御に対応するため、GRBLの開発元が「D11ピンをスピンドル用に割り当て、リミットスイッチをD12ピンに移設する」という決定を下した背景があります。
ニンジンはそんな歴史も知らずに、「CNCシールド基板がNG」と思い込んでいました…。
一概にはコピー不良とは言えないようです。
ただ説明文にGRBL(v0.8)以前の対応品と明記してほしいですね
まとめと次回予告:入れ替わったピンへの対策と4ステップホーミングの攻略
ピンの配置が入れ替わっている原因を特定できましたが、ホーミングを成功させるためには、この回路構成に合わせた対策を講じる必要があります。
さらに、物理的なZ軸ユニットがまだ組み上がっていないプロトタイプ環境において、ホーミングを完了させるための独自の課題が浮上します。さらに、**「物理的なZ軸ユニットがない」**というプロトタイプ機ならではの難題が、私をさらなる迷路へと誘います……。
次回の第6回では、「ホーミング動作の挙動を検証し、ON → OFF → ON → OFF の4ステップ手順を攻略する方法」について詳しくご紹介します。 お楽しみに!
CNC自作シリーズ
【CNC自作①】Arduino+GRBLでXYテーブルをCNC化してみた
【CNC自作②】リミットスイッチ実装|原点出し(ホーミング)で精度を出す
【CNC自作③】GRBL+CNCjsでPC制御に挑戦!動いたけれど見えてきた「精度の壁」
【CNC自作 ④】ついに届いた本命モーター!精度ブレの解決とGコード初テスト
【CNC自作】2軸同期走行テスト成功!…と思いきや、中華製基板の「致命的な罠」にハマる(第5回)
【CNC自作】ホーミング失敗(ALARM:8)の原因はこれ!4ステップ動作とZ軸未連動での突破方法(第6回)









コメント