【English】

XBUSサーボプロトコル仕様概略

●はじめに

JR PROPO(以下、弊社)製XBUSサーボモータ(以下、XBUSサーボ)にご興味をお持ちいただき、ありがとうございます。XBUSサーボ プロトコル仕様概略(以下、本ドキュメント)は、XBUSサーボをRC用途以外でもお気軽にお使い頂けるよう、そのプロトコルについて公開し、様々なホビー用途にお使いいただくための便宜を図る目的で作成されました。今後、様々な形状のXBUSサーボがリリースされていく予定ですが、それらは基本的に統一されたプロトコルで動作できるように設計される予定ですので、用途に応じてご選択いただけるものと考えております。近年の高性能なマイコン基板を使い、多くのXBUSサーボを接続して、様々な作品が生み出されていくことを願っております。

●注意事項

● 本ドキュメントは、XBUSサーボのプロトコル仕様概略です。このドキュメントに掲載されていない部分については、今後の拡張の事もあり現時点では全て予約済みとします。

● 本ドキュメントは、製品改良等及びドキュメント改良等のため予告なく変更されることがあります。

● 本ドキュメントは、状況に応じて非公開になる場合があります。

● 本ドキュメントの無断転載は、最新情報更新の妨げになる場合が多いですのでお控えください。但し、本ドキュメントを基にした解説等の公開や、その際に必要な正しい引用については無論問題ございません。むしろ、歓迎いたします。もしよろしければ、その際は参照用として弊社webページへのリンク等を掲示していただければ幸いです。

● 本ドキュメントに関連するトラブル等については、弊社は一切の責任を負わないものとします。なお、製品について修理等が必要な場合には、弊社サービス部宛に通常の修理品としてご依頼頂ければ随時対応いたします。

●XBUSサーボ仕様追補

各XBUSサーボの一般的な製品仕様については弊社web及びカタログ等をご覧ください。ここではそれらカタログ等に掲載されていない部分についての説明を行います。
XBUSサーボは、電源投入時すぐに内部の初期化を行いますが、以下の条件のどちらかが成立するまでは、モータへ通電しません。

● 正しいシリアルコマンドを受け取り、かつ位置の指示がなされた時
● 正しいRC系PWM信号(以下、PWM信号)を一定数連続して受け取った時(現時点では50パルス以上)

一旦シリアルコマンドを受け取って動作開始したXBUSサーボは、電源がオフになるまでシリアルコマンドで動作し、PWM信号を一切受け取らなくなります。また、一旦PWM信号で動作開始した場合は、電源がオフになるまでPWM信号で動作し、シリアルコマンドを一切受け取らなくなります。
動作開始後、通電したままでシリアルコマンド、もしくはPWM信号が途切れた場合、約1.5秒後に脱力します。なおこの設定は変更でき、脱力しないようにもできます。

なお、即時脱力を行いたい場合、シリアルコマンドであれば動作角度に0を指示することで、すぐに脱力します。

●XBUSサーボ バグ情報及び改良情報

ここでは既知のバグについての説明を行います。もし、旧バージョンにおけるバグでトラブルが発生する場合は、大変お手数で申し訳ございませんが、前述の弊社XBUSサーボ専用メールアドレスまでメール頂けましたら、対処いたします。

現時点で判明しているバグ情報、改良情報は、以下のとおりです。

バージョン問題発生箇所詳 細
0x06**特になしJR PROPOブランド移管、ZakLab製コードに変更
0x05**特になし制御アルゴリズム改良
0x04**特になしスロースタートの速度変更、ブラシレス対応開始
0x03**特になし
0x02**信号レベルシリアルパケットの終わりで信号レベルが一瞬奇妙なレベルになる
0x01**Current Position脱力時、範囲外の位置に出力軸が回転していると、値が裏返る

●ハードウェアについて

< シリアルバス関連仕様 >

XBUSサーボをマイコン等のホストに搭載されたUART等(以下、ホストUART)で駆動する場合の、ハードウエア条件は以下のとおりです。1線半二重である他は、ごく普通のTTLシリアル信号です。

3.3V TTL 1線 半二重通信(ホストUARTは通常TXモード)
8bit, 1 start bit, 1 stop bit, non parity, LSB first
Idle Hi Level
250kbps BER under 1%

< 信号線仕様 >

信号ケーブルは通常のRC用サーボと同じものであり、各配線の役割も同じです。また、コネクタも通常のRC用と同じものです。

< 諸注意 >

  • パケット送受信に用いるホストUARTの出力には、万が一に備え保護抵抗として100Ωから1kΩ程度を信号に直列に入れておくのが望ましいです。ただし、信号線の浮遊容量が大きい場合には、小さめの保護抵抗にしないと波形が歪み、パケット抜けや動作停止(正常なパケットが到着しないことによる脱力等)が発生しますので、ご注意ください。
  • 状況によっては、ホストUARTにのみ100kΩ程度のプルアップを設置する方が、動作が安定する場合があります。特に後述のTX、RXの切り替え時にバスが中途半端な電圧になってしまう場合には、プルアップしておくことをお勧めします。
  • ホストUARTの信号線に保護抵抗が入っている場合に限り、5V出力のシリアル信号を受け取ることは可能ですが、XBUSサーボ側は保護抵抗及び保護ダイオードによるクランプとなるため、あまりお勧めしません。また、その場合でもXBUSサーボから返される信号は3.3Vのシリアル信号となります。
  • 比較的高速なシリアルバスのため、キャパシタを用いたフィルタ類は一切厳禁とします。オープンドレイン、オープンコレクタの使用も推奨しません。pF単位の容量でも影響を及ぼすことがあるため、配線には注意してください。長距離を伝送する必要がある場合には、適宜双方向バッファ等の設置が望ましいです。
  • 通信が途中で破断した場合に備え、信号線がアイドル状態になった事を検知してリカバーするシステムが組んであります。アイドルであるかどうかの判定は、スタートビット発生後10ビット分信号がハイのままの時に判定されます。正規の信号は8bitパリティなし1ストップビットです。ですので、0xFFを送信する場合において、次の1バイトのスタートビットが概ね0.5bit分以上の遅延をした場合、アイドル状態と判定されパケットの受信に失敗する可能性がありますので、ご注意ください。

●ソフトウェアについて

< 概 略 >

このプロトコルは、基本的にバイト列で形成されたパケットを用いて通信を行うシステムです。パケットの内容により、XBUSサーボから応答のパケットが返ってくるものと、返ってこないものがあります。

全てのパケットには、末尾にCRCが設定されており、その正当性が担保されます。XBUSサーボ内部においては、CRCエラーが出たパケットは全て破棄されます。また、ホストが受領したパケットについては、ホスト側にてCRCの確認をするのが望ましいです。

各XBUSサーボには後述の方法でチャンネルIDを設定できます。チャンネルIDは、一連のXBUSの接続の中では、全てユニークでなければなりません。なお、チャンネルIDの設定は、トラブルを回避する観点で事前に個別にホストUARTに接続して行うのが望ましいです。

パケットには大きく分けて2種類あり、XBUSサーボの角度指示を行うチャンネルデータパケットと、その他の各種設定を行うコマンドデータパケットがあります。コマンドデータパケットについては、さらにいくつかの種類があります。

通常の使い方としては、ホストUARTはTXモードに設定しておき、PWM信号のように間欠的にXBUSサーボに対してチャンネルデータパケットを送り続ける形になります。XBUSサーボは、送り続けられる角度指示に従い続けます。

同一のバスに同一のチャンネルIDを持つXBUSサーボを複数接続することは、プロトコル上問題が出る場合がありますので基本的に禁止していますが、異なるチャンネルIDを持つXBUSサーボを、後述のサブIDを活用することで4個まで連動させることが可能です。

コマンドデータパケットを用いることで、原則として任意のタイミングで任意のXBUSサーボに対してその設定を変更することができます(一部例外あり)。また、同じく任意のタイミングで任意のステータスを確認することもできます。ただし、1線半二重ですので、バスの管理には注意が必要です。

< チャンネルデータパケット >

XBUSサーボへの角度指示を行います。本パケットのバイト列は以下のとおりです。

バイト列オフセット名 前定 義
0Command0xA4
1Length2項からCRC8の手前までのバイト数
2Key0x00
3Type0x00
4-0CH-ID→解説1
4-1CH-Function0x00
4-2CH-Data-High→解説2
4-3CH-Data-Low→解説2
(4項 繰り返し)→解説3
CRC8→解説4

なお、本パケットに対するXBUSサーボからの応答パケットは発生しないので、ホストUARTはパケット送信後もTX状態のままで構いません。
基本的には、接続されている全てのXBUSサーボに対する角度指示を一つのパケットに内包し、一括送信する形になります。しかし、XBUSサーボは本パケット内に自身宛のデータが無くてもエラーとは判定しませんので、例えば複数パケットに別々のチャンネルIDの角度指示を載せる等して、分割して送信することも可能です。

【 解説 1 】チャンネルIDについて

各XBUSサーボには、それぞれにユニークな8bitのチャンネルIDが割り振られますが、これは以下のような構造になっています。

チャンネルデータパケットで指定できるのはサーボIDのみであり、サブIDは0を指定します。チャンネルデータパケットを受け取ったXBUSサーボは、XBUSサーボ自身のサブIDに何番が指定されていようと、サーボIDが一致する指示に従います。
後述する個々のXBUSサーボの各種設定については、サブIDを含めたチャンネルIDの一致で動作するため、これにより最大4個までのXBUSサーボが、同一のサーボIDによって同期的に動作することが可能になります。

製品出荷時のチャンネルIDは0x01です

【 解説 2 】指示値について

High Lowの2byteで位置指示を行います。この値は、従来のPWM信号の概念を踏襲しており、以下のような値で指示します。XBUSサーボは概ね850-2150uSecの範囲で動作するようになっています。それ以外の範囲での角度指定については、脱力します。

ただし、後述のリミット値が設定されている場合、その値よりも外側の指示についてはリミット値でクリップされるため、設定によっては脱力せず、リミット位置で停止します。現時点では、リミット値が工場出荷時に800-2200で設定されているため、事実上リミット値は無効になっています。

【 解説 3 】繰り返しについて

本パケットは不定長であり、ユーザが必要とするチャンネル数分のデータを内包した形で1個のパケットとして送信できます。ただし、同じサーボIDは複数指定できないため、サーボIDの最大数(50個分)が限度となります。

繰り返す場合は4項の4バイト分を一塊として繰り返す形になりますので、それぞれチャンネルIDと指示値が繰り返し表記される形になります。

本パケット内では、チャンネルIDは連続していてもいなくても構いませんし、チャンネルIDの順番にも特に制限はありません。

基本的にXBUSサーボはパケットの先頭から順番に自身のサーボIDを探しますので、長いパケットの場合は最初と最後でミリセカンドレベルのタイミング差が出る可能性があります。

XBUSサーボ自身が持つバッファサイズを超えるパケットが送信された場合、たとえCRCが正常であってもエラーになります。その結果、当該パケットは無視され次のパケットを待つモードに戻ります。その際なんらかのステータスが返送されるわけではありませんのでご注意ください。基本的に各XBUSデバイスは最低でも16個分のデータを受信できるだけのバッファを持っています。XBUSサーボにおいては、通常50個分のデータを受信できるだけのバッファを持っています。

【 解説 4 】CRC8について

本パケットに適用されるCRC式は以下のとおりです。CRCの範囲は、パケットの先頭からCRC手前までのバイト全部です。本ドキュメント末尾にサンプルソースを掲載しましたので、参考になさってください。

X8 + X5 + X4 + 1

全てのパケットにおいてCRCのチェックを行いますので、ホスト側のコードを書く上では重要なポイントの一つになります。

< コマンドデータパケット >

XBUSサーボへの各種設定を行います。本パケットのバイト列は以下のとおりです。

バイト列名 前定 義
0Command→解説1
1Length2項からCRC8の手前までのバイト数
2Key0x00
3CH-ID→解説2
4Order→解説3
5-0Data 1→解説3
5-1Data 2→解説3
6CRC8→解説4

なお、本パケットに対しては、後述する一部の例外を除き、基本的にXBUSサーボから後述のStatus Commandを用いた応答パケットが発生しますので、ホストUARTはパケット送信完了後速やか(数uSec程度)にTXを開放してRXに切り替え、Status Commandパケット受信の準備をしてください。

ただし、ホストUART内部に送信バッファを持つ場合、確実にパケットのバイト列が送信完了していることを確認してから切り替えを行わないと、XBUSサーボがパケットを全て受信できず、エラーになる場合があります。

現時点では明確なタイムアウトは設定されていませんが、遅くとも14mSec以内に何らかの反応がなければ、失敗したものと見做して構いません。

【 解説 1 】コマンドについて

本パケットは、以下の3つのコマンドに適用されます。

0x20 Set Command 後述するオーダーに沿った値を設定するコマンド
0x21 Get Command 後述するオーダーに沿った値を読み出すコマンド
0x22 Status Command 応答に使われるコマンド(ユーザ使用不可)

ホストがSet Command、またはGet Commandを送信すると、XBusサーボは後述するオーダーに沿った作業を行い、その結果として基本的には同じオーダー/同じバイト数のStatus Commandを応答してきます。

XBUSサーボから送信されたStatus Commandは、通常当該オーダーに関する現状の値を返してきます。Set Commandに対する応答の場合、状況によっては、設定しようとした値ではなくXBUSサーボ側での限界値にクリップされた値で帰ってくることがあります。

XBUSサーボが対応できないオーダーだった場合、後述のUnsupported Orderに変更されたStatus Commandが返ってきます。この場合、Data2は存在しませんので、元のオーダーによってはバイト数が1バイト少ないサイズで返ってくることに注意してください。

このように、Status Commandのパケットサイズは変化する可能性がありますので、必ず受信中の2バイト目で判断して受信長を決めるようにしてください。

【 解説 2 】チャンネルIDについて

前項のチャンネルIDと同仕様ですが、ここではサブIDも適用されます。従って、最大200個のXBUSサーボを相手にできますが、本コマンドは応答が前提であることもあり、1個のXBUSサーボにつき毎回1パケットを必要とします。

また、Set Commandついては、ここに0x00を指定するとすべてのチャンネルIDを持つXBUSサーボに対して効力を持ちます。このケースに限っては、StatusCommandを用いた応答パケットは発生しません。なお、誤ってGet Command に0x00を指定してしまっても、応答はありませんのでご注意ください。

ご注意
複数のXBUSサーボが接続された状態で、チャンネルIDに0x00を指定したID変更やリセット関係のオーダーを実行すると、全てのXBUSサーボが同じチャンネルIDになってしまいます。その後のチャンネルIDを指定したコマンドデータパケットに対しては、それぞれがほぼ同時に応答してしまってバスが混乱するので注意してください。

【 解説3 】オーダー、データについて

オーダー、データに関する役割等は以下のとおりです。本パケットでは、オーダーによってはData2が存在せず、パケット全体のバイト数も変化することに注意してください。2バイトのデータについては、特に断りがない限りData1が上位バイト、Data2が下位バイトとなります。また、基本的に符号付データとして扱います。

一部のオーダーを除き、基本的に全てのオーダーは後述のOperate Modeにて動作し、指示に成功すれば即座に動作に反映されます。

基本的に、Parameter Writeコマンドを送信しない限り、パラメータはROM領域には記録されません。但し、後述のようにいくつかの動作については例外的に即時書き込まれるので注意してください。

なお、XBUSサーボは通常のPWM信号でも動作しますが、その際以下のオーダーにて設定された内容は反映されません。

Reverse、Neutral、Travel High、Travel Low、Limit High、Limit Low

Order名 前Data意 味初期値備考
0x01Mode1XBUSサーボのモード切替を行う。現時点で有効なモードは以下のとおり
0x01 Operate Mode
0x02 ID Setting Mode
0x01
0x03ID1チャンネルIDを指示した値に変更する。
Mode OrderにてID Setting Modeに切替えた時のみ有効となる。
本オーダー実行後は、自動的にOperate Modeへ移行し、新しいチャンネルIDで動作するとともに、ROM領域へ自動で記録される。
CH-IDを0x00に設定することで、不明なチャンネルIDを持つXBusサーボでも設定できる。
0x01
0x04Version2ファームウエアバージョンを返す機種毎get only
0x05Product2機種番号(別表2参照)機種毎get only
0x06Unsupported1Status Command専用のオーダー。
ホストが送信したオーダーを受け付ける事が出来ない場合にXBUSサーボから返ってくる。
この際、データには対応できなかったオーダーが返される。
——don’t use
0x07Parameter Reset2下記別表1のIndexで指定したパラメータを初期値に戻す。——set only
0x08Parameter Write2下記別表1のIndexで指定したパラメータをROM領域へ書き込む。——set only
0x10Reverse20x0000 通常動作
0x0001 左右反転動作
0x0000
0x11Neutral2ニュートラル位置(1500uSec)に対するオフセットを指定する。±600の範
囲で指定できる。主に複数XBUSサーボの同期連動時補正に使用する。
0
0x12Travel High2ニュートラル位置(1500uSec)よりも上の領域において、角度指示を拡大する。通常128、最大192まで指定できる。主に複数XBUSサーボの同期連動時補正に使用する。128
0x13Travel Low2ニュートラル位置(1500uSec)よりも下の領域において、角度指示を拡大する。通常128、最大192まで指定できる。主に複数XBUSサーボの同期連動時補正に使用する。128
0x14Limit High2角度指示できる最大値。Limit Low未満には設定できない。無理に設定しても、自動的にLimit Lowに修正される。0xFFFF
0x15Limit Low2角度指示できる最小値。Limit Highより大きくは設定できない。無理に設定しても、自動的にLimit Highに修正される。0x0000
0x16P Gain1XBUSサーボが持つPゲインに対する増減値。±50の範囲で指定できる。0
0x17I Gain1XBUSサーボが持つIゲインに対する増減値。±50の範囲で指定できる。0
0x18D Gain1XBUSサーボが持つDゲインに対する増
減値。±50の範囲で指定できる。
0
0x19Dead Band1XBUSサーボが持つデッドバンドに対する増減値。±10の範囲で指定できる。0
0x1ABoost2XBUSサーボが持つブースト値に対する増減値。±999の範囲で指定できる。0
0x1BAlarm Level1XBUSサーボからアラームが発せられるパワー閾値。0-100%で指定できる。アラームが発せられると、モータ音が変化する。機種毎
0x1CAlarm Delay2XBUSサーボからアラームが発せられるまでの遅延時間を指定できる。この時間が経過しない範囲で閾値から下がれば、警告されない。0-5000mSecまで指定できる。機種毎
0x1DAngle10x00 通常動作(最大角120度)
0x01 最大角180度(一部の機種では、180度に到達しない場合がある)
機種毎
0x1ESlow Start10x00 起動後、すぐに通常動作する。
0x01 起動時、最初に取り込んだ指示位置までゆっくり移動する。ただし、
移動中に指示位置が変化した場合、その時点から通常動作に戻る。
機種毎
0x1FStop Mode10x00 通常動作(角度指示が途絶えると1秒前後で脱力する)
0x01 ホールド動作(角度指示が途絶えると直前の位置を維持する)
0x00
0x20Current Position2現在の出力軸の位置を返す。静止していても、指示位置と一致しているとは限らないので注意すること。また、Travel HighやTravel Lowの値が変更されていると、指示値に比べそれらに応じた倍率の値が返ってくる事になるので注意すること。
なお、Versionの上位が0x01のものについては、バグ情報を参照のこと。
——get only
0x21Current Power1現在モータへ掛けているパワーを返す。0-100%の値を示す。——get only
0x22Speed Limit10 通常動作
1-30 速度制限モード(1が最も遅い)
機種毎
0x23Max Integer2ゲインの積分値リミッタに対する増減値。±999の範囲で指定できる。0

別表1 Parameter Reset、Parameter WriteにおけるIndex

Index 名 前適 用備 考
0x0001All Data with IDreset onlyCH-IDを0x00にする必要がある。
ROM領域へ自動で記録される。リセットに成功すると、チャンネルIDはデフォルトに戻る。
0x0002All Data without IDreset only
0x0003Servo IDreset onlyCH-IDを0x00にする必要がある。
ROM領域へ自動で記録される。リセットに成功すると、チャンネルIDはデフォルトに戻る。
0x0004Reverseboth
0x0005Neutralboth
0x0006Travel Highboth
0x0007Travel Lowboth
0x0008Limit Highboth
0x0009Limit Lowboth
0x000AP Gainboth
0x000BI Gainboth
0x000CD gainboth
0x000DDead Bandboth
0x000EBoostboth
0x000FAlarm Levelboth
0x0010Alarm Delayboth
0x0011Angleboth
0x0012Slow Startboth
0x0013Stop Modeboth
0x0014Speed Limitboth
0x0015Max Integerboth

別表2 Productにおける[ 応答値 / サーボ機種名 ]

■ JR PROPO / DFA model

[0x021A/E555XBUS] [0x02A3/S8477BL] [0x0297/S8911BL-2K] [0x0295/S8955SS-2K] [0x029C/S8944] [0x0293/S8912SHV-2K] [0x0299/S8914SHV-2K] [0x292/S3911-2K] [0x028A/S3411-2K] [0x029D/S3415-2K] [0x029B/S1855-2K]

■ 旧JR PROPO model

[0x0200/NX8921] [0x0201/NX3421] [0x0202/NX588] [0x0203/NX8925] [0x0204/NX3425] [0x0205/NX6421] [0x0206/NXR89] [0x0207/NXR34] [0x0208/NXB8921] [0x0209/NXB8925] [0x020A/NXB89G] [0x020B/NX8931] [0x020C/NX8935] [0x020E/NX35G] [0x020F/NX396] [0x0210/NX319] [0x0211/NX189]

【 解説 4 】CRC8について

本パケットに適用されるCRC式は、前項と同じく以下のとおりです。CRCの範囲は、パケットの先頭からCRC手前までのバイト全部です。本ドキュメント末尾にサンプルソースを掲載しましたので、参考になさってください。

X8 + X5 + X4 + 1

全てのパケットにおいてCRCのチェックを行いますので、ホスト側のコードを書く上では重要なポイントの一つになります。

< パケット送信間隔について >

通常、XBUS用RC受信機においてはこれらのパケットを14mSec間隔で送出しています。原則としてパケットの送信間隔はこれが標準ですが、XBUSサーボの実力値としては、さらに間隔を詰めた送信を行うことが可能です。

ただし、どこまで詰めることができるのかについては機種によって異なる可能性がありますので、将来に渡って保障可能な間隔も14mSecとします。

この問題は、特にチャンネルデータパケットにおいて重要になります。XBUSサーボに高速な反応を期待する場合、指示値を出力するペースを速くする必要があるからです。

何チャンネル分のデータを一つのパケットに載せて送信するのかによっても、どこまで詰めることができるのかは変化します。チャンネル数が少なければ、パケット一つに必要な処理時間が短くなるからです。

パケット送信間隔を短くしすぎた場合、先行パケットの処理が終わらないうちに後続パケットが到着してしまう可能性があります。この場合、後続パケットはロストすることになりますが、再度パケット取得に復帰するには、ロストパケット送信終了後、最低でも1バイト分以上のアイドル時間が必要となる事に注意してください。

参考例ですが、現行機種で実験した場合、4チャンネル分のデータを載せたパケットで、1.5mSec程度の送信ペースで問題なく動作した実例があります。この場合、パケットの理論的な時間は0.84mSecになり、パケット間隔は0.66mSecになります。

同様に50個分のデータを載せたチャンネルデータパケットの時間は、理論値で8.2mSecとなります。仮に60フレーム/秒で動作させた場合、フレームレートは16.67mSecとなりますので、一般的なモーション動作には充分に間に合う計算になります。

ただし、これらの理論値はあくまでホストUARTからの送信がビット列的に最密で送信された場合であり、ホストUARTのプログラミングによっては、バイト間に隙間ができてしまう等、所定の性能が出ない可能性がある事に注意してください。

なお、現行機種のXBUSサーボ制御周期は1mSecですので、1mSecよりも短縮することには意味がありません。但し、将来の機種においてはこの限りではありません。

● XBUS設定器 エキスパードモード マニュアル

ここではXBUS設定器のエキスパートモードについて解説します。

< エキスパートモード起動方法 >

XBUS設定器に電源を供給する際、下ボタンを押したまま起動するとエキスパートモードに入ります。起動直後はなんら違いがありませんが、ファンクションの量がかなり増えており、設定可能な項目が増やされています。

< エキスパートモード使用方法 >

通常の使用方法と同じです。設定可能な項目が増えていますが、全て前述のオーダーに関して設定するコトが可能になっています。

● 参考

< CRC8算出用サンプルソース >

static uint8_t s_crc_array[256] =
{
0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,
0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,
0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,
0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,
0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,
0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,
0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,
0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,
0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,
0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,
0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,
0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,
0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,
0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,
0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,
0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,
0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,
0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd,
0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,
0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,
0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,
0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,
0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,
0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,
0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,
0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,
0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,
0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,
0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,
0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,
0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35,
};

static uint8_t crc_table(uint8_t data, uint8_t crc)
{
uint16_t index = (data ^ crc) & 0xff;
crc = s_crc_array[index];
return crc;
}

uint8_t crc8(uint8_t * buffer, uint8_t length)
{
uint8_t crc = 0;

while (length– > 0)
crc = crc_table(*buffer++, crc);
return crc;
}

< チャンネルIDの変更方法について >

チャンネルIDの変更については、不慮のトラブルをできるだけ避けるため、以下の手順でないと変更されないようになっています。単純にIDオーダーを送信しただけでは変更されませんので、ご注意ください。

1. XBUSサーボへModeオーダーを送信し、ID Setting Modeに移行させる
2. XBUSサーボへIDオーダーを送信し、IDを変更する(この段階で自動的に元のモードに戻る)

< 受信機のXBUSポートについて>

弊社XBUS対応プロポ及び受信機をご使用の場合、XBUSモードをモードAにした時点で、プロポの操作に合わせ、受信機のXBUSポートから本ドキュメントで述べたコマンドが送出されています。

基本的に、14mSecのインターバルでチャンネルデータパケットが送出され続けており、プロポからXBUS対応サーボへのパラメータ調整が行われる場合はコマンドデータパケットが送出されます。

この際、いくつかの注意点がありますので、受信機のXBUSポートをご利用の際はご注意ください。

  • チャンネルデータパケットは、最大でも16チャンネル分の枠しかありません。17チャンネル以上のプロポの場合、後半4チャンネル分のみ入れ替わり挿し代わりで違うチャンネルへのデータになったりします。必ずどのID向けのデータかを確認し、データの位置で判断しないようにしてください。
  • 受信機やリモートアンテナの機種によっては、パケットの最後、CRCの手前に2バイトのダミーデータが挿入されている場合があります。これは無用のデータですので、無視してください。
  • チャンネル数の少ない受信機であっても、XBUSパケットは送信機からのデータをそのまま流しています。
  • プロポにおけるスティック操作等のデフォルトは±100%となっており、これはサーボにおいては±40度(120度動作時)または±60度(180度動作時)を意味します。最大の動作量を必要とする場合は、±150%とすることで±60度(120度動作時)または±90度(180度動作時)まで動かすことができるようになりますので、必要に応じてプロポのトラベルアジャストを変更してください。

< XBUSコンバーターについて >

XBUSサーボに混在して従来のPWMサーボを使用したい場合、弊社ではコンバーターをご用意しております。ただし、コンバーターについては対応する機能が限定されており、以下の機能のみ作動します。

  • チャンネルデータパケットの全機能(但し、16チャンネル分まで)
  • コマンドデータパケットの以下のオーダー

➢ Mode、ID、Version、Unsupported、Parameter Reset、Parameter、Write、Reverse、Neutral、Travel High、Travel Low

また、4ポートのコンバーターの場合、初期状態やチャンネルIDのリセット等を行った直後は、サーボIDに全て1、サブIDにそれぞれ0から3の値がセットされます。

なお、コンバーターが出力するPWM波形は20mSec間隔で固定されているため、それより高速にパケットを送信しても対応できません。速くても14mSec間隔程度でのご使用をお願いします。

< 同一関節を複数のXBUSサーボを用いて構成する場合 >

二足歩行ロボットの一部でよく見られるリンク形状の脚(以下、リンク脚)を構築する場合や肩のROLL軸等、複数のサーボを連動させてトルクアップを図るケースがありますが、この場合、XBUSサーボを用いると非常に簡単に設定できます。

XBUSサーボでは、サブIDを用いて最大4個までのXBUSサーボを連動させることができますので、たとえばリンク脚の各軸にそれぞれ同一サーボIDで異なるサブIDのXBUSサーボを装備する方法がお勧めです。

フレーム組み立て中、各XBUSサーボにリバース、ニュートラル位置、最大角(トラベル)を設定し、個々のXBUSサーボのズレ等を調整すれば、概ね同期して動作することになります。この調整値は、書き込みオーダーさえ送ってしまえば個々のXBUSサーボが内部に記録し、電源を切っても覚えていますので、一度設定してしまえば、あとはメンテナンス等で再調整する以外は再設定の必要はありません。

モーション送信時は、当該サーボID+サブIDをゼロにした単一のチャンネルIDにてデータを送れば良く、同一サーボIDの最大4個ともまとめて駆動することが可能です。ですので、チャンネルデータパケット生成の負担や、モーション作成時のデータ的な負担を軽減することが可能になります。

< ホストUARTのTXのみでの使用について >

本来、XBUSサーボは1線半二重でのやり取りを前提に設計されています。そのため、ホストUARTには半二重通信のための送受信切り替えが必要であり、場合によっては外部回路が必要な場合があります。しかし、以下の条件に合致すれば、ホストUARTのRXを使用せず、切り替え回路も不要で、TXのみで動作させることが可能です。

  • 動作中、XBUSサーボの状況を一切確認しない。
  • XBUSサーボへの設定を行うときは、個別に接続して行う。
  • 複数のXBUSサーボが接続された状態では、一切コマンドデータパケットを送信しない。つまり、事前に全てのXBUSサーボの設定を済ませておきさえすれば、チャンネルデータパケット自身はRXを使用しないので、TXのみで動作させられる事になります。簡易的に動作させたい場合は、こちらがお勧めです。

< XBUSサーボに使用しているマイコンについて >

現時点では、XBUSサーボにはNXP社(旧Freescale社)のMKL16シリーズを48MHzで駆動して使用しています。従いまして、現時点での各ポートの厳密な電圧レベル等は、当該マニュアルの参照をお願いします。但し、今後の製品についてはその限りではありませんので、あまり厳密な電圧レベルに依存した使い方はお勧めしません。

MKL16マイコンのファームにはセキュリティが掛かっており、無闇に読み出そうとすると、チップの仕様により内部が全てクリアされますのでご注意ください。クリアされた場合、一切動作しなくなります。復活させるにはファームウエアの再書き込み等、修理が必要になります。修理の際は、クリアなさった旨のご申告がないと、基板異常と判断の上、基板そのものの交換作業が発生し高額な修理になる可能性がありますので、ご注意ください。

参考までに、マイコンの信号入力部分の回路略図を掲載します。

Copyright JR PROPO all rights reserved.

【 XBUSサーボライブラリ 】は下のバナーをクリック

お買い物カゴ
上部へスクロール