fc2ブログ

EC300モーションコントローラー対応にMPGを改造、その2

やはり、スタンダードタイプのMPGは使い難い!
EC300用にMPGをロータリースイッチを使ってXYZ3軸とスッテプパルスの倍率を切り替えるスタンダードタイプにしたが、
やはり、使い難いのでマイコンArduino Pro Miniを使ってボタンスイッチで切り替えるように変更しました。
時代ですね!マイコンの方がロータリースイッチよりも価格が安い!
また、手元用HIDキーボードとMPGの両方使うのが面倒なので以前のようにHIDキーボードを内蔵型としました。
折角作った手元用HIDキーボードなのでワークテーブルの横に固定して使うことにしました。

操作部をロータリースイッチからボタンスイッチに変更
左側:Mach3用HIDキーボード、右側がボタンスイッチに変更したMPGでHIDキーボードを内蔵しました。
EC300_MPG1.jpg

操作部の拡大画像 (文字はVビットで0.5㎜掘り込み赤と青のペイント仕上げです)。
右上3つのボタンが左からX、Y、Z 3軸の切り替えとSHIFTボタンを押すとx1,x10,x100のスッテプ倍率を切り替えます。
同じボタンで2通りの操作が出来ます。また、上側の青色LEDがX、Y、Zと赤色LEDがx1,x10,x100のインジケーターです。
その他のボタンスイッチがHIDキーボードでパソコンのUSBキーボードと同じ役目をし、必要な操作が手元で行えます。
EC300_MPG2.jpg

回路図 (画像をクリックすると拡大画像を別画面に表示します)。
使用中のパラレル入力装置に手を加えず、パソコンのパラレルポートの代わりとしてモーションコントローラーを使うことが
元々の発想です。
回路図左側がEC300の端子盤、その下側がMPG用コネクター端子、上中央が以前から使ってるMach3用パラレル入力
コントローラーHY-TBDVのパラレル入力コネクターの端子です。
右上がArduino Pro Microを使ったHIDキーボードの回路です。
右下がArduino Pro Miniも使ったMPGのX、Y、Z3軸とステップ倍率をボタンスイッチで切り替えとLED表示を行う回路です。
EC300の入力系が24V仕様なので切り替え部にフォトカプラを使って5V系と分離しました。
EC300_MPG_Circuit1.gif


次回は今回使ったマイコンのソースファイルを掲載予定です。


皆様の参考になれば幸いです。

スポンサーサイト



テーマ : 電子工作
ジャンル : 趣味・実用

Mach3用モーションコントローラーEC300にMGPを取り付ける。

EC300は問題なくパラレルポートの代役として完動しています。
3年前に作ったMPG(Manual Pulse Generator)が使い勝手が良いのでそのまま使えないかと試みましたが、
EC300のプラグインを使う関係でMach3へロータリーエンコーダーのDataが渡せませんでした。
仕方なくEC300のMPGコネクターにStandard MPGとして使えるように改造しました。

こちらが以前に作ったMach3用ハイブリッドMPGです。
HID(HumanInterfaceDevice)にArduino Pro Microを使ったキーボードを備え、PCのキーボードを触らなくても
Mach3を動かすのに必要な操作が、手元で行える便利な機能付きMPGです。
私のホームページ「CNCパラダイス」No.44:Mach3用 MPG(手動パルスジェネレータ)の製作を参照してください。
tepa_12.jpg

EC300用に使えるようStandardタイプMPGに改造
画像右側がキーボード部分を切り取り、黒いアクリル板にロータリースイッチとE-Stopボタンを設けたStandard MPGです。
画像左側は、後述のHIDキーボードで、上画像のキーボード部と同じ働きをします。
MGP4_1.jpg

EC300用Standard MPGの回路図
EC300_MPG.gif

HIDキーボードの製作
やはり、手元で操作が出来ないと不便なので新たにジャンクのスイッチを使ってHIDキーボードを作りました。
ケースは5mm厚アクリル板3枚を、CNCでポケット加工して作りました。
MGP4_2.jpg

HIDキーボードの回路図
HID_keyboard.gif

Arduino Pro Microのソースファイル

#include "Keyboard.h"
int TAB = 10;
int SHIFT = 16;
int Cycle_Start = 15;
int Reset = 19;
int Jog_Mode = 14;
int Cycle_Jog_Step = 6;
int Slow_Jog_UP = 5;
int Slow_Jog_DN = 4;
int Zero_X = 9;
int Zero_Y = 8;
int Zero_Z = 7;
int X_UP = 20;
int X_DN = 2;
int Y_UP = 3;
int Y_DN = 21;
int Z_UP = 1;
int Z_DN = 0;
int STOP = 18;

void setup() {
Keyboard.begin();
pinMode(TAB, INPUT_PULLUP);
pinMode(SHIFT, INPUT_PULLUP);
pinMode(Cycle_Start, INPUT_PULLUP);
pinMode(Reset, INPUT_PULLUP);
pinMode(Jog_Mode, INPUT_PULLUP);
pinMode(Cycle_Jog_Step, INPUT_PULLUP);
pinMode(Slow_Jog_UP, INPUT_PULLUP);
pinMode(Slow_Jog_DN, INPUT_PULLUP);
pinMode(Zero_X, INPUT_PULLUP);
pinMode(Zero_Y, INPUT_PULLUP);
pinMode(Zero_Z, INPUT_PULLUP);
pinMode(X_UP, INPUT_PULLUP);
pinMode(X_DN, INPUT_PULLUP);
pinMode(Y_UP, INPUT_PULLUP);
pinMode(Y_DN, INPUT_PULLUP);
pinMode(Z_UP, INPUT_PULLUP);
pinMode(Z_DN, INPUT_PULLUP);
pinMode(STOP, INPUT_PULLUP);
}

void loop() {
TAB = digitalRead(10);
SHIFT = digitalRead(16);
Cycle_Start = digitalRead(15);
Reset = digitalRead(19);
Jog_Mode = digitalRead(14);
Cycle_Jog_Step = digitalRead(6);
Slow_Jog_UP = digitalRead(5);
Slow_Jog_DN = digitalRead(4);
Zero_X = digitalRead(9);
Zero_Y = digitalRead(8);
Zero_Z = digitalRead(7);
X_UP = digitalRead(2);
X_DN = digitalRead(20);
Y_UP = digitalRead(3);
Y_DN = digitalRead(21);
Z_UP = digitalRead(1);
Z_DN = digitalRead(0);
STOP = digitalRead(18);

if (TAB == LOW) { // TAB-KEY
Keyboard.press(KEY_TAB);
delay(100);
Keyboard.releaseAll();
delay(200);
}
if (Cycle_Start == LOW) { // Cycle_Start
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('r');
delay(100);
Keyboard.releaseAll();
delay(100);
}
if (Reset == LOW) { // RESET
Keyboard.press('[');//何故か'['入力で'@'を出力(@が目的なのに文字化け)
delay(100);
Keyboard.releaseAll();
delay(200);
}
if (Cycle_Jog_Step == LOW) { // Cycle_Jog_Step
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('t');
delay(100);
Keyboard.releaseAll();
delay(200);
}
if (Jog_Mode == LOW) { // Jog_Mode
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('m');
delay(100);
Keyboard.releaseAll();
delay(200);
}
if (Slow_Jog_UP == LOW) { // Slow_Jog_UP
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('u');
delay(100);
Keyboard.releaseAll();
delay(200);
}
if (Slow_Jog_DN == LOW) {
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('d');
delay(100);
Keyboard.releaseAll();
delay(200);
}
if (Zero_X == LOW) { // Select X-axis for MPG 1/Zero-X-axis
if (SHIFT == LOW) { // Zero_X-axis
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('x');
delay(100);
Keyboard.releaseAll();
delay(200);
}
}
if (Zero_Y == LOW) { // Select Y-axis for MPG 1/Zero_Y-axis
if (SHIFT == LOW) { // Zero_Y-axis
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('y');
delay(100);
Keyboard.releaseAll();
delay(200);
}
}
if (Zero_Z == LOW) { // Select Z-axis for MPG 1/Zero_Z-axis
if (SHIFT == LOW) { // Zero_Z-axis
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('z');
delay(100);
Keyboard.releaseAll();
delay(200);
}
}
if (X_UP == LOW) { // X-axis Right
Keyboard.press(KEY_RIGHT_ARROW);
delay(300);//delay(100~300)
Keyboard.release(KEY_RIGHT_ARROW);
delay(1);
}
if (X_DN == LOW) { // X-axis Left
Keyboard.press(KEY_LEFT_ARROW);
delay(300);//delay(100~300)
Keyboard.release(KEY_LEFT_ARROW);
delay(1);
}
if (Y_UP == LOW) { // Y-axis Forward
Keyboard.press(KEY_UP_ARROW);
delay(300);//delay(100~300)
Keyboard.release(KEY_UP_ARROW);
delay(1);
}
if (Y_DN == LOW) { // Y-axis BackForward
Keyboard.press(KEY_DOWN_ARROW);
delay(300);//delay(100~300)
Keyboard.release(KEY_DOWN_ARROW);
delay(1);
}
if (Z_UP == LOW) { // Z-axis UP
Keyboard.press(KEY_PAGE_UP);
delay(300);//delay(100~300)
Keyboard.release(KEY_PAGE_UP);
delay(1);
}
if (Z_DN == LOW) { // Z-axis Down
Keyboard.press(KEY_PAGE_DOWN);
delay(300);
Keyboard.releaseAll();
delay(1);
}
if (STOP == LOW) { // STOP/ Goto Zero
if (SHIFT == LOW) { // Goto Zero
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_ALT);
}
else { // STOP
Keyboard.press(KEY_LEFT_ALT);
}
Keyboard.press('s');
delay(100);
Keyboard.releaseAll();
delay(200);
}
}



皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

イーサーネット接続CNCコントローラーEC300をパラレルインターフェースとして使う。

EC300をパラレルインターフェースとして使ったテスト結果
CNCコントロールソフトMach3ではWindows64bit機のパラレルポートがサポートされていません。
このため、後付けのパラレルポートを増設しても機能しないので、パラレルポートがサポートされたMach4(使い難い)
を使うしか方法がありません。 私は、使い慣れたMach3を使うために、USB又はイーサーネット接続のモーション
コントローラーを利用する方法を選びました。

EC300をパラレルインターフェースとしての製作例
手前側の24VDC電源は在り合わせを使ったのでオーバースペック(デカ過ぎる)です。マニュアルではシステムと
I/Oが別電源になっていますが、単電源でテストをしたところ影響がないので途中から単電源で使うことにしました。
D-SUB25Pinコネクターは、現用のパラレル接続コントローラーHY-TB4DV-4Axisに接続します。
EC300_Controller.jpg

拡大画像
パラレル接続コントローラーの入出力は全てTTLレベルなのでEC300の入出力もTTLレベルに合わせています。
EC300では、入力端子INと-COMを短絡するとスイッチが働きますが、IN1からIN12には24Vが印加されています。
ここでは、現用コントローラーからの信号がTTLレベルなのでフォトカプラーを使ってレベル変換を行っています。
IN01にはE-Stop信号、IN02にはProbe信号を割り当てました。
EC300右側のD-SUB9Pinコネクターは出力用です。ここでは、2番ピンにスピンドルモーターのON-OFF信号と
3番ピンにステッピングモータードライブ回路のイネーブル信号として割り当てました。
EC300_Controller_2.jpg

下の画像が現用のパラレル入力コントローラーHY-TB4DV-4Asxs
この部分は何も変更せず、EC300からのパラレルケーブルを繋ぐだけです。
CNC_4Axis1.jpg

配線図
ここでは、現用の4軸コントロールボードHY-TB4DV-4Asxsに手を加えず、パラレルケーブルを繋ぐだけで使えるように
配線しました。また、HY-TB4DV-4Asxsには、ホームスイッチ、リミットスイッチ、E-Stopスイッチ、Probeなどの入出力
スイッチ類が繋がっているのでパラレルケーブルを差し込めば全て機能する状態です。
コントローラーが他の機種の場合、パラレルポートのピンアサインが異なるので、機種に合わせた変更が必要です。
各軸単体のステッピングモータードライバーを使用の場合は直接EC300に接続して使ってください。
EC300_connection.gif


因みに、今回使用のEC300は先月アマゾンにて5千円余しで購入したが、今日は何と17999円に値上がりしてた!。
以前、半導体レーザーカッターにて紹介しました千円余しのUSB接続コントローラー「RnR」も同様に使えると思います。


私と同様に古いPCが壊れてどうしようかと悩んでいる方が多いと思います。
少しでも参考になれば幸いです。



皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

CNC用のパソコンがOUTに!

イーサーネット接続のモーションコントローラーEC300を試す。
約8年前に自作したCNCフライス盤を古いパソコンとコントロールソフトMach3を使ってコントロールしてましたが、
肝心のパソコンが壊れてしまいました。これまでに3台の中古PCを買いつないできましたが、この際パラレルポートを
諦めてモーションコントロールボードを使うことにしました。

私はイーサーネット接続タイプを購入しましたが、これから購入される方はUSB接続タイプをお勧めします。
その理由は、最近のノートパソコンにはイーサーネット端子が無いものが多い事と、EC300の場合は
コントロール用電源とIO用電源の2系統が必要でその分コストが掛かります。

イーサーネット入力のコントロールボード(EC300)
EC300.jpg

現用のパラレル入力コントロールボードを生かす。
新しいボードにステッピングモータードライブユニットを接続すれば簡単なのですが、現用のコントロールボードを
生かすために、パラレル入力にEC300の出力を少し加工して繋ぐ方法を採用することにしました。

現用のパラレル入力コントロールボード(HY-TBDV-4M)
CNC_4Axis1.jpg

これから改造作業に数週間掛かると思いますが、順次作業結果をまとめ、使い慣れたコントロールソフトMach3を
生かすための方法を紹介したいと思います。


皆様の参考になれば幸いです。

テーマ : DIY
ジャンル : 趣味・実用

プロフィール

CNC_Paradise

Author:CNC_Paradise
木工・彫刻・機械工作・電子工作が
大好きで自作のCNCを使って工作を
楽しんでます。

最新記事
最新コメント
月別アーカイブ
カテゴリ
何でも工作室
検索フォーム
RSSリンクの表示
リンク
QRコード
QR