これまでのあらすじ:
2016年3月、フェルト生地を手で裁断している際にレーザーカッターがあれば複雑なカットが容易にできるなあと思って、安価になってきたレーザーカッターを購入しようと思ったのがきっかけ。調べていくうちに、合板も切れたほうがいいと思うようになって、CNCルーター(CNCミリング)についても考えるようになった。
Arduinoは以前から使っており、CNCシールドがあると気付いて自作も可能と思うようになった。当初はShapeOkoやX-CARVEを参考にMakerSlide、OpenRail、V-Wheel、2GTタイミングベルトなどで5万円くらいで自作しようと思っていた。AliExpressでも部品が安く買えることが分かって、しばらくは部品探し。探せば探すほど安くて本格的な部品も見つかってくるので、そんなにケチらなくてもいいのではないかと徐々にスペックアップ。最終的には剛性や精度のことも考えてボールスクリューやリニアスライドを使うことになり、予想以上に重厚な3軸CNCマシンをつくることに(約7万円)。
構想から約5週間(制作約3週間)でルーターとレーザーともに使えるようになり、現在はgrbl1.1+Arduino CNCシールドV3.5+bCNCを使用中(Macで)。余っていたBluetoothモジュールをつけてワイヤレス化。bCNCのPendant機能でスマホやタブレット上のブラウザからもワイヤレス操作可能。
その他、電子工作・プログラミング、最近は機械学習などもやっています。基本、Macを使っていますが、機械学習ではUbuntuを使っています。


CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。

自作CNC・電気/制御系統の設定方法

最近Grblがバージョン1.1にアップデートしたのをきっかけに、現状をまとめてみようと思います。
主に制御関係のハードやソフトについてまとめておきたいと思います。尚、Arduinoの基本的な使い方については省略します(ArduinoサイトのGetting Startedを参照してください)。


上画像はCNCシールドV3.5(Grbl0.9以上に対応)、Y軸に2個のステッピングモーターを取り付けた場合の配線図です。

主に必要なもの:
ハードウェア:
・Arduino Uno(制御用マイコンボード)
・CNCシールド(最新版はV3.51、安価な中国製のほとんどはV3.0)
・ステッピングモータードライバ(A4988またはDRV8825:3〜4個)
・ステッピングモーター(NEMA17またはNEMA23クラス:3〜4個)
・スイッチング電源(DC24/5A以上:100〜200W)
・リミットスイッチ(マイクロスイッチ:XYZ軸に2個ずつ計6個)

ソフトウェア:
・Arduino IDE(Arduino開発環境ソフト)
・Grbl1.1(CNCファームウェア)
・bCNC(PythonベースのGコード送信ソフト)

まずはArduino Unoだけを使ってCNCの動作確認や設定など見ていきます。

bCNCを使ってGrbl1.1との事前通信確認(モーターなしで):
必要なもの:
・Arduino IDE
・Arduino Uno
・Grbl1.1
・bCNC
*CNCシールドはこの動作確認段階では不要

インストールなど:
・Grbl1.1をダウンロードしArduino IDEのライブラリにインストール(参照
・Arduino IDEを使ってArduino UnoにGrbl1.1をアップロード(参照
・bCNCをPC上にインストール(本家:参照、あるいはこのページ
 *bCNCはPythonベースのソフトなので、Macの場合はPythonが標準インストールされていますが、Windowsの場合は事前にPython2.7(3.0ではなく)をインストールする必要があります。シリアル通信用モジュールpyserialも要インストール(Mac、Winともに)。

bCNCからGrbl1.1へ接続:
・Arduino UnoとPCをUSB接続
・bCNCを立ち上げる
・bCNC画面上部のFileタブを選択する
・Port:Arduino Unoのポート、Baud:115200、Controller:Grblを選択しOpenで接続
・画面上部右端Terminalタブに切り替える
・画面左下のCommand:に$$を入力すると、$0〜$132までのGrbl1.1の設定内容(デフォルト値)が表示される
・例として、Command:に$130=300を入力すると現在の設定内容を変更することができ、X軸最大移動範囲を300mmに設定し直したことになる
・再度$$を入力し設定内容を表示させて、$130=300.000に変更しているか確認する
 *他の項目についても同様に設定していくけれども、今回は通信確認だけなので省略。
以上で通信確認は終了。次に接続したまま制御確認をする。

制御確認(ステッピングモーターなしで):
・bCNC画面上部のControlタブに切り替える
・Command:に$Xを入力する(初期ロック解除)
 *最初は誤作動防止のためロックされており、毎回接続するたびに入力する必要がある。
・画面左上方にWPos(加工座標)とMPos(機械座標)が表示しており、右側の視覚表示画面内の矢印の原点はWPosに対応している(今回はWPosのほうだけ見ることにする)
G90 X10を入力すると、視覚表示画面内の赤丸(ツール位置:Z軸)がX軸座標10mmの位置へ移動(G90:絶対座標コマンド)
 *WPos(加工座標値)のX座標も0から10に変化していることが確認できる
G90 X-10を入力すると、X軸座標値-10mmの位置へ移動
G90 X0で原点0に戻る
・相対座標(G91:相対座標コマンド)の場合は、G91 X10を入力する(相対座標なので現在地からX軸を10mm移動する/10mm加算移動する)
・画面左下のほうにある十字ボタン(ジョグボタン)で各軸を動かすこともできる(この場合相対座標)
・ボタン一回分の移動量を十字ボタン右側にある数値タブで選択可能(0.001〜500mm)
・十字ボタン中央のボタンを押すと、加工原点WPos(0,0,0)に戻る
・視覚表示画面左上にあるX-Y(X-Y平面)で視点を変えることができる
 *Z軸の高さ方向の動作確認をしたい場合は視点X-ZやY-Zを選択する

これでソフト上での動作確認は終了。

以下からは、CNCシールドを装着しステッピングモータードライバとステッピングモーターを接続しての動作確認。


ステッピングモーターを接続して動作確認する:
必要なもの:
・CNCシールド(直接Arduinoボードにステッピングモータードライバを接続するなら不要)
・ステッピングモータードライバ(A4988またはDRV8825:3〜4個)
・ステッピングモーター(NEMA17またはNEMA23クラス:3〜4個)
・ステッピングモーター用安定化電源(DC12VまたはDC24V/5A以上など)
*リミットスイッチはまだ不要

ステッピングモータードライバの設定:
まず、使用するステッピングモーターの許容アンペア数(ステッピングモーターのデータシートを確認する)に見合ったドライバを用意する。A4988ならヒートシンクをつけて2Aまで(ヒートシンクなしで1.5Aまで)、DRV8825ならヒートシンクありで2.5Aまで(ヒートシンクなしで2.0Aまで)。
・使用するステッピングモーターがXYZ軸一つずつ計3個ならドライバも3個必要
 *Y軸に2個ステッピングモーターを使う場合は、もう一つドライバを追加(計4個)
・電流制限設定をする
・マイクロステップ数を決める
以上の設定についてはこちらを参照

それぞれを接続/装着する:
・Arduino UnoにCNCシールドを装着
・設定したマイクロステップ数に応じてジャンパブロックを必要数所定の位置へ差し込む
・4個目のドライバを使う場合(A端子使用)は、クローン設定用のジャンパブロックを差し込む
・ドライバをCNCシールドに装着する
・モーターを接続する
以上の設定や配線についてはこちらを参照

各軸の移動ステップ数(steps/mm)を設定する:
bCNCで$$を入力するとGrbl1.1各種設定項目がコンソールに出力され、その項目内の「$100、S101、$102(X軸、Y軸、Z軸)」を設定する必要があります。これはステッピングモーターのステップ数、マイクロステップ設定、送り機構の仕組みから割り出されます。
例えば、
ステッピングモーター1回転のステップ数:200ステップ(1ステップ:1.8度)
マイクロステップ設定:1/8
送りネジ1回転の移動距離:2mm
この場合であれば、200ステップがマイクロステップによって1/8に細かく分割され、ステッピングモーターの1回転は200÷(1/8)=1600ステップとなります。送りネジは1回転で2mm進むので、1mm進むために必要なステップ数は1600/2=800(steps/mm)になります。
よって、$100=800を入力し設定し直します。
・bCNC画面上部のTerminalタブに切り替える
・Command:に$100=800を入力($101と$102も同様に計算して入力)
・$$を入力し設定項目を表示し、内容が変更されたか確認する

XYZ軸の動きが逆転している場合の設定変更($3):
・bCNC画面上部のTerminalタブに切り替える
・$$を入力し、設定項目を表示する
・設定項目内の$3=0が各軸の正転逆転設定(以下が正転逆転テーブル)
 $3=0 (N/N/N:X軸/Y軸/Z軸:デフォルト値)
 $3=1 (Y/N/N:デフォルト値に対してX軸だけ反転)
 $3=2 (N/Y/N:デフォルト値に対してY軸だけ反転)
 $3=3 (Y/Y/N:デフォルト値に対してX軸とY軸を反転)
 $3=4 (N/N/Y:デフォルト値に対してZ軸だけ反転)
 $3=5 (Y/N/Y:デフォルト値に対してX軸とZ軸を反転)
 $3=6 (N/Y/Y:デフォルト値に対してY軸とZ軸を反転)
 $3=7 (Y/Y/Y:デフォルト値に対してすべて反転)

 例えば、Y軸だけ反転したいのであれば、$3=2を入力。

*その他の設定項目についてはこちらを参照

スピンドルドライバ・レーザードライバとの接続:
まず、スピンドルドライバやレーザードライバが、TTL端子つきのものかどうか確認する必要があります。TTL端子つきのドライバであれば256段階で出力調節が可能ですが、リレー制御のドライバはON-OFFしかできません。
レーザードライバのTTL端子が0~5V対応であれば、そのまま以下のように接続します。もし0〜3.3V対応の場合は分圧する必要があります。

TTL端子つきのドライバである場合は、CNCシールド(V3.1以上の場合)のSpnEn(pwm)へドライバのTTL端子(赤)とGND(黒)をつなぎます。SpnEn(pwm)はArduino UnoのD11端子につながっており、D11からPWMの信号(出力調整するためのパルス)が送られてきます。
以下はダイオードレーザー用のTTLドライバ。

AliExpress.com Product - TTL driver board,laser driver board2879円(送料込み)

この手のレーザードライバー基板(TTL端子つき)であれば、
12V(+-)端子-->電源供給用のACアダプター12V
TTL(+)端子-->Arduino PWM端子(D11ピン)、あるいはCNCシールドSpnEn(pwm)端子
TTL(-)端子-->Arduino GND端子、あるいはCNCシールドGND端子
LD(+-)端子-->ダイオードレーザー本体
FAN(+-)端子-->クーリングファン
という感じで接続します。

Gコードにおいては、
M3 S1000(Sは0〜1000の値:出力0%〜100%)
また、Grbl1.1のレーザーモード($32=1に設定)を使用するならば、
M4 S1000(Sは0〜1000の値:出力0%〜100%)
となります。
もし、ドライバがリレー制御などのON-OFFしかできないタイプのものであれば、
M3 S0(出力:OFF)
M3 S1000(出力:ON)
という感じで、ON/OFFを切り替えるだけになります。
*中国製の安価なCNCシールド(V3.0)の場合は配線がGrbl0.8用なので、CNCシールドのSpnEn(pwm)端子ではなく、CNCシールドのZ+(もしくはZ-)に接続する必要があります(詳しくはこちらへ)。


リミットスイッチの配線方法:
リミットスイッチの配線については、GrblサイトのWiring Limit Switchesに追記されたので参考にするといいと思います。ノイズフィルターの有無、ノーマルオープン/ノーマルクローズドなど画像付きで詳しく書かれています(英語)。

これ以外の設定などについては、必要に応じて追記していく予定です。

6 件のコメント:

  1. 初めまして。
    現在レーザー加工機の中華機を購入してそれを元にちょっと改造しようと目論んでいます。
    そこで色々情報を集めていて、こちらのブログにもお世話になっています。

    一つ、とても初歩的な質問になるとは思うのですが、TTL端子がついていればPWM制御はできるものなのでしょうか?

    目をつけている5.5WのレーザーモジュールがTTLついてると表記されてるんですけど、お店の人に「TTLにPWM出力したら出力制御できる?」と聞いたところ、出来ないとの回答でした。
    原理的には出力のON、OFFを繰り返して出力を調整するものだと私は思っていて、だったらTTL対応のドライバーなら問題ないと思っていたのですが、違うんですかね?

    それとも、私の英語がおかしかったのだろうかorz

    ご教示いただければ幸いです。

    返信削除
    返信
    1. コメントありがとうございます。
      TTL端子がついていればたぶん大丈夫だと思います。Arduinoの場合たしか490Hzのパルスだったと思います。もう一度お店に確認してみてはどうでしょうか?

      削除
    2. 早い回答ありがとうございます。

      TTL端子はついてるみたいなんですよね。
      最初にPWM制御できるか聞いたとき。
      「It has TTL, please use the TTL. 」
      って返ってきてるので。
      で、冒頭の「TTLに~」と返したところ、出来ないと。

      やはり聞き方がおかしかったのかなぁorz
      AliExpressでの買い物がまだ二度目なので、英語が不安なところなんですよね。

      回答ありがとうございました。
      もう一度お店に確認してみます。

      削除
    3. 再確認したので結果報告を。

      結果としてPWM使える確証はないのですが、0vON-5vOFFの電圧でON/OFF切り替えということは確認がとれたので、多分PWM制御できるのではないかと。

      なぜPWM制御できないと言われたかは謎のままですがorz

      稚拙な質問でお騒がせしました。
      ありがとうございました。

      削除
    4. いわゆるリレーのような高速スイッチングに対応していない回路なのでしょうか?
      http://cnc-selfbuild.blogspot.jp/2016/05/cnc_32.html
      こちらで紹介しているドライバはPWMで大丈夫でしたが、どのようなドライバ回路なのか画像も送ってもらうといいと思います。

      削除
    5. アドバイスありがとうございますm(_ _)m
      書き込みした後も話をしてみたのですが、どうも微妙に噛み合わないんですよね。

      話した中でわかったのはお店の人が、「PWM≒TTL」で「PWM!=TTL」と認識しているっぽいこと。
      失礼な質問だとは思いつつ「PWM制御は知ってるよね?」と聞いたところ、「知ってる、TTLみたいなやつでしょ」との回答。
      でも、「それなら、PWM制御できないの?」という質問には「この製品にはTTLがついてるんだ」と。
      ドライバの仕様上の問題というよりは、認識の齟齬の問題という気がします。
      その齟齬が私の英語力のせいなのか、他の原因なのか現状判断がつかないんですけど。

      あまり同じような質問を長引かせても、お店の人も困ると思うので別の製品にすることにしました(´・ω・`)
      なので、結局、ドライバの画像も送ってもらいませんでした。

      はっていただいた記事も、事前に確認していたのですが、5.5Wのレーザーモジュールのリンク先が3000mWの商品に変わってたので、AliExpressの商品検索から商品を探してたんですよ。
      でも、よく考えたら、リンク先でお店のアイテムから探せば、同じ製品見つかるかもしれないんですよね、失念してました。

      他にも購入者コメントでPWM動作確認済のコメントがある製品も見つかったので、この辺りで検討してみようと思います。

      長文駄文ですみません。
      ありがとうございました。

      削除

人気の投稿