マルチドロップ接続

 新世代のサーボモーターでは、各社モーターへの接続はPWMではなくシリアル接続へと移行している。シリアル接続のメリットは、複数のモータを直列(マルチドロップ)で接続できること、またモーターの情報を得ることができる点にある。シリアルの接続方式にもいくつかあり、各社それぞれの方式を取っている。
 
 
PWM方式の場合 マルチドロップの場合
 
方式
近藤科学 ICS2.0
Hitec HITEC Multi-protocol Interface
ベストテクノロジー
(ROBOTIS社)
RS485(半2重)
Futaba RS485(半2重)
 
 今回は、近藤科学のKRS-4014S HV ICS Red Versionを使用したロボットを製作したので、ICS2.0でのマルチドロップ制御を試みた。制御に使用したコントローラは独自開発のFPGAプロセッサコアのコントローラ。このコントローラは6つのICS2.0制御インターフェースポートを持つ。それぞれに最大5つのモータを直列につないでの制御を行うようにしている。
 
 
ICS2.0の仕様
方式
通信速度 115200bps
ビット長 8bit
フロー制御 無し
パリティ EVEN

 使用しているFPGAは3.3Vの出力を出すがKRS-4014は5.0V以上の信号電圧が必要なため、レベルコンバータにより電圧変換を行っている。使用しているのは1ビット双方向レベルコンバータSN74LVC1T45。その回路構成は以下のよう。この回路を6個使用している。

1ポート当たりの回路
同様の回路を6つ使用

 DIR CTRL信号により信号の方向を切り替えている。この信号はFPGAで作成したICS2.0コアによりハード的に発生させている。
 レベルコンバータの方向切り替え時は、少し注意が必要である。そのままFPGAの入出力の切り替えにあわせてレベルコンバータを切り替えると、一瞬FPGAからの出力信号とレベルコンバータからのFPGAに向けた信号がぶつかる可能性がある。そこで、以下のようなシーケンスをICS2.0コア内でハード的に作り、この問題を回避している。また、入力は出力信号が入力側にループバックしないよう、入出力の切り替えにあわせてTX/RXピンとRX信号ラインの接続をICS2.0コア内でON/OFFしている。

シーケンス DIRピン FPGA(外部) FPGA(内部)
TX/RXピン RX信号ライン 出力信号ライン
↓↑ 1 FPGA→サーボモータ 出力 H TX/RXピンに接続
2 FPGA→サーボモータ 入力 H 切断
3 サーボモータ→FPGA 入力 H 切断
4 サーボモータ→FPGA 入力 TX/RXピンに接続 切断
 
 次図は、ポジショニングの時の、DIR CTRL波形とICS2.0(TX/RX)波形を示す。送信280μs、受信待ち40μs、受信320μs、合計640μs程で送受信が終了している。その次の図は、6つのポートの送受信波形。6つの信号がほぼ同時に送受信できている。
 

ポジショニングの時の波形
上段:DIR CTRL波形、下段:ICS2.0(TX/RX)波形
200μs/div
 
   
6本のポート電圧波形
ほぼ同時に送受信できている(正確には最大20μs程度ずれている)
200μs/div
 
 
1つのポートですべてのモータ制御を行わないのは、以下の理由による。
  1. モータの制御周期は1つのポートにつなぐモータの数に比例して遅くなる。
  2. 同じポートににつながれたモータ間の制御遅れはモータの数に比例して大きくなる。
  3. 直列に何個もつなぐと、電源電圧の低下が無視できなくなる。
 ここで注意しなければならないのがICS2.0の仕様。ICS2.0では送受信を同じ1本の線で行っている。そのためサーボにコマンドを送った後、そのサーボから応答が返ってくる時に送信を行おうとすると送受信信号の衝突が起こる。これを回避するためには、1つのポートに接続されたサーボの1つに信号を送った後、応答信号を受信し終わるまで待つ必要がある。
 
モータ2への指令とモータ1からの応答が衝突する
 
 しかしながら、実際には応答が返ってきて直ぐに次のモータに信号を送ってもうまくいかない。次の波形は、1つのポートに5個のサーボを直列につないだ場合の送受信波形である。800μsの間隔でポジショニングの命令を送っているが、ID2のモータからの応答が返ってきていない。このように、間隔が短いと時々送信信号に反応しないモータがあらわれる。一方、950μs間隔で送受信を行ったところ、長時間にわたりこのような問題は生じなかった。(注:長時間動作試験を行ったところ、大きな間隔を取っていてもモータが命令を受け付けなくなるという現象が確認された。この場合、そのままで数分時間を置くか、電源を入れなおすと動き出す。これは信号処理の問題ではなく、モータが高温になったことによるKRS4014の回路の誤動作?と考えられる。)
 
800μs間隔でポジショニング指令を送った場合の送受信波形
上段:DIR CTRL波形、下段:ICS2.0(TX/RX)波形
1ms/div
 
950μs間隔でポジショニング指令を送った場合の送受信波形
上段:DIR CTRL波形、下段:ICS2.0(TX/RX)波形
正常に送受信ができている


 1msの間隔を置いて1回線当たり5個のサーボを制御するとする場合には、サーボの動作に4msの遅れが生ずることになる。4014Sの速度は最大速度0.19秒/60度であるので、このことによるサーボの遅れ角度は最大60/0.19*0.004=1.25度となる。これは、20cmのアームで約4.4mm分のずれに相当する。従って、本システムを使用すれば遅れは問題ないと思われる。
 
 
マルチドロップ接続(KRS-4013フルスピード)での制御
画像をクリックすると動画が再生されます。
WMV 2M)

 
 
 6つのポートは、それぞれ以下のように受け持つ。腕や足はすべて1組の線だけで済むため、配線がすっきりする。このような構成にすることにより、制御周期を6倍に速くすることが可能となった。その制御周期は1ms×5=5msと一般的なPWM制御よりも遥かに速い。(もし同様に30個のモータを1つのポートで行うと、30msの制御周期になる。)
 
各チャンネルの制御部
ch1 右足
ch2 左足
ch3 胴体下部
ch4 右腕
ch5 左腕
ch6 胴体上部