CNCルータやレーザ加工機を作ろうと思った方なら聞いたことがあるであろうものがgrblです。とても便利なソフトウェア(そうですソフトウェアです)なんですが、いまいちつかみどころがないためにこれが何なのかわからない方も多いかと思います。
grblってそもそも読み方がわかりませんよね。「じーあーるびーえる」で良いのだと思いますが、海外では「がーぶる」と呼ぶ人が多いようです。”how to pronounce grbl”あたりで検索すると喧々諤々だったりして笑えます。
それはさておき、grblはソフトウェアです。何をするソフトウェアなのかというと「Gコードを解釈してモータを駆動する信号を作り出す」ソフトウェアです。
はいまたテクニカルターム「Gコード」が出てきました(笑
Gコードはまだ優しいほうかなと思います。例えばこんなもんです。
G90G21G1 F3000G1 X35.1284 Y11.7296G4 P0M03 S255G4 P0G1 F3000.000000G2 X25.588 Y22.0412 I92.5616 J95.2085G2 X17.1311 Y33.3741 I103.4594 J86.0256G2 X10.5019 Y44.0645 I156.4945 J104.4436G2 X10.0916 Y45.6222 I2.6751 J1.5375G1 X10.1976 Y45.6546G2 X11.1804 Y44.03 I-14.0778 J-9.6258G3 X21.9265 Y27.2546 I108.2034 J57.4841G3 X35.9731 Y11.4924 I109.4551 J83.4014G2 X38.9098 Y8.516 I-55.7959 J-57.9891G1 X38.8627 Y8.4072G2 X38.5882 Y8.5116 I0. J0.413G2 X35.1284 Y11.7296 I71.0919 J79.9034G1 X35.1284 Y11.7296G4 P0M05 S0
何や分かりませんが、Gという文字がたくさん見えますよね。だからGコードです。
さらによく見ると、F, X, Y, M, I, J あたりも見えます。
詳細はGoggle先生に聞いていただくとして、簡単にはGは動きにかかわる命令の種類、XYは座標、Fはスピード、その他はその他の命令 といったところです。
「XY座標のこの位置にこれこれのスピードで移動しろ」といった命令が符号化されて簡潔に記載されているのがGコードです。
世にあるCNCルータも、レーザ加工機も、3Dプリンタも、NC旋盤も、化け物みたいなマシニングセンタも(いろいろ方言はあるものの)ほぼGコードで動いています。
(異なるメーカーを含む)電子楽器間のインターフェースにMIDI規格がありますが、あれと似たようなもんです。
このようにGコードは制御命令なわけですが、命令されてもその命令をハードウェアであるモータを動かす電気信号に変える必要がありますよね。さらに、「X10,Y25の位置に動け」と言われても、どのモータ(ステッピングモータを例にとると)に何パルス送れば所望の距離動くのかなんて機械の構成(ギアの減速比とか)によって変わりますよね。
これを埋めるのがgrblというソフトウェアと、grblが動作するためのプラットフォームであるハードウェアなのです。
改めて、grblはソフトウェアです。ので、grblが動作するハードウェアが無いと動きようがありません。
よくあるパターンはArduinoにgrblを乗せるというものです。Arduinoはatmega328Pや2560といったアトメル社(今はPICで有名なマイクロチップに買収されてマイクロチップのatmegaになってますが:これもまたややこしい)のマイコンで動いていますので、grblもそれをターゲットにした設計になっています。一方で、grblが動きさえすればハードウェアは何でもええやんということで、grblをほかのマイコン、一般にはより高速なマイコンで動かすために移植しようという取り組みもあって、そのターゲットの一つがNXP社のLPCシリーズのマイコンであり、それが今回使っているgrbl-LPCなのです。
ではLPCマイコンを乗せたハードウェア、つまりatmega328Pを乗せたArduinoに相当するプラットフォームは何なのか、これが下の写真のsmoothieboardです。
購入したのはこちら。
ここで、さらにややこしい話が出てきます。
本来Smoothieboardは Smoothie project によって Smoothiewareという別のCNCコントローラソフトウェアを動作させることを目的として設計されたものなのです。SmoothieboardはこれまでKickstarterで二回のクラウドファンディングを行っており、Ver.1とVer.2 をいずれも成功させています。grbl-LPCは、このSmoothie projectからハードウェアだけを横取りして使うことを前提とした設計になっています。
Smoothieboardの詳細はリンク先を見ていただくとして、もともとのスタートが「オープンソースの高性能汎用(と言いつつ3Dプリンタ目線の)CNCボード」を目指しているだけにハードウェアとして実装されているインターフェースが充実しています。今回使用したVer.1ボードを例にとると、モータドライバ5、リミットスイッチ6、10A程度流せるFETスイッチ3、もうちょい小さめのFETスイッチ3、サーミスタ入力6、USB、Ether、マイクロSDカード、~24V入力(内部で5V Logic stepdown)などなど。これをCortex-M3 Armコア、120MHz駆動のLPC1769で動かしています。
この強力なマイコンと充実したポート類というハードウェアの恩恵を横取りして、その上にgrblを乗せてしまえというのが、今回採用したgrbl-LPC(on Smoothieboard)です。
さて、ここでもう一段面倒な話をします。LASERWEB4についてです。
今回作っているレーザ加工機(のステッピングモータやリミットスイッチやレーザ電源)は、grbl-LPC(on Smoothieboard)で制御されており、grbl-LPC(on Smoothieboard)はGコードを解釈してレーザ加工機(のステッピ~以下略)をコントロールしているわけですが、ではこのgrbl-LPC(on Smoothieboard)にGコードを送り込むのは誰なのかという問題、さらに送り込むGコードは誰が作るのか、という問題があります。これを一手に引き受けているのがLASERWEB4であり、LASERWEB4が動作するPCということになります。
このように、レーザ加工機(に限らず、一般的にメカ制御)はいくつものハードウェア/ソフトウェアが階層構造を成して動作しています。これが事態をわかりにくくしているので、以下の投稿をお読みいただくにあたり、ポイントを整理させていただきました。
ここでさらに頭を混乱させる余談をします(笑
いじわるするつもりではないんですよ。念のためです。
ここまでに制御の階層構造として
- 最上位ハードウェア:インテルCPUを積んだPC(とWindows10 OS)
最上位ソフトウェア:LASERWEB4 - 中間ハードウェア:LPC1769マイコンを積んだSmoothieboard
中間ソフトウェア:grbl-LPC - 最下位ハードウェア:ステッピングモータ、リミットスイッチ、レーザ電源
となっていることを整理しました。
一方でいままでみら太な日々で使ってきたレーザ加工機の制御系であるMACH3とA4988ステッピングモータドライバ基板ではこうなっています。
- 最上位ハードウェア:インテルCPUを積んだPC(とWindowsXP OS)
最上位ソフトウェア:NCVC(Gコード作製)
MACH3(Gコード解釈、モータ制御信号作製) - 中間ハードウェア:A4988モータドライバ
中間ソフトウェア:なし - 最下位ハードウェア:ステッピングモータ、リミットスイッチ、レーザ電源
また、みら太な日々の工房にあるCNCルータは以下の構成で動作しています
- 最上位ハードウェア:インテルCPUを積んだPC(とWindows7 OS)
最上位ソフトウェア:fusion360(Gコード作製)
MACH3(Gコード解釈、モータ制御信号作製) - 中間ハードウェア:Aliexpressで買ったUSB-MACH3ブレークアウトボード
中間ソフトウェア:なし - 最下位ハードウェア:ステッピングモータ、リミットスイッチ、スピンドル
USB-MACH3ブレークアウトボードはこれです。投入の記録はこちら。
なにが言いたいのかというと、今回のレーザ加工機のような構成が標準的というわけではないということです。
MACH3を使う制御系では、MACH3がgrblが行う作業を兼務するため中間ソフトウェアがありません。その代わりにMACH3はGコードを作ることができない(簡単なものならできますが)ので、そこはほかのソフトウェアに頼る構成になっています。
要は目的や、与えられた環境で最適な構成を決めてそれを実装すればよいということです。
「要は目的」と書きました。そうです、今回は明確な目的があってgrbl-LPC(on Smoothieboard)を選択したのです。
第一の目的:ラスター描画の速度を上げたい第二の目的:MACH3を核とする制御系から脱却したい
です。
特に第一の目的が大きいです。grbl-LPCはラスター描画が早い「らしい」のです。
現在稼働しているK40改造レーザ加工機、および以前使っていた自作レーザ加工機2台はいずれも MACH3制御であり、ラスター描画の上限速度が8000mm/min、つまりF8000位でした。これを改善したかったのです。
一度でもTrotecマシンのラスター描画をご覧になったことがあればお分かりいただけると思いますが、Trotecマシン(Speedyシリーズ)のラスター描画は恐ろしく早いです。あの小さな軽そうなキャリッジが左右に振り回されることで100kg以上ありそうな本体が左右に揺れます。そのくらいものすごい勢いで描画するのです。速度は想像がつきませんがFで数十万ありそうな気がします。これに少しでも近づきたいというのが今回grbl-LPC(on Smoothieboard)に取り組む第一の理由です。このスピードを実現しているのはgrbl-LPCのソフトウェア設計にあるということを知り、grbl-LPCを試してみたいがためにgrbl-LPCが動作するSmoothieboardを不可避的に選択したという経緯です。
で、そうすることで制御構成が異なるMACH3は使えなくなりますので、自動的にMACH3を核とした制御系から脱却することになり、第二の目的も達成されるということになります。
ちなみに、Smoothieboardへgrbl-LPCのセットアップは非常に簡単です。
GitHubにあるgrbl-LPCのSmoothieboardようのファームをダウンロードし、firmware.binに名前を変更してSDカードに入れてボードにセットし、電源を入れるだけです。
インストールは簡単なんですが、私の場合最新のbeta10、その前のbeta9ではうまく動かず、beta8までバージョンダウンしてようやくちゃんと動作しました。詳しくは「ちゃんと」ではないんですが、実用上問題ない状態で動いています。
最新版での不具合は「Safety Doorが開いていて危ないから動かねえよ」とのメッセージ(error13)が出て何もできなくなるというものでした。海外のフォーラムをさんざん漁ったんですが、解決策が分からず、結局バージョンダウンという消極策を取らざるを得ませんでした。
beta10のChangeには”Fix for safety door, feed hold and cycle start bits”って書いてあるんですけどねえ。
さて、新年早々いつにも増して長い前置きでした。
ということで、これらのことを念頭に置きつつgrbl-LPCのセットアップを行っていきます。
まずはプラットフォームであるSmoothieboardが動くようにしないといけません。
MDF上にボードと電源を固定していきます。Smoothieboardの電源は、モータドライバ用に12-24V、ロジック用に5Vが必要です。12V、24V、5Vの電源をおもちゃ箱から出してきます。12Vか24Vかで悩むところですが、ステッピングモータ回すので迷ったら高い電圧を選びます。近年のモータドライバ(SmoothieboardはアレグロA5984)には優秀な電流制限がついていますので、インダクタンスに負けないように電流をぶっこむには電圧は高いほうが良いというのがみら太な日々の持論であります。ということで24V使います。
MDF板はこれでいいでしょう。適当なサイズを切り出します。
バンドソー持ってきます。この時大晦日の午後(笑
切断したらSmoothieboardのボス穴とDINレール用の取付穴を開けます。
裏面にパッド貼っときましょう。こんなのが100均で簡単に手に入ります。いい時代です。
DINレールに電源載せます。Smoothieboard用には5mmのスペーサ乗せときます。q
ボード乗せて電源配線します。Smoothieboardは非常にポートが多いボードです。触る前にかならずSmoothieboard概要とLaser Cutter Guideを熟読してください。読んどかないと即死することがたくさん書いてあります。電源接続図はLaser Cutter GuideのMain Power Unitの項にあります。ここも極性に関して一発即死の情報がありますのでご注意を。
で、読んで(それと自分のボードをよく見て)わかったことですが、5Vの電源はいりませんでした。しかも二重の意味で(笑
まず、Smoothieboardには12-24V電源から5Vロジック電圧を生成するためのDC-DCコンバータを搭載しているものがあります、というか正確には元の(Open Sourceですから)ボードのパターンにはDC-DCコンバータを乗せるところが作られており、そこに実際に部品が乗っているボードと乗っていないボードが売られているのです。で、私のボードにはDC-DCコンバータが乗ってました。ので5V電源はいりません。
さらに、レーザ加工機の場合3Dプリンタと違って「SDカードから出力する」といったことはまずやりません。ほぼ必ずPCから動かします。ので動作するときにはUSBでPCとつながっており、PCからUSBを介して5Vが供給されます。ので5V電源はいりません。
という二重の意味で5V電源はいらないのです。
通電出来たらレーザ加工機と接続します。
接続の際の重要ポイントがあります。それは「grbl-LPC on Smoothieboard のリミットスイッチはデフォルトノーマリークローズである」と「Smoothieboardのリミットスイッチ6ポートはすべて独立している」という二点です。
一度でもgrbl(on Arduino:多分)を触ったことがある方ならお分かりと思いますが、Arduino(+CNCシールド:多分)のリミットスイッチは+-が並列接続になっています。つまり+と-は一つのポートで賄われており、orで動作します。これに対してSmoothieboardのリミットスイッチポートは6ポートがそれぞれ別のマイコンのポートに接続されており、独立に検出されます。さらに、デフォルトの設定はプルダウン、つまりリミットスイッチのノーマリークローズポートへの接続が必要です。さらにさらに、grblのリミットスイッチの論理は全ポート一括でしか変更できませんので、6ポートのうち3ポートしか使わない場合は残りの3ポートをジャンパ線でプルダウンしてやらないといけないということです。
そんなところに気を回しつつ、設定していきます。
マシンによって違いがありますので参考にはならないと思いますが、初期設定は以下のようにしています。
$0=10$1=255$2=0$3=3$4=0$5=1$6=0$10=0$11=0.010$12=0.002$13=0$20=1$21=0$22=1 :原点復帰する$23=3 :XY共にマイナス側に原点を設定$24=50.000$25=2000.000$26=250$27=2.000$30=1000$31=0$32=1$33=5000.000$34=0.000$35=1.000$36=100.000$100=80.000 :X軸だけタイミングプーリの径が大きい$101=160.000$102=160.000$103=160.000$110=24000.000 :この辺は最終的に調整していくとこ$111=24000.000$112=24000.000$113=24000.000$120=2500.000$121=2500.000$122=2500.000 :ここも$123=2500.000$130=560.000$131=380.000$132=50.000$133=100.000$140=0.600 :モータ電流(A)の設定がここで出来るのは便利$141=0.600$142=0.000$143=0.000
ちなみに、LASERWEB4のマシンコンフィギュレーションは「generic grbl」にしてください。Smoothieboardをつかっていますが「generic SMOOTHIE」ではありません。ここで選択するのはあくまでハードウェアではなくコントロールソフトウェアの種類です。
では動かしてみたところを動画で。
先に「ちゃんと」は動いていないと書きました。ちゃんとじゃない部分はZ軸、つまり昇降ステージが原点復帰してくれないという部分です。が、ここが上手く動かなくても実用上は全く困りません。
レーザ加工機の場合ステージ高さは加工物に合わせてスタート前に設定すればよく、制御ソフトウェアからコントロールする必要はありません。これはTrotecのマシンなんかでも同じです。ので、別の方法でレンズとワークのクリアランスを決定できるのであればZ軸をLASERWEB4からコントロールする必要はないのです。ここの制御部分はArduinoを使って別途作る予定です。
期待通りの動きです。
が、Y軸の動作音が大きいです。X軸がほとんど無音で動くだけにY軸のうるささが耳につきます。
適当に作ったテストパターン動かしてみます。動画で。
これもY軸がうるさいですが、期待通りの動作をしています。
ハードウェアがSmoothieboardになったということで、grbl on Arduinoでは表示されなかったリアルタイムのキャリッジ位置が表示されるようになりました。素晴らしい。
ではここで期待のラスター動作をさせてみましょう。動画でどうぞ。
うーん(笑
設定上F24000で動いており、今までのF8000に比較すれば十分に速いんですが、Trotecマシンの速度にははるかにはるかに及びません。今後の検討課題ですね。まずは現状よりも大巾に向上したということで合格点を与えておきましょう。
ということで、軸コントロール系は一通りの完成を見ましたが、やはりY軸のうるささが気になります。ベルトの張りを変えたり、電流値を変えたりしたのですが全く改善がみられません。頭にきて一旦ばらしてモータだけをから回ししたところ、モータ自体が特定の回転数で大きく振動しています(笑 こんなことあるんですね。しかもY軸についている二個のモータいずれもです。これは仕様ということでしょうか。困ったもんだ。
しかしながら、モータが振動源であるということはモータさえ変えれば改善する可能性があるということです。ステッピングモータなら捨てるほど(実際いらんのは捨ててます:笑)持っております。
幾つか候補を見繕って同型番でペアを作ります。
外したこれを、
これに換えます。
穴位置は同じなので取り付けは簡単。
配線だけはテスターであたって確認したうえで変更。
では改めて動かしてみます。 テストパターンの描画を動画でどうぞ。
素 晴 ら し い
完全に改善しました。ビビりは全くなくなり、心地よいステッピングモータの制御音だけになりました。成功です。うれしいので動画をもう一本。
次はいよいよレーザ管の実装とファーストライトです。
コメント
切れるようになりましたが、PWMの部分がいまいちで、
PWMの周波数が足りてないようです。
今のボードはCNCに特化してるので、ファームのアップデートできるか
不安で、smoothieボードの検討も始めました。
ところで、設定値では $33=5000.000 で PWMが 5KHz になっておりますが
、20Khzなくても良いのでしょうか?
ファームを書き換えなくても周波数が変えられるのは便利だと思いました。