これまでのあらすじ:
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〜の投稿に書いてあります。

2016年12月18日日曜日

Grbl1.1 Laser Modeの実験

さてGrbl1.1のレーザーモードの実験をしてみました。
前回も書きましたが、Grbl1.1では新たにLaser Modeが加わり、その中でもM4コマンドをつかった(従来まではM3)Dynamic Laser Modeという、レーザーヘッドの移動スピードに比例するようにレーザー出力をリアルタイムで調節してくれる新機能があります。今までは、スピードが落ちがちなパス折り返し地点や出だしの部分などで、焦げが目立っていましたが、それが解消(緩和)されるというわけです。どの程度効果あるのか、そしてどんな設定やコマンド操作するといいのか試してみました。
結果的には、従来に比べけっこう使えるんじゃないかという感じです。

使っているG Code SenderはbCNCです。今回は90度の扇形(半径20mm)の図面を描いて実験です(Inkscapeで描画、Laser Tool Plug-inでGコード生成)。直線部分、角の部分、そして円弧がある図形という感じです。特にいままでは、角の部分で焦げが目立っていましたが、どうなるかいくつかのパターンで試してみました。
画面左↑にGコードがあります。ちょうど水色の部分にM03があり、ここをM4に変更したりS値を少し書き換えていくつかのパターンをつくってみました。
結果は以下。
材料は厚さ2.2mmのシナベニヤ板。半径20mmの扇形。5.5Wダイオードレーザー使用。
まずは下の段から、
左端は、従来のM3 S1000 F200でカットしたもの(やや角に焦げが見えます)。
左から2番目、M4 S1000 F200。Dynamic Laser Modeなので、あまり角が焦げていません。なかなか効果あり。

M4でもS値を入力する必要がある:
ここで疑問に思ったことがあり(前回の投稿での疑問でもありましたが)、M4はスピード(フィード)に合わせてレーザー出力するのなら(M4の場合、スピードが0だと出力も自動的に0なる)、S1000はコマンド入力しなくてもいいんじゃないか?ということで試してみると、M4だけで出力値Sを入れないでRunさせると、レーザー自体出力していませんでした。つまり、M4 S1000などと出力したい値(おそらく100%のときの出力値)を入力しないとダメです。
ということで、右から2番目のが、M4 S500 F200。出力を半分に下げてのDynamic Laser Mode。少しわかりにくいかもしれませんが、左から2番目のS1000よりは弱いかなと。
わかりにくいので、右端がS100まで出力を落としたDynamic Laser Mode。ということから、M4の場合、Sの値は上限値という感じです。

レーザーモードのオン・オフ設定:
ただ、注意点としては、M3の場合は最初に$32=0という感じで、レーザーモードをオフにしておき、M4を使うなら$32=1に設定変更が必要です。M4での作業が終わればまた$32=0に戻すという感じ。M4が便利そうなので、$32=1のままでよさそうですが(M3はもはや使わないかも)。

リアルタイムオーバーライド機能:
それから、実験結果画像の上のほうにあるのは何かというと、Grbl1.1からはReal-time Overridesが使えるようになったので、もともとbCNCについているオーバーライド機能を使ってみたという結果です。
bCNCには、FeedやSpindleをリアルタイムで調節できるスライダーがついています。加工中ではないときでも、Spindleボタンを押せば、レーザーオン・オフや出力調整が可能です(いきなりレーザー光がでるので注意が必要です)。この画像↑の場合、Feedが最大200になっています。
追記:調べてみると、どうやらこの200は200%とということらしいです。100が100%でそれに対し、25%〜200%で可変制御可能ということみたいです。
このようにスライダを右にずらせばフィード50%などに変更できます。これを加工中(レーザー照射中)に変更するとどうなるかというのが、実験結果画像の上段です。上の段真ん中が、M4で加工中にフィードを200%から50%まで下げてみた結果です。Dynamic Laser Modeなので、理論的にはフィードが途中で変わっても、それに合わせて出力変化してくれるので、均一な加工結果になるはずです。ぐりぐり少しいじったので、円弧の部分でややムラがありますが、縦のラインはフィード200%で横のラインがフィード50%ですが、だいたい同じくらいの出力になっている感じなので、効果はでていると思います。

実験結果画像上段の右端は、M3で同じように加工中にリアルタイムでフィードを変化させたものです。Dynamic Laser Modeではないので、当然200%から50%に下げれば、それだけ焦げが多くなるはずです。まあ、そういう結果になっているので、やはりリアルタイムで調節可能ということが分かりました。

まとめ:
Dynamic Laser Modeはけっこう効果あります(焦げが少なくなるために、きれいに切断できる)。
Dynamic Laser ModeでM4を使うときは$32=1(レーザーモードON)にする。
従来のコマンド(M3)の場合は、
M3 S1000(レーザーON、出力100%)
でしたが、
Dynamic Laser Mode(M4)の場合は、
M4 S1000(S値:レーザー出力上限値、S500なら最高50%で出力)。
リアルタイムでフィード(25%〜200%)や出力値(0〜100%)も調整可能。
結果的には、Grbl1.1のほうがGrbl0.9よりずっと優れている。

要するに、どうすればいいかというと、Gコード上ではM4 S1000で出力値MAX、フィードもやや速め(M3のときの設定に比べれば1.5倍〜2倍)に設定しておき、bCNCならスライダで出力値やフィードを調整するという手順になるかと。なので、今回の実験のように、いちいちGコードファイルを開いて編集する必要もないと思います。

Inkscape Laser Tool Plug-inでの設定:
例えば、Inkscape Laser Tool Plug-inを使うならば、
こんな感じで、
Laser ON Command: M04、
Laser Speed: 200(これはやや速め/レーザーのW数による)、
Laser Power S#:1000(ここはGrblのスピンドルMAX出力値の1000)
にしておいてGコードを生成。
あとでbCNCなどのG Code Senderのほうで出力値やフィードは現場調整という感じ。

bCNCの画面折り畳み機能:
これはレーザーモードには関係ないですが、bCNCの場合以下のようにState▲をクリックすると、画面が折り畳めます(しばらく気づかなかった)。
bCNCの全体表示画面が大きすぎるとき(Raspberry Piの小さなモニターのときなど)、折りたたみ機能を使えば大丈夫というわけです。

24 件のコメント:

  1. スピンドルの回転数の調整に付いて質問です。
    今までMAX(S1000)でしか使った事無かったのですが、実際に今使ってるスピンドルが何回転しているか把握していませんでした。
    NCコード作成の際に5000rpmでポスト処理していたので1500rpmに変えて見た所回転数は変わりませんでした。なのでbCNCの手動操作で回転数のつまみをスライドさせて見た所、スピンドルONにしたら常に回転数MAXだった事が分かりました。
    ちょっと諸事情で回転数を下げる必要が有るかもしれないと分かったので下げたいと思っています。
    よろしくお願いします。

    返信削除
    返信
    1. NCコード上での5000rpmというのは、今使っているスピンドルモーターのデータシートにのっている最大回転数ということでしょうか?
      もし不明であれば、以下のような装置で計測してみるといいと思います。
      http://s.click.aliexpress.com/e/ZnaaUrZ
      例えば、木工用ルーターなら30000rpm程度、金属用スピンドル(400W)なら12000rpmという感じで様々なので、そのスピンドルモーターの100%が何rpmなのか調べた上でS1000がいいのかS500がいいのか決めるといいと思います。
      スピンドル用のドライバがTTL端子付きの出力可変制御用であれば、Grbl1.1からはbCNCのスライダーで0%〜100%(そのスピンドルの最大回転数)まで変えられます。リレーなどのON/OFF制御しかできないものであれば0%か100%(S0かS1000)のどちらかになってしまいます。

      削除
    2. この間、アマゾンで紹介してもらった調整器具が届いたら試してみたいです。
      今はリレーでしかないのでMAXしか出なかったんですね。
      電源を24Vから12Vに変えると回転数が落ちるのですが、調整できない理由が分かってよかったです。
      スピンドルの回転数を落とす理由は、アクリル切削していていくつか問題が起きまして、(ブログを更新しました。http://ycnnc.blogspot.jp/2017/02/blog-post.html)結論はでませんが以前まで逆回転していたスピンドルを正しい回転に戻すと途中で止まる様になったのです。
      この止まる原因が切削油の使用なのです。切削油を使わない場合は止まる事は無いのですが、数滴垂らすだけで止まるのです。おそらくですが、ノイズなのではなく切削油がスピンドルとアクリルを冷やして、アクリルを堅くしてしまうからだと思います。堅くなったアクリルを切削するのに既にMAXで回転しているスピンドルは耐えきれずに逆電流を引き起こし、Arduinoが緊急停止してしまっているのだと推測しています。
      止まる条件としてアクリル切削、切削油使用、最低3mm以上切削している、決まったカーブのポイントなど一定の共通点が有りました。
      なのでスピンドルの回転が少なくなれば、必要な電力も減り、大きな負荷でも逆電流が小さくなり、ダイオードで制御可能になると思っています。

      削除
    3. bCNCのスピンドルスライダーの下限値(Spindle min:rpm)と上限値(Spindle max:rpm)は、Tool>configで各自が設定するようになっています。もしスピンドルの最大回転数が12000であれば(データシートや自分で計測した結果から)、Spindle maxの欄に12000を入力しておき、スライダーを動かす時に回転数rpmを目安に調整するということになります。
      レーザーなら回転数は必要ないので、0~1000のS値やワット数0W〜10Wなど好みに応じて入れておくという感じです。
      ただ、どんな数値を入れようと、Gコード上のS0〜S1000ということです。

      削除
  2. 初めまして。レーザー加工機を購入したのですが上手くいかないため改良したいと思っています。
    レーザーの基板にTTLの端子が付いているのですが配線は繋がれていません。12Vと書かれた端子のみに配線してあります。TTL端子を使って制御する場合どう配線したらいいのでしょうか?

    返信削除
    返信
    1. はじめましてYebesuyaさん。
      Grbl1.1を使用しているのであれば、配線に関しては以下のページに書いてあります。
      https://cnc-selfbuild.blogspot.com/p/cnc.html

      基本的に、レーザードライバのTTL端子が0〜5V(0〜3.3V対応なら分圧など必要)に対応しているのであれば、

      ArduinoUNOボードのPWM端子(D11端子)---レーザードライバのTTL端子(+)
      ArduinoボードのGND端子---レーザードライバのGND端子(-)

      あるいは、CNCシールドを使用しているのであれば、

      CNCシールドSpnEn(pwm)端子---レーザードライバのTTL端子
      CNCシールドGND端子---レーザードライバのGND端子

      をそれぞれ接続します。

      しかしながら、キットなどのレーザー加工機に付属してある基板であれば、PWMピンが何番ピンに割り当てられているかを事前に調べる必要があると思います。

      削除
    2. 返信ありがとうございます。

      GRBL0.9から1.1に書き換えました。
      私の使用している基板のレーザーへの配線は5Vと12Vを切り替えられるようになっています。そのためD11ピンからLU024Nと書かれたMOSFET?を通してマイナスコントロールにしてあります。(おそらく)
      PWMで制御する場合はD11から直接とった方がいいですよね?
      TTLと12Vのコネクタの両方に配線した場合12Vは常時12Vを入れても大丈夫なのですか?それともTTLのみ接続するのですか?

      ちなみにレーザードライバーのLD部の電流を測ると2.5A流れていました。(レーザーは5.5Wです)こちらのサイトのコメント欄で見たドライバーの回すところで電流値を設定できました。(2.5→0.5)

      削除
    3. 回路を見てみないと分かりませんが、もともとGrbl0.9でD11に高速スイッチング用のMOSFETがついているならば、そのままGコード(M3 S500など)でPWM信号を送れば可変制御できそうな気もしますが、現在は手動でレーザーをでON-OFFしているのでしょうか?

      削除
    4. Gコード(M3)でオンオフしています。

      今の配線だとドライバー基板の12V端子に繋いでいるのですが、レーザーが出たり出なかったり、移動時消えなかったりします。
      S800以上→12.3V
      S500→9.2V
      S100→1.6V
      という感じなので不安定になることが原因かなと思っています。TTLの場合は12Vは繋がなくてもいいのですか?

      削除
    5. おそらく、現在の状況だとレーザーの元電源となる出力用12Vを直接スイッチングしているため不安定なのかもしれません(単なるON-OFF用として使う分には支障ないという感じでしょうか)。
      5Vと12Vを切り替えられるようになっているのであれば、5Vに切り替えた場合は、そのMOSFETは制御用のスイッチングとして機能するか、もしくはまた別のスイッチング素子がTTL端子の先についていて、それによって高速スイッチングが可能になるのかもしれません。
      5VがPWM制御用で12Vは単なるON-OFF用だと思うので、12Vのほうにはつながないほうがいいのではないでしょうか? 5Vに切り替えて、12Vに繋がない場合はどういう出力になりますか?

      削除
    6. TTLに5V入力してもLDは0Vです。
      TTLに5Vと12V端子に12VでLDは0V。
      12V端子に5VでLDは3.75V。12V端子に12VでLDは5.4Vでした。
      12V端子のみに繋いだ時だけドライバー基板のLEDが点灯しました。
      Arduino側の基板にレーザーON時に点灯するLEDがあるのですがジワッと消えるのはMOSFETの応答が悪いのでしょうか?点くときはすぐ点きます。

      削除
    7. やはり、実際の回路をみてみないと分からないですが、基板の画像などネット上で見つけられないでしょうか。
      たとえば、以下のようなもの
      http://urx.blue/Zi3s
      であれば、12VとGNDからレーザーに電源供給して、PWM/TTL端子(0〜5V)にArduinoのD11を接続するという感じです。
      じわっとLEDが光るのはコンデンサーがはさんであるのだと思います。逆気電流防止用(スピンドルモーター用)なのかもしれません。
      基本的には、もしきちんとしたレーザー用の高速スイッチングドライバ回路が搭載されているのであれば、12VとGND端子をレーザー直結して常時ON状態にして、ArduinoのPWM端子からTTL端子へ信号を送って可変調節するという感じだと思います。

      削除
    8. http://yebesuya.work/dsc_0010
      ↑写真をアップしてみました。こちら見られますでしょうか?

      あっさりUNOとCNCシールドに変えた方がトラブルがないですかね?

      削除
    9. 赤い基板のコネクター側の各ピンの種類が見える画像ものせてもらえば、もう少しわかるかもしれません。この赤い基板の他にレーザードライバ基板も別にあるのでしょうか?もしレーザードライバ基板も別にあるようでしたら、そちらのほうの画像も。

      削除
    10. http://yebesuya.work/dsc_0011
      http://yebesuya.work/dsc_0012
      http://yebesuya.work/dsc_0013

      こちらになります。よろしくお願いします。

      削除
    11. 写真から判断すると:

      ドライバ基板(緑)12V端子はレーザー用ACアダプタ12Vと接続(レーザー電源供給用)
      ドライバ基板(緑)LD端子はレーザー本体と接続(直結で常にON状態)
      ドライバ基板(緑)FAN端子はレーザー本体用クーリングファンと接続
      ドライバ基板(緑)TTL端子(+)をArduino D11(PWM)と接続
      ドライバ基板(緑)TTL端子(-)をArduino GNDと接続

      レーザー制御に関しては上記のようにドライバ基板(緑)とArduinoで動くと思います。
      この場合レーザー用の12V電源を別に接続していますが、赤い基板から12V電源がとれるのであれば共有してもいいと思います。ただ、赤い基板のどの端子から12V電源を取り出せるのかは、写真からは判断できないという感じです(たぶん、赤い基板の「Laser-+白コネクタ」だと思うのですが)。

      不明な点:
      赤い基板上の白いコネクタが6個ありますが、右3つ(X1, Y1, Y2)はステッピングモーターとの接続用なのは分かりますが、
      「Laser-+白コネクタ」と何をつなぐのか?
      「7.5-12V白コネクタ」はおそらく主電源用(この電源ひとつで、ステッピングモータ、赤い基板回路、ドライバ基板、レーザー、レーザーファンすべてをまかなっているのでしょうか?)
      画像DSC_0011の赤い基板左上の白いコネクタは何用か不明?
      「Laser OUT/ 5V IN 12V」のジャンパはレーザー出力電圧の切り替え用なのか?

      削除
    12. Laserと書かれたコネクタとレーザードライブ基板の12Vのコネクタとを接続していました。
      左の残り二つは何も接続していません。左のコネクタ二つは並列に配線されており12VとGNDです。3pinの方は1pinはどこともつながっていないように思えます。
      ジャンパはLaser白コネクタの5V/12Vの切り替えです。

      削除
    13. だいたい分かってきました。そうすると、
      「Laser OUT/ 5V IN 12V」のジャンパを12Vに刺して、
      「Laser-+白コネクタ」から12Vが出力されてドライバ基板(緑)の12V端子と接続。
      あとは、
      ドライバ基板(緑)LD端子はレーザー本体と接続(直結で常にON状態)
      ドライバ基板(緑)FAN端子はレーザー本体用クーリングファンと接続
      ドライバ基板(緑)TTL端子(+)をArduino D11(PWM)と接続
      ドライバ基板(緑)TTL端子(-)をArduino GNDと接続
      という感じでつなげばPWM制御で動くのではないでしょうか。

      削除
    14. ありがとうございます。
      テスト実施後また投稿させていただきます。

      削除
    15. NANO互換機にGrbl 1.1gを書き込んでいます。$32=1にするとM3でもM4でもD11から出力されていません。$32=0に戻してもリセットしないとD11から出力されません。

      レーザードライブ基板の実験として、12Vコネクタに12Vを入力してTTLコネクタに下記の電圧を入力してみました。
      TTL+→LD電流出力
      4.57V→0.75A
      2.3V→0.14A
      0V(GND)→0A
      という結果になりました。結果からドライバ基板はPWMで使えるのではと思います。ちなみにTTL未接続のときのLD電流は0.5Aに設定していましたが、TTLを接続すると電流が0.75A(4.57V時)に上がりました。

      $32=1の時正常に動かないのはNANO互換機が原因でしょうか?

      削除
    16. すみません。解決しました。
      私の無知が原因でした。$32=1にした場合M4を送るとすぐ出力されるものと思っていました。
      G01G02G03の時のみ出力されるのですね。S1000M04とF1000とG01X100とコードを送ってLEDで確認してみると、ゆっくり点灯消灯しました。これで上手くいきそうです。

      削除
    17. 解決できてよかったですね。
      grbl1.1のM4(レーザーモード)の場合は、ヘッドの移動スピードがゼロだとレーザー出力も連動してゼロになります。G0は単なるヘッド移動用のGコードなので出力ゼロになるのだと思います。なので、停止した状態での可変出力確認はM3で行えばいいかもしれません。M4の場合は、実際に加工用のGコード(G01など)を書いて実験してみれば大丈夫かと。

      削除
    18. ありがとうございます。お世話になりました。
      実際にレーザー加工したらブログの記事にしようと思うのですが、記事内にこちらのサイト(トップ)へのリンクを貼らせていただいてもよろしいでしょうか?

      削除
    19. リンクは全然問題ありません、OKです。また何かあれば、コメントよろしくお願いします。

      削除

人気の投稿