北東北 LabVIEWユーザー会

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

MDuino (ArduinoベースのPLC領域向けのハード)の紹介と簡単なパルスモーター制御

はじめに

MDuino 57AAR+というArduino Mega2560とリレーなどのIOシールドがPLC風の筐体に収められたIOボックスを購入しました。

スペインのIndustrial Shieldsという会社の製品でRSオンライン、ロボショップなどで扱っていますが、検索してもあまり情報が得られないので参考になればと思い投稿しました。LabVIEWとArduinoを連携させるLINXでも使えますので、工場のレガシーなIOとLabVIEWをつなぐ時のインターフェースに良いかもしれません。

 

この記事ではMDuino 57AAR+の機能紹介と、Arduino Mega2560でのパルスモーター用のパルス生成とLabVIEWからのパルスモーター動作制御について紹介します。

M6230584 2.JPG

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」というマニュアルがダウンロードできるので検討してください。

 

M6230590 2.JPGM6230591 2.JPG

 

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)で周期を指定して希望の周波数を作ります。この記事ではシンプルにするために段階的に希望の周波数まで上げていく処理にしました。詳細は添付したプログラムをご覧ください。

sketch.png

 

LabVIEWでコマンドを送るVIは"M 2000.0 15.5"のように文字列でM(Move) 周波数 時間を送って返信を表示するだけです。

blockD.pngfrontP.png

LabVIEWのVIはかなり手を抜いて楽にできます。大変なのは浮動小数点の文字列を受け取るArduinoのプログラムの方ですが、応用範囲が広いのでパターンとして使えるに越したことはないかと思います。これがベストとは思いませんので色々検討してみてください。LINXは便利ですが、Arduinoの能力を十分に発揮させるときにはArduinoと対話した方が良いと思います。

 

添付ファイル「upLoad190623.zip」には「ControlPulseMotorUpload.ino」と「Serial Write and Read.vi」が圧縮されています。LabVIEWは2014以降、Arduino IDEは1.8.9で動作を確認しました。

 

MDuinoのコンセプトはすごく良いと思いますが、”パルス出力がダラケすぎて、、”ハードはもう少しなんとかして欲しいと思います。。

F0001TEK.pngF0000TEK.png

Arduino MEGA2560からはキレイに出ているのですが、シールドでひどくなっているように思います。

 

仕事で使えるようでしたら、ご一報いただけると励みになります。

 

メッセージ1/3
3,102件の閲覧回数

MDuinoの利点として、0-10Vのアナログ出力が使えることを書き忘れていました。Arduino MEGA2560ではPWMなので便利に使える場合があります。

 

MDuinoの入出力をLINXやArduino IDEで使用する場合に、MDuinoの端子とArduino MEGA2560の端子の対応関係を知る必要がありますが、それはMDuinoライブラリの「pins_arduino.h」に書かれています。動作確認をしながらまとめてみました。

 

デジタル出力(5-24V)

Q0.0---36pin、Q0.1---37pin、Q0.2---38pin、Q0.3---39pin、Q0.4---40pin、Q0.5---4pin、Q0.6---5pin、Q0.7---6pin

Q1.0---41pin、Q1.1---42pin、Q1.2---43pin、Q1.3---44pin、Q1.4---45pin、Q1.5---8pin、Q1.6---9pin、Q1.7---7pin

Q2.0---12pin、Q2.1---13pin

アナログ出力(0-10V DC) (DIPスイッチで選択)

A0.5---4pin、A0.6---5pin、A0.7---6pin

A1.5---8pin、A1.6---9pin、A1.7---7pin

A2.0---12pin、A2.1---13pin

デジタル入力:アイソレート(10-24V: High/Lowの閾値は5-9V)

I0.0---22pin、I0.1---23pin、I0.2---24pin、I0.3---25pin、I0.4---26pin、I0.5---2pin、I0.6---3pin

I1.0---27pin、I1.1---28pin、I1.2---29pin、I1.3---30pin、I1.4---31pin、I1.5---18pin、I1.6---19pin

I2.0---20pin、I2.1---21pin

デジタル入力(10V: High/Lowの閾値は5.2V前後)

I0.7---54pin、I0.8---55pin、I0.9---56pin、I0.10---57pin、I0.11---58pin、I0.12---59pin

I1.7---60pin、I1.8---61pin、I1.9---62pin、I1.10---63pin、I1.11---64pin、I1.12---65pin

I2.2---66pin、I2.3---67pin、I2.4---68pin、I2.5---69pin

リレー出力

R2.1---33pin、R2.2---32pin、R2.3---35pin、R2.4---34pin、R2.6---49pin、R2.7---48pin、R2.8---69pin

(注)すべてのピンに接続して動作を確認しましたが、I2.0とI2.1は動作が確認できませんでした。

以下の通信関連の動作は確認していません。

I2C:SDA--20pin、SCL--21pin

TTL:RX0--0pin、TX0--1pin、RX1--19pin、TX1--18pin

RS232:RX--17pin、TX--16pin

RS485:Z- --46pin、Y+ --11pin、B- --15pin、A+ --14pin

SPI:SO--50pin、SI--51pin、SCK--52pin

 

 

0 件の賞賛
メッセージ2/3
3,066件の閲覧回数

前掲の記事で以下のように54pinから69pinが使われています。

<<<<<<<<<<>>>>>>>>>>

デジタル入力(10V: High/Lowの閾値は5.2V前後)

I0.7---54pin、I0.8---55pin、I0.9---56pin、I0.10---57pin、I0.11---58pin、I0.12---59pin

I1.7---60pin、I1.8---61pin、I1.9---62pin、I1.10---63pin、I1.11---64pin、I1.12---65pin

I2.2---66pin、I2.3---67pin、I2.4---68pin、I2.5---69pin

<<<<<<<<<<>>>>>>>>>>

 

Arduino IDEではdigitalRead(54)やanalogRead(54)のように54というpin番号が使えたので疑問をもたずに記載したのですが、LINXでアナログ電圧を読もうとした時にpin番号の54はエラーで使えませんでした。試しにAI Channelに0を指定すると動作しますので、LINXの場合は54を引いた値、54を0、55を1........69を15と指定するのが良いようです。

 

簡単そうに見えても、実際に動かしてみないとつまづくことが多いようです。

 

メッセージ3/3
3,027件の閲覧回数