ArduinoやラズパイでカジュアルにEtherCATを組むまとめ。
- EtherCATマスターとEtherCATスレーブ
- EtherCATスレーブ : EasyCAT + Arduino Uno
- EtherCATマスター(1) : Rasoberry Pi
- EtherCATマスター(2) : Ethernet Shield 2 + Arduino DUE
- EtherCATマスター(3) : GR-SAKURA
EtherCATマスターとEtherCATスレーブ
まず前提として、
- EtherCATマスターはふつうのEthernetのハードウェアでOK。ただし、Ethernetの生パケットを操作できる必要がある。(TCP/IPやUDP/IPしか扱えないモジュールやライブラリは不可)
- EtherCATスレーブは専用ハードウェアが必要。また、当然ながらEhernetコネクタはINとOUTの2口が必要。
EtherCATスレーブ : EasyCAT + Arduino Uno
EtherCATスレーブは専用ハードを必要とするので、選択肢が限られる。カジュアルに使えて、比較的入手しやすく、1万円以下で買えるものというと、今のところEasyCATくらいしかないと思われる。(※ArtifactNoiseさんのこちらにも期待!)
EasyCATはイタリアのAB&T社の製品群で、以下がラインナップされている。
- EasyCAT Shield for Arduino : Arduino用のシールド
- EasyCAT HAT : ラズパイ用のハット
- EasyCAT PRO : 小型のモジュール基板 (2.54mmピッチピンヘッダ接続)
- EasyCAT Gateway : 樹脂ケースに入ったデバイス (USB or LAN接続)
- EasyCAT IO : 24V系I/O基板 (ターミナルブロック接続)
- EasyCAT LAB : マスターとスレーブ2個がそろったセット商品
今回は、EasyCAT Shield for Arduinoを使用し、Arduino Unoと組み合わせる。購入は、今のところAB&T社の直販サイトから買うしかない。支払いはPayPalで可能。1個50ユーロで、送料が42ユーロするので、2個買うと142ユーロ。
EtherCATマスター(1) : Rasoberry Pi
もっとも気軽に試せるEtherCATマスターはSOEMだろう。SOEMはオープンソースのEtherCATマスターで、WindowsやMac OSやLinux上で動作できる。もちろん、Rasoberry Piでも動作する。今回はRasoberry Pi 3Bを使用したが、もっと古い世代のRasoberry Piでもたぶん動作するだろう。Linuxカーネルをリアルタイム化しなければEtherCAT本来のご利益であるリアルタイム性は期待できないが、まあ素の(非リアルタイムカーネルの)Raspbianでも学習用途、実験用途には使えるし、割り切って使う分には使い道はあるだろう。
実験用プログラム
【ソース】
【手順】
- ラズパイの任意のディレクトリ(ここでは~/とする)に上記のSOEMをクローンまたはダウンロードする。
- ~/SOEM/test/linux/の下に上記のeasycat_test.zipを展開する。
- ~/SOEM/CMakeLists.txt の最後を下記のように編集する。
if(BUILD_TESTS) add_subdirectory(test/linux/slaveinfo) add_subdirectory(test/linux/eepromtool) add_subdirectory(test/linux/simple_test) add_subdirectory(test/linux/easycat_test) # ←この行を追加 endif()
- 以下のコマンドを実行してテストプログラムをビルドする。
cd ~/SOEM mkdir build cd build cmake .. make
- 前述のEtherCATスレーブ(EasyCAT + Arduino Uno)2台をラズパイに数珠つなぎに接続する。
- ラズパイ側から見て1台目のスレーブにボリューム、2台目のスレーブにサーボを取り付ける。
- 以下のコマンドを実行してテストプログラムを実行する。
cd ~/SOEM/build/test/linux/easycat_test sudo ./easycat_test eth0
- 1台目のスレーブのボリュームを回すと、2台目のスレーブのサーボがそれに応じて動く。
EtherCATマスター(2) : Ethernet Shield 2 + Arduino DUE
前述のSOEMをArduinoで使えるようにC++クラスにラップしたライブラリ SOEM4Arduino を作成した。
SOEMはスレーブを管理するためにメモリを大量に使うのでArduino UnoやArduino Megaでは動作させるのは現実的でない。いまのところ、Arduino Dueで動作確認できている。それでもオリジナルのSOEMに比べると管理テーブルのサイズを大幅にシュリンクしている。
EthernetコントローラにはWIZnet社製W5500を搭載したEthernet Shield 2を使用する。
EtherCATマスター(3) : GR-SAKURA
前述のSOEM4ArduinoはGR-SAKURAでも動作する。GR-SAKURAはルネサスRX63Nマイコンを搭載したArduino Unoフォームファクタなマイコンボードであり、Arduino IDEから派生したIDE for GRで開発できる。また、RX63NマイコンはEthernetコントローラを内蔵しており、GR-SAKURAはEthernetコネクタを搭載している。つまりシールド基板なしでEtherCATマスターになれる。
ただし、SOEM4ArduinoをGR-SAKURAで動作させる場合には既知の不具合があり、受信の応答性が悪い。パケットを受信するのに8msecもかかってしまう。また、起動後3秒以上待ってからSOEMの初期化をする必要がある。これらについては現在調査中である。 (2020/01/23 バグ修正)