はじめに
MDuino 57AAR+というArduino Mega2560とリレーなどのIOシールドがPLC風の筐体に収められたIOボックスを購入しました。
スペインのIndustrial Shieldsという会社の製品でRSオンライン、ロボショップなどで扱っていますが、検索してもあまり情報が得られないので参考になればと思い投稿しました。LabVIEWとArduinoを連携させるLINXでも使えますので、工場のレガシーなIOとLabVIEWをつなぐ時のインターフェースに良いかもしれません。
この記事ではMDuino 57AAR+の機能紹介と、Arduino Mega2560でのパルスモーター用のパルス生成とLabVIEWからのパルスモーター動作制御について紹介します。
LINXを使えばArduinoの個別のプログラムを書かなくともArduinoのIOにLabVIEWからアクセスすることができますが、動作速度や機能で不満に感じる場合が多いと思います。そんなときにLabVIEWとArduinoのコマンドインターフェースの簡単な例として参考になるかもしれません。パルス生成にはATmega2560の16bit Timer/Counter4を使用しましたが、他に2個動かしたいモーターがある場合にはTimer/Counter3とTimer/Counter5も同様に使うことができます。
MDuino 57AAR+の機能紹介
Arduino MEGA 2560とIOシールドがDINレールに取り付け可能な筐体に収められ、プッシュインタイプの端子台とスクリュータイプの端子台が用意されています。Arduino MEGA 2560はIOが多数あってワイヤーピンで配線しても大変なので、端子台があるというのはかなり便利です。IOシールドの配線図が公開されていないのは残念です。
MDuinoは端子数と端子の機能によって幾つかのモデルが発売されています。57AAR+は一番端子数が多いモデルです。
MDuinoの筐体はAからDまでのゾーンに分かれています。Aゾーンはすべてのモデルに共通で、12-24V電源入力端子、5V/3.3V出力やUSB端子、イーサネット、RS-485、RS232、I2C、SP、μSD、リアルタイムクロックなどが収められています。
B、C、Dゾーンはアナログシールドかリレーシールドが組み込まれます。
アナログシールドは13入力(13デジタル入力、うち6つはアナログ入力として動作可能)と8つの出力(8つのデジタル出力、そのうちの3つはアナログ出力として動作可能)があります。アナログは0-10Vデジタルは5-24Vです。
リレーシールドは6つの入力(6つのデジタル入力、そのうち4つはアナログ入力として動作可能)と11出力(8リレー出力、3デジタル出力、そのうち3アナログ出力として動作可能)があります。
Dゾーンだけはアナログシールド、リレーシールドともに端子が2個ぐらい少なくなっています。Arduinoのピンは機能が共用されている場合があり、I2CやSPIを使う時には使えなくなる入出力がありますので注意が必要です。
リレーや24Vの入出力が普通の仕事場では便利に使えそうな気がします。(回路図が公開されていないので少し怖いですが、、、。)「M-Duino-PLUS-Family-User-Guide.pdf」というマニュアルがダウンロードできるので検討してください。
Arduino Mega2560でのパルスモーター用のパルス生成とLabVIEWからのパルスモーター動作制御
LabVIEWとMDuinoはシリアル(USB)で通信します。PC上のLabVIEW側から周波数と時間を指定したコマンドを送信して、Arduino Mega2560(MDuino)は16bit Timer/Counter4を使用して固定パルス幅(10μsec)で指定周波数に近いパルス列をD6(Q0.7)から出力します。プリスケーラ機能で16MHzの基本周波数を1/8にして、2MHzを16ビットでカウントします。タイマーカウンターの機能の中で高速PWM(Mode=14)で周期を指定して希望の周波数を作ります。この記事ではシンプルにするために段階的に希望の周波数まで上げていく処理にしました。詳細は添付したプログラムをご覧ください。
LabVIEWでコマンドを送るVIは"M 2000.0 15.5"のように文字列でM(Move) 周波数 時間を送って返信を表示するだけです。
LabVIEWのVIはかなり手を抜いて楽にできます。大変なのは浮動小数点の文字列を受け取るArduinoのプログラムの方ですが、応用範囲が広いのでパターンとして使えるに越したことはないかと思います。これがベストとは思いませんので色々検討してみてください。LINXは便利ですが、Arduinoの能力を十分に発揮させるときにはArduinoと対話した方が良いと思います。
添付ファイル「upLoad190623.zip」には「ControlPulseMotorUpload.ino」と「Serial Write and Read.vi」が圧縮されています。LabVIEWは2014以降、Arduino IDEは1.8.9で動作を確認しました。
MDuinoのコンセプトはすごく良いと思いますが、”パルス出力がダラケすぎて、、”ハードはもう少しなんとかして欲しいと思います。。
Arduino MEGA2560からはキレイに出ているのですが、シールドでひどくなっているように思います。
仕事で使えるようでしたら、ご一報いただけると励みになります。