今回は前回「RS304MDを動かしてみる。」で動かしたサーボモーターがどのようなコマンドで動いているのかを探って行きたいと思います。
RS303MR/RS304MD取扱説明書を参考にして、コマンドを作るためのエッセンスを自分なりにまとめて見ました。
取扱説明書も見ながら読んで頂くとより一層わかりやすいと思います!
Ⅰ- 送るデータの種類
送るデータには大きく分けて二種類です。
- ショートパケット:1個のモーターに命令を送る時に用いる。
- ロングパケット:複数のモーターに命令を送る時に用いる。
Ⅱ- ショートパケットの構成
Ⅱ-Ⅰ パケット構成
ショートパケットの構成は以下のようになっています。
[Header]-[ID]-[Flag]-[Address]-[Length]-[Count]-[Data]-[Sum]
Ⅲ-Ⅱ 各パケットの説明
・Header:先頭を表す部分です。値は0xFA,0xAFの2byteです。
・ID:サーボモーターのIDを表す部分です。設定を変更していなければ0x01です。
・Flag:設定を書き込んだり、リターンパケットを要求する際に使う部分です。
・ID:サーボモーターのIDを表す部分です。設定を変更していなければ0x01です。
・Flag:設定を書き込んだり、リターンパケットを要求する際に使う部分です。
モーターを動かす際は0x00にします。
・Address:メモリーマップ上の先頭アドレスを指示する部分です。
・Address:メモリーマップ上の先頭アドレスを指示する部分です。
モーターを動かす際は0x1Eにします。
・Length:[DATA]のバイト数を表す部分です。
・Length:[DATA]のバイト数を表す部分です。
角度のみを指定は0x02、角度と移動時間を指定は0x04です。
・Count:サーボモーターの数を表す部分です。
・Count:サーボモーターの数を表す部分です。
今回はショートパケットを使用するため値は0x01です。
・Data:[Address]で指定したメモリーマップに書き込むデータです。
・Sum:送信データ確認用チェックサムです。
※DataとSumの値はⅢにて記載します。
・Data:[Address]で指定したメモリーマップに書き込むデータです。
・Sum:送信データ確認用チェックサムです。
Ⅲ- DataとSumの値の決め方
Ⅲ-Ⅰ Dataの値
Dataの値には「角度」もしくは「角度+移動時間」を入れます。
1. 角度のみ指定する場合
角度は-150~150度までを0.1度単位で決め、16進数で代入します。
例)-90度まで動かしたい → -900=0xFC7C → [0x7C 0xFC]
120度まで動かしたい → 1200=0x4B0 → [0xB0 0x04]
※2byteで一つのデータは[Lowbyte Highbyte]の順になります。
2. 角度+移動時間を指定する場合
角度に関しては1の「角度のみ指定する場合」と同じです。
移動時間は0~163830msまでを10ms単位で決め、16進数で代入します。
ここで定まった数値を角度データの次にいれます。
例)-90度まで1秒で動かしたい → 100=0x64 → [0x7C 0xFC 0x64 0x00]
120度まで3秒で動かしたい → 300=0x12C → [0xB0 0x04 0x2C 0x01]
角度に関しては1の「角度のみ指定する場合」と同じです。
移動時間は0~163830msまでを10ms単位で決め、16進数で代入します。
ここで定まった数値を角度データの次にいれます。
例)-90度まで1秒で動かしたい → 100=0x64 → [0x7C 0xFC 0x64 0x00]
120度まで3秒で動かしたい → 300=0x12C → [0xB0 0x04 0x2C 0x01]
Ⅲ-Ⅰ Sumの値
Sumの値にはIDからDataまでを1byteずつXORした値が入ります。
いちいち手計算するのもあれなので、Arduinoに計算をやってもらいます。
このプログラムでは120度まで3秒で動かしたい時のSumを出しています。
使い方は、
1.HeaderからDataまでをそろえておきます。
120度まで3秒で動かしたいときは
[0xFA 0xAF 0x01 0x00 0x1E 0x04 0x01 0xB0 0x04 0x2C 0x01]
となります。
2.これをSumCheck配列に入れます。
これだけです!ちなみにこのときSumは0x83となるはずです。
ひとまずコマンドを作ることが出来ました。
次回は今回制作したコマンドを使って実際にモーターを動かしてみたいと思います!
0 件のコメント:
コメントを投稿