mini-CNC BLACK 1510のUSB化

 数年前に試運転のみ行い放置してあったCNCを出してきました。ロクにメンテもせずに放置してあったので油切れはもちろん、スピンドルのベルトは切れ、小さなサビも出ており、軸も渋く動かすとゴゴゴゴと音のする始末でした。

■mini-CNC BLACK 1510

 この機種はオリジナルマインドが販売するCNCシリーズでも初期モデルの組み立てキットで、当時10万円程度でCNCが手に入ることに驚きを覚えました。基板加工がやりたくて購入しましたが、試運転だけ行いそのまま使わずに今に至ります。

■もうパラレルポートのPCが無い

 コントローラ基板は同社のCNC-4AXISを積んでいます。このコントローラはPCがパラレルポート経由で発するステッピングモータの回転パルスと回転方向の信号を受け取りモータを駆動するこの手の制御基板としては最も一般的な機能を持ちます。

 このコントローラを駆動するためには、切削ルートを記述したG-CODEと呼ばれるプログラムを、XYZ各軸のモータに対する回転パルスと回転方向に変換する必要があり、一般的にはMach3等のソフトをインストールする必要があります。

 さて動かそうと思ったところで、問題が一つ持ち上がりました。PC-(パラレルポート)->CNCと制御したいのに、PCにパラレルポートがありません。最近のマザボはD-SUBコネクタが駆逐され、シリアルもパラレルもありません。電子工作ではシリアルインタフェースを多用しますが、多くの場合はUSB経由の仮想ポートが普及していて、USB経由でTTLレベルのシリアルが取り扱いやすいケーブルなどが人気です。

 同様にUSBパラレル変換を使用できないかと思えますが、各軸のパルスのタイミングはリアルタイムでないといけませんのでUSBパラレル変換では問題が起きます。

■ArduinoのG-CODEインタプリタ

 もちろんUSB用のコントローラも市販されていますが、ちょっと値が張りますので今回はオープンソースで何とかしたいと考えました。使用するソフトは既に多くの可動実績があるGrblと呼ばれるものです。このソフトをArduino基板に書き込むと、Arduino基板はシリアルで受け取ったG-CODEから回転パルスと回転方向を生成します。Arduino基板が生成するパルスをパラレルケーブルでCNC-4AXISに送ってやればCNCは動いてくれるはずです。

 以下の写真はGrblをインストールした小型のArduino互換基板にパラレルポートを接続した物です。ボタンは緊急停止機能兼用のリセットボタンです。

 PCとの接続はUSBからTTLレベルのシリアルを取り出せる変換ケーブルを使いました。こうすることで、PC-(USBシリアルケーブル)->Arduino-(パラレルケーブル)->CNCとなります。

 G-CODEの送出にはGrbl Controllerを使っています。このソフトも良くできていて手動での位置合わせをするためのジョグ、Grblの設定、切削パスの表示などが行え、ソフトウェアフロー制御を使ってArduinoのバッファが溢れないように適切にG-CODEを送出します。

■GrblをArduinoに書き込むためのメモ

 GrblをArduino基板に書き込むと書きましたが、GrblをArduinoIDEから書き込むことはできません。ターゲットCPUがATMEGA328PなのでArduino基板が使えると言うことで、別にCPUが同じだったらArduino基板でなくてもOKです。従ってファームの書き込みもAVRプログラマを使って行います。コンパイル環境があればソースからコンパイルできますが、お手軽なのはコンパイル済の hex ファイルがGithubにありますので、ソースを変更する必要がなければこれを使うのが良いでしょう。ATMEGA328Pのヒューズの設定は以下の通りです。

ext:0xfd
hi:0xd2
low:0xff

■GrblとCNC-4AXISの接続

 GrblとCNC-4AXISの接続をメモ代わりに記載しますが、この情報を使って同様の事をする場合は自己責任で。

Grbl
DIR
CNC-4AXIS
D12:SPINDLE_ENB
->
1:SPINDLE
D2:X_STEP
->
2:X-STEP
D5:X_DIR
->
3:X-DIR
D3:Y_STEP
->
4:Y-STEP
D6:Y_DIR
-INV->
5:Y-DIR
D4:Z_STEP
->
6:Z-STEP
D7:Z_DIR
->
7:Z-DIR
NC
->
8:A-STEP
NC
->
9:A-DIR
NC
<-
10:EMG/INDEX
D9:X_LIMIT
<-
11:LS-X
D10:Y_LIMIT
<-
12:LS-Y
D11:Z_LIMIT
<-
13:LS-Z
NC(A3:FLOOD)
->
14:AUX2
NC
<-
15:LS-A/EMG
NC(A4:MIST)
->
16:AUX1
D8:STEP_DISABLE
-INV->
17:M-ENB
GND
<>
18-GND
D13:SPINDLE_DIR
->
NC

■その他

 運転中、スピンドルを回すと軸の制御がおかしくなることがありました。これはDCモータのノイズが原因で、キャパシタなどを入れてみますがあまり改善せず、CNCの筐体と基板のGNDを共有すると現象が酷いことが判りました。CNCの筐体を電気的に浮かすようにしています。スピンドルのブラシレスモータ化は今後の課題です。また、インダクタを持った回路は思わぬ起電力を発することがありますのでPCとの接続はアイソレートしておいた方が無難です。OLIMEXのUSBアイソレータを使うことにしました。


Latest update at 2013/10/27