オリエンタルモーターの電動スライダEASシリーズをArduinoから動かす


オリエンタルモーターの電動スライダEASシリーズの動作

電動スライダは、こちらの動画のような1軸の直線上に動く装置です。今回使ったのはオリエンタルモーター社のEAS4RNX-E040-ARAKD-1です。オリエンタルモーターは値段も書いてあるし取説もすぐダウンロード出来るので、他メーカーと違って連絡無しに買えるから楽です*1。また、モーター部とメカ部が一緒にまとまってるのでバラバラに買わなくていいのもメリットでした。

これをArduinoから動かしました。こちらの電動スライダーはモータードライバーが付属しています。モータードライバーは位置決め機能内蔵タイプ。RS-485上でmodbusプロトコルで通信可能になっており、Arduinoとの通信はこれを使います。

Arduino側はArduino MKR 485 Shieldというものを使います。このShieldが使えるのはArduino MKRシリーズのみなのでArduinoの選択肢は限られてきます。

物理的な接続

f:id:miso_engine:20210120105259j:plain
モータードライバー側でRS-485通信で使うジャックはRJ-45なので、Ethernetケーブルが刺さります。Ehternetケーブルの片方を剥いてArduino MKR 485 Shieldに繋げるのが一番手軽でした。3本の線を下記表のように繋げます。

ケーブルの色 ドライバー側端子 Shield側端子
オレンジ GND GND
緑白 TR+ Y
TR- Z

modbusでの通信

必要ライブラリ

  • ArduinoModbus
  • ArduinoRS485

モータードライバー側へのレジスタ書き込みのみ確認しています。ModbusRTUClientのbegin関数を呼んでからholdingRegisterWrite関数を使います。引数は3つ、スレーブIDの指定、動作コマンド指定、書き込み内容です。

最もよく使うコマンド 0x007D

「ドライバ入力指令(下位)」です。上位を使わないので下位だけで大丈夫です。これを使うと実際にスライダーを動かす指令やホーミングなどを命令出来ます。ただ、一回書き込むと命令は実行されなくて、すぐに0x0000を書き込んで内容を消してやると動きました。本番のシステムでは念の為0x0000書き込みを本命令の前後に入れる処理を入れました。サンプルとしてここに置いておきます。

void Homing() {
  uint16_t value = 0x0010;

  ModbusRTUClient.holdingRegisterWrite(1, 0x007D, 0x0000);
  delay(50);
  ModbusRTUClient.holdingRegisterWrite(1, 0x007D, value);
  delay(50);
  ModbusRTUClient.holdingRegisterWrite(1, 0x007D, 0x0000);
}

おまけ

開発するならPC接続ケーブルは買ってPCから設定その他出来るようにしておくのはマストです。PCで動くサポートソフトMEXE02はWindowsのみで動作。Ver4も出ていますが、ARシリーズの場合はVer3でないと動きません。電動スライダー用設定ファイルというものがあって、それをMEXE02から入れると、設定パラメータの単位がピッタリ(ex.目標位置が0.1mm単位設定)になって楽になりました。

CC05IF-USB|オリエンタルモーター株式会社

たまには宣伝

こういう動き系とかチョコッとしたシステム頼めないかなぁと思ったら弊社までご相談くださいませ。

*1:でも選定に困ったら連絡するとめっちゃ相談してもらえるそうです