Arduinoでメカトロニクス製品を動かそう
Arduino Unoに「Grbl」というソフトウェアをアップロードすると、CNCコントローラにすることができます。そして、そのArduino Unoの上に、CNCシールドという基板を差し込むと、リミットセンサなどの配線がラクになり、さらに、2相ステッピングモータードライバが搭載されているので、あとはメカさえ揃えることができれば、CNCマシンをつくることができます。しかも、Arduino UnoとCNCシールドを合わせたものが、Amazonのこちらのページからたったの数千円で手に入ります。これはすごいことではないでしょうか。
▲ ArduinoでXYステージを動かしている例
本来、当社で販売しているようなメカトロニクス製品は、FA(工場の自動化)用に作られた「シーケンサー」というコントローラで制御することがほとんどです。でも、わずか数千円で入手できるArduino+CNCシールドで、高精度なメカトロニクス製品を制御できるって何だかワクワクしませんか?ものづくりの楽しさってこういうところにもあるような気がします。
本ページではArduino+CNCシールドと、当社で販売しているモーターやドライバ、センサとの接続例をご紹介したいと思います。
■ Arduino(Grbl)の使い方について
最低限の内容ですが当社でまとめた資料がありますので、よろしければ下記のPDFをご覧ください。ネット上にはもっと詳しい説明がたくさんございますので、「Grblとは」や「Grbl arduino CNC」といったキーワードで検索してみていただければと思います。
■ 3Dプリンタコントローラについて
本ページでご紹介するCNCシールドには「A4988」という2相ステッピングモーターのドライバモジュールが搭載されています。このドライバモジュールは、多くの3Dプリンタコントローラにも搭載されておりますので、このページの内容がそのままお役に立つかも知れません。
ちなみに当社ではLerdge-Xという基板を使ってみました。(メーカーサイトはこちら)
このコントローラはスタンドアローンで動くのでポータブルなマシンを作ることができます。さらに、マシンの構造を選択できるようになっており、スタンダードなXYZマシンのほかに、デルタマシンや、コアXY、さらには、スカラマシンなども選択することができます。何だか夢が膨らむ気分ですね。
Arduinoと2相ステッピングモーターとの接続
国内では2相ステッピングモーターというと、6本線のユニポーラ形がほとんどで、実際、当社に入荷する2相ステッピングモーターは9割以上がユニポーラ形です。ところがCNCシールドに搭載されているドライバは、バイポーラ用となっており、4本しか端子がありません。
しかし下記の図ように、6本のうち2本を非接続にすることで、バイポーラとして使うことができます。
当社で販売している2相ステッピングモーターを例に接続図を示します。
(実際にCNCシールドで駆動した実績のあるものだけを掲載しています。)
- 56mm角ステッピングモーター [片軸/コネクタ接続/ケーブル付属]
- 56mm角ステッピングモーター [両軸/コネクタ接続/ケーブル付属]
- 42mm角ステッピングモーター [片軸/コネクタ接続/ケーブル付属]
- 42mm角ステッピングモーター [両軸/コネクタ接続/ケーブル付属]
- OKI ステッピングモータ KHP42J2501
- 日本サーボ 2相ステッピングモーター KH42HM2R043
- 日本電産サーボ 両軸2相ステッピングモータ KH56JM2U077
- 日本電産サーボ 2相ステッピングモータ KH56JM2U067
中古品の2相ステッピングモーターは入荷のたびにこちらのカテゴリに追加しています。
原点復帰(Homing)について
▲ 原点復帰のようす(HD1616-703-001)
Arduino(Grbl)では、LIMITセンサを原点センサとしても使用します。FA(工場の自動化)の設備では、LIMITセンサは多くの場合、マイクロスイッチなどの接点ではなく、フォトマイクロセンサが使われていることが多いと思います。また、フォトマイクロセンサならば原点復帰精度も高めることができるため、今回は当社で販売しているフォトマイクロセンサを使った接続図をご紹介します。
中古品のフォトマイクロセンサは入荷のたびにこちらのカテゴリに追加しています。
フォトマイクロセンサを遮光OFFで使う場合の注意点
オムロンのフォトマイクロセンサには「L」という端子があり、これを+に接続するか/しないかで動作が変わってきます。具体的には、L端子を非接続にすると「遮光ON」(センサを遮った時にON)となり、+側に接続すると「遮光OFF」(センサを遮った時にOFF)となります。
FA(工場の自動化)の設備では、フォトマイクロセンサをLIMITとして使う場合、遮光OFFにすることがほとんどです。これは、フェールセーフ、つまり、断線や故障したときに安全側に働くようにするためです。
ただ、Arduinoでは、センサを遮光OFFで使うと困ったことが起きます。1軸に対して遮光OFFのセンサが1つだけなら問題ないのですが、2つになると工夫が必要です。
なぜかというと、CNCシールドのリミット入力は、「X+」、「X-」というように、1軸に対して2つのリミットを接続できるようになっていますが、内部回路をよく確認してみると、実はその二つは同じポートに接続されていて、独立していません。つまり、CPUから見ると、+側のリミットが働いたのか、-側のリミットが働いたのかを判別できないのです。おそらくポートの節約のためにこうしてあるのでしょう。このためソフトウェアにて、+方向に動いているときにリミットが働いたら+リミットと判断し、-方向に動いているときにリミットが働いたら-リミットとして判断しているはずです。
なので、LIMITを二つにする場合、それらをAND接続(直列)に接続する必要があります。しかしマイクロスイッチなどの接点であればAND接続にすればよいだけなので簡単ですが、フォトマイクロセンサはこちらの記事にも書かれているように、AND接続はできません。
これを実現するには、参考までに下記のような回路を作るとよいと思います。(この回路は当社で実験し正常に動作することを確認した上で掲載していますのでご安心ください)
なお、この回路を使用するときは、Gbrlの設定の$5(limit pins invert)を1に変更にする必要があります。
▲ 遮光OFFのフォトマイクロセンサを2つ使う場合の回路
フォトマイクロセンサの電源をどこからとるか
オムロンのフォトマイクロセンサの電源電圧は5~24Vと動作範囲が広いので、電源はCNCシールドの5V端子に接続してもよいですし、24Vに接続してもよいと思います。ただ、5V端子に接続した場合、注意が必要な時があります。それは、Arduino基板のDCジャックに外部電源を接続していない時に、フォトマイクロセンサの数が多くなると、5Vの消費電流が増え、USBから供給される電力では賄いきれない可能性があります。そうなると正常に原点復帰ができません。なので、フォトマイクロセンサの数が多い場合は、Arduino基板のDCジャックに外部電源を接続するか、24Vに接続するのがよいと思います。
1軸または2軸のみで原点復帰を行う場合の注意点
原点復帰はデフォルトでZ軸→XY軸というように動作するため、3軸揃っていなければ完了できません。しかし、プロッタのようにZ軸が不要であったり、1軸だけで使うような用途もあると思います。その場合は、こちらの資料の4ページに記載のように、config.hを変更することで、X軸だけまたは、XY軸のみで原点復帰が完了できるようになります。詳しくはこちらをご覧ください。
ドライバ(A4988)の電流設定について
CNCシールドに搭載されているA4988ドライバモジュールには、モータに電流が流れ過ぎないよう電流を制限する機能が搭載されています。その電流値は、下記の写真のようにドライバ基板上のボリュームを回しながら、ボリュームとGND間の電圧(VREF)を調整することで設定します。下記はその電圧(VREF)を算出するための計算式です。
Imax=Vref/0.4
たとえば42mm角ステッピングモーター[両軸/コネクタ接続/ケーブル付属]の定格電流(Imax)は、1.2Aです。この計算式にあてめるとVREFが0.48Vになるので、ボリュームとGND間の電圧が0.48Vになるよう調整を行ってください。
なお、A4988には運転の頻度によって異なりますが、発熱が大きくなり、CNCシールドに付属のヒートシンクでは不十分になる可能性があります。その場合はヒートシンクを大きくするか、電流値を下げてご使用ください。
▲ ボリュームとGND間の電圧(VREF)を計測しているところ
▲ モーターの定格電流(Imax)が1.2Aならば、ボリュームとGND間の電圧が0.48Vになるように調整を行なう
5相ステッピングモーターとの接続
CNCシールドに搭載されているドライバモジュールは、2相ステッピングモーター用ですので、5相ステッピングモーターは駆動できません。しかし、パルス信号は出力されていますので、これを5相ステッピングモーターのドライバに接続することでコントロールが可能になります。
ドライバモジュールを使わないならばCNCシールドは使う必要はあまりなく、直接Arduino基板から配線してもよいのですが、1軸だけ5相であとは2相というように、混在させて使う場合もあると思いますので、やはりCNCシールドを使うのは便利ではないかと思います。
下記に当社で販売している5相ステッピングモータードライバとの接続図を紹介します。
下記は脱調レスのステッピングモーターです。確実性と高速性を求める場合におすすめです。
下記のページでは2相ステッピングモーターと5相ステッピングモーターを垂直動作と水平動作で比較した動画がご覧になれますので、参考になさってください。
マイクロステップの設定
2相ステッピングモーターの基本ステップ角は1.8度なのですが、ドライバの電流制御によって、そのステップ角度をさらに細かくすることができます。これを「マイクロステップ駆動」といいます。
CNCシールドに搭載されているドライバモジュールは、そのマイクロステップ駆動に対応しており、ステップ角を最大で1/16まで細かくすることができます。
▲ CNCシールドからドライバモジュールを引き抜いたところ
各軸のドライバモジュールを引き抜くと、それぞれに3つのジャンパーピンがあります。これを抜き差しすることで、マイクロステップの分割数を設定することができます。左のジャンパーピンからMS1、MS2、MS3となっており、ショートすることでHighとなります。
分割数を細かくすればするほど、分解能が高まり振動も抑えることができます。このため私たちは、1/16(3つ全てのピンをショート)で使うことがほとんどです。とくに低速域ではその差を実感できます。
MS1 | MS2 | MS3 | 分割数 |
---|---|---|---|
Low | Low | Low | 1/1 |
High | Low | Low | 1/2 |
Low | High | Low | 1/4 |
High | High | Low | 1/8 |
High | High | High | 1/16 |
たとえばこのXYステージは、1/16に設定して動いています。具体的に1mmあたりのステップ数を計算してみましょう。
▲ HD1616-703-001
このXYステージのボールネジのピッチは10mm、2相ステッピングモータの基本ステップ角は1.8度なので、
360度 ÷ 1.8度 × 16 ÷ 10mm=320step/mmとなり、1mmあたりのステップ数は320となります。
1ステップあたりの移動量は、1mm ÷ 320=0.003125mmとなり、3.125μm単位の細かい位置決めが可能になります。
5相ステッピングモーターのマイクロステップの分割数の設定はドライバによってそれぞれ異なるのですが、たとえば下記のオリエンタルモーター製DFU1507の場合、DIPロータリースイッチで1/1~1/250の16段階の設定ができるようになっています。しかし、ほとんどの5相ステッピングモータードライバは、1/1(Full)か、1/2(Half)の二つしか設定できないことが多いと思います。
▲ DIPロータリースイッチ 1/1~1/250の16段階の設定ができるようになっている
パルス幅について
Arduinoから出力されるパルス幅は、出力周波数に関係なく固定されています。そして、そのパルス幅は、デフォルトで10μsとなっています。この10μsというパルス幅は、ドライバによってはフォトカプラのスイッチングが追い付かず、正常に応答できない可能性があります。
当社で販売するドライバについては、応答するか確認した上で出品いたしますのでご安心ください。
▲ Arduinoから出力されるパルス
Grblの設定について(v1.1を前提としています)
よく使う項目のみピックアップしてご紹介したいと思います。
$1(次の動作に移るまでの停留時間)
255に設定すると停止時にもモータに電流を流し位置を保持します。上下動するような用途では停止した瞬間に落下してしまうのを防ぐため、255にするとよいと思います。ただ発熱してしまうので、用途にあわせて設定を変更する必要があります。
$5(リミット入力の論理設定)
リミットセンサが検出時にONとなるタイプは0としてください。逆にリミットセンサが検出時にOFFとなるタイプであれば1とします。
$27(原点復帰後の移動量)
原点復帰後にここで設定した距離だけ移動するのですが、もし移動したあともリミットが働いたままだとエラーになってしまいますので、1mm以上あったほうがよいと思います。の設定は、3.0以上に設定してください。
$100(X軸の1mmあたりのステップ数[step/mm])
$101(Y軸の1mmあたりのステップ数[step/mm])
$102(Z軸の1mmあたりのステップ数[step/mm])
もしボールネジのピッチが10mm、ステッピングモータの基本ステップ角が1.8度、マイクロステップの設定が1/16ならば、360度 ÷ 1.8度 × 16 ÷ 10mm=320step/mmとなります。
$110(X軸の最高速度[mm/min])
$111(Y軸の最高速度[mm/min])
$112(Z軸の最高速度[mm/min])
$120(X軸の加減速度[mm/sec2])
$121(Y軸の加減速度[mm/sec2])
$122(Z軸の加減速度[mm/sec2])
最高速度や加減速については、下記の動画を参考にしてください。 このステージは、最高速度5,000mm/min、加減速度300mm/sec2で動いています。
▲ 動作テスト
▲ 配線の様子
▲ XYステージを動かしたときの設定一覧
備考
電源について
CNCシールドには、12-36Vの電源入力端子があります。これはステッピングモーターの駆動用の電源で、ドライバモジュールのVMOTという端子に接続されています。
モーターの定格電圧が数Vなのに、なぜこんなに高い電圧を与えるのかというと、ステッピングモーターは高速回転になると電流の立ち上がりが追いつかなくなり、トルク低下が発生するためです。それを防ぐために定格電圧の何倍、あるいは何十倍もの高い電圧をチョッピングさせています。100V以上の電圧をかけるドライバも少なくありません。
当社では下記の電源をおすすめします。容量は余裕があったほうがよいと思います。
ダンパについて
一見、ただの円盤のように見えますが、ゲル状のシリコンと慣性体がプラスチックケースに密閉されており、これをステッピングモーターに取り付けると、振動が吸収され回転速度も上げることができます。とくに2相のステッピングモーターに取り付けたとき、その効果を実感することができます。
アルミハンドルについて
アルミハンドルを取り付けると、自動だけではなく手動でも動かしたいという場合には便利です。5mm用と6.35mm用の2種類をご用意してございます。
いかがでしたでしょうか。私たちはこれからも、動くものをつくる楽しさ、微弱な電気信号をダイナミックなメカの動きに変える楽しさを提供してまいります。最後までお読みいただきありがとうございました。
※この記事は、当社で販売しているメカトロニクス製品の活用例ということで作成させていただきました。たいへん申し訳ありませんが、Arduinoに関しての技術的なサポートはいたしかねます。なにとぞご理解のほどよろしくお願い申し上げます。