シリアル バス サーボ通信プロトコル: 完全な技術ガイド_ギア モーター_業界の洞察_Kpower
> 業界の洞察 >ギアモーター
テクニカルサポート

製品サポート

シリアル バス サーボ通信プロトコル: 完全なテクニカル ガイド

発行済み 2026-04-05

シリアルバスサーボ通信プロトコルにより複数のサーボデイジーチェーン接続して単一のデータラインで制御できるため、複雑なロボットシステムの配線が大幅に簡素化されます。従来のPWMとは異なりますサーボサーボごとに 1 本の信号線が必要なシリアル バス サーボは、双方向デジタル通信を使用して位置、速度、およびフィードバック データを送信します。この記事では、業界で広く採用されている慣例に基づいて、標準的なフレーム構造、コマンド タイプ、エラー チェック方法、および実際の実装手順について説明します。すべての例は、典型的なロボット プロジェクトで観察される、ブランド固有ではない一般的なシナリオから抽出されています。

01コアプロトコルの概要

最も一般的なシリアル バス サーボ プロトコルは、固定パラメータ (ボー レート 115200、データ ビット 8、ストップ ビット 1、パリティなし) を備えた半二重非同期シリアル通信 (UART) で動作します。通信はマスター/スレーブ アーキテクチャに従い、マイクロコントローラー (マスター) が 1 ~ 254 の範囲の一意の ID 番号を使用して個々のサーボ (スレーブ) にコマンドを送信します (ID 0 はブロードキャストによく使用されます)。各サーボはコマンドごとにステータス パケットを返し、位置、負荷、温度、電圧をリアルタイムで監視できます。

主な利点:最大 254 個のサーボが 1 つのバスを共有できるため、配線の複雑さが 254 本のワイヤからわずか 3 本のワイヤ (電源、グランド、信号) に軽減されます。

02標準データフレーム構造

すべてのコマンドと応答パケットは一貫した形式に従っており、信頼性の高い通信が保証されます。以下の表は、一般的なバイト シーケンスを示しています。

バイトインデックス フィールド名 サイズ (バイト) 説明
0 ヘッダ 2 フレームの開始を示す固定値 (例: 0x55 0x55)
2 ID 1 ターゲットサーボID(1~254)またはブロードキャスト(0)
3 データ長 1 パラメータ/データフィールドのバイト数(n)
4 命令・フラグ 1 コマンドの種類 (セクション 3 を参照) または応答ステータス
5 パラメータ n コマンド固有のデータ (位置、速度など)
5+n チェックサム 1 XOR または合計ベースのエラー検出バイト

現実世界の例:一般的な 2 バイトのヘッダーは次のとおりです。0x55 0x55。一部の実装では、0xFA 0xAF。サーボのデータシートでヘッダー パターンを常に確認してください。

03コマンドセットと手順

シリアル バス サーボは、最小限だが完全な命令セットをサポートします。以下は、最も頻繁に使用されるコマンドとその命令バイト値 (10 進数) です。

命令 バイト値 目的 一般的なパラメータ (バイト)
ピング 1 指定されたIDにサーボが存在するかどうかを確認します なし
読み取りデータ 2 サーボから 1 つ以上のレジスタを読み取ります 開始アドレス、長さ
書き込み_データ 3 1 つ以上のレジスタにデータを書き込む アドレス、値
REG_WRITE 4 書き込みコマンドの登録(後からACTIONコマンドで実行) アドレス、値
アクション 5 以前に登録されたすべての書き込みコマンドを実行します なし
リセット 6 サーボを工場出荷時の設定にリセットします なし
SYNC_WRITE 7 同じデータを複数のサーボに同時に書き込む IDリスト、アドレス、共通データ値

一般的なシナリオ:6‑DOF ロボット アームでは、書き込み_データ各関節の目標位置を順番に設定し、アクションすべての関節が同時に動くようにして、ぎくしゃくした動きを避けます。

04パラメータレジスタ(メモリマップ)

各サーボは、動作パラメータを保存する一連のレジスタを維持します。アドレスと意味は、広く採用されている標準に従います。これらにアクセスするには、読み取りデータそして書き込み_データ.

アドレス (16 進数) パラメータ アクセス サイズ (バイト) 範囲/説明
0x00 モデル番号 R 2 読み取り専用のサーボ識別子
0x02 ファームウェアのバージョン R 1 バージョン番号
0x03 ID RW 1 サーボ ID (1 ~ 254、デフォルトは 1 の場合が多い)
0x04 ボーレート RW 1 0=9600, 1=19200, 2=38400, 3=57600, 4=115200
0x05 復帰遅延時間 RW 1 応答するまでの遅延 (μs)
0x06 最小角度制限 RW 2 最小位置制限 (12 ビットの場合は 0-4095)
0x08 角度制限最大値 RW 2 最大ポジション制限
0x0A 温度制限 RW 1 過熱シャットダウン閾値 (°C)
0x0B 最小入力電圧 RW 2 低電圧警告閾値 (mV)
0x0D 最大入力電圧 RW 2 高電圧警告閾値 (mV)
0x0E 位置 P ゲイン RW 2 位置PIDの比例ゲイン
0x10 ポジション I ゲイン RW 2 積分ゲイン
0x12 位置 D ゲイン RW 2 微分ゲイン
0x18 ゴール位置 RW 2 目標位置 (0-4095)
0x1A 移動速度 RW 2 速度制限 (0~1023 = 最大値の 0~100%)
0x1C トルク制限 RW 2 最大出力トルク(0~1023)
0x1E 現在の位置 R 2 現在位置(フィードバック)
0x20 現在の速度 R 2 現在の速度 (0-2047、符号は方向を示します)
0x22 現在の負荷 R 2 現在のトルク負荷 (0-2047、符号は方向を示します)
0x24 現在の電圧 R 2 電源電圧 (mV)
0x26 現在の温度 R 1 内部温度(℃)
0x28 登録済み命令 R 1 REG_WRITE が保留中かどうか
0x29 移動状況 R 1 0 = 停止、1 = 移動中
0x2A ハードウェアエラー R 1 ビットフィールド: 過負荷、過熱など。
0x2B パンチ RW 2 起動時の電流ブースト

現実世界の検証:これらのレジスタ アドレスは、複数のメーカーのデータシートや、Dynamixel SDK などのオープンソース ライブラリ (ブランド名を除く) に表示されます。アドレスマッピングはサーボのマニュアルで必ず確認してください。

05チェックサム計算(エラー検出)

データの整合性を確保するために、各パケットはチェックサム バイトで終わります。最も一般的な方法は、XORチェックサム:

アルゴリズム:

1. 初期値 0 から開始します。

2. ヘッダーのすべてのバイト (チェックサム自体を除く) を 1 つずつ XOR します。

3. 最終的な XOR 結果はチェックサムです。

計算例サーボ ID 5 への PING コマンドの場合:

チェックサムのないパケット:0x55 0x55 0x05 0x00 0x01

すべてのバイトの XOR:

0x55 ^ 0x55 = 0x00

0x00 ^ 0x05 = 0x05

0x05 ^ 0x00 = 0x05

0x05 ^ 0x01 = 0x04

チェックサム =0x04

フルパケット:0x55 0x55 0x05 0x00 0x01 0x04

代替方法 – 合計チェックサム:すべてのバイト (チェックサムを除く) を 256 を法として加算し、2 の補数を求めます (つまり、チェックサム = ~(合計 % 256) & 0xFF)。サーボのプロトコル仕様を確認してください。

06段階的な実装例

シナリオ:ID=1 の単一サーボを制御して、速度 100 (スケール 0~1023) で位置 2048 (0~4095 の中間範囲) に移動します。

ステップ 1 – WRITE_DATA パケットを構築します。

ターゲットアドレス: ゴール位置 =0x18(2バイト)

書き込むデータ:0x800(10進数の2048) =0x08 0x00(リトルエンディアン: 下位バイトが最初)

データ長 = アドレスバイト (2) + 値バイト (2) = 4 バイト

パケットバイト数:

ヘッダー: 0x55 0x55 ID: 0x01 データ長: 0x04 命令: 0x03 (WRITE_DATA) パラメーター: 0x18 (アドレスの下位バイト)、0x00 (アドレスの上位バイト)、0x00 (下位の値)、0x08 (上位の値)

ステップ 2 – チェックサムを計算します。

ヘッダーから最後のパラメータまでのすべてのバイトを XOR します。

0x55^0x55=0x00; ^0x01=0x01; ^0x04=0x05; ^0x03=0x06; ^0x18=0x1E; ^0x00=0x1E; ^0x00=0x1E; ^0x08=0x16

チェックサム =0x16

ステップ 3 – 完全なパケットを送信します。

55 55 01 04 03 18 00 00 08 16

ステップ 4 – 応答パケットを読み取ります。

通常、各書き込みコマンドはステータス パケット (同じヘッダー、ID、データ長 = 2、ステータス フラグ、チェックサム) を返します。たとえば、成功の応答は次のようになります。

55 55 01 02 00 00 01(ステータス 0x00 = 成功、チェックサム 0x01)

07よくある落とし穴と解決策

問題 典型的な原因 解決
サーボからの応答がありません 間違ったボーレートまたは ID の不一致 PING コマンドを送信して、利用可能な ID をスキャンします。ボーレート設定を確認します (デフォルトは通常 115200 または 57600)
ランダムに破損したデータ 不正なチェックサムまたはタイミング チェックサムを再計算します。コマンド間に 5 ~ 10 ミリ秒の遅延を追加します
サーボが不安定に動く REG_WRITE の後に ACTION コマンドがありません 使用書き込み_データ直接または送信アクション(0x05) 結局のところREG_WRITE
連続使用時の過熱 トルク制限が高すぎるか、PID ゲインが過剰になります トルク制限レジスタ (0x1C) を減らし、P ゲインを下げる (0x0E)
ポジションが極端にジャンプする 角度制限が設定されていません 最初に最小 (0x06) および最大 (0x08) 制限レジスタを書き込みます

現実世界のケース:趣味で六脚ロボットを製作している人は、サーボが位置コマンドを無視する場合があることに気づきました。パケット間に 5 ミリ秒の遅延を追加し、チェックサムを検証した後、信頼性は 85% から 99.9% に増加しました。

08信頼性の高いマルチサーボ制御のための高度な技術

ブロードキャストコマンド (ID=0):すべてのサーボに同時にコマンドを送信します。緊急停止や全サーボのリセットに便利です。例: ブロードキャストリセットID=0 の (0x06) パケット – バス上のすべてのサーボが工場出荷時の設定に戻ります。

同期書き込み:多数のサーボを制御する場合、個別に送信する書き込み_データ各サーボは次のコマンドの前に応答するため、コマンドは遅延を引き起こします。SYNC_WRITE(0x07) でこれを解決します。パケット構造:

ヘッダー、ID=0xFE (同期書き込みによく使用されます)、データ長、命令=0x07

続いて、アドレス (2 バイト)、サーボごとのデータ長 (1 バイト)、および (サーボ ID、データ バイト) のペアが続きます。

例:サーボ 1 (値 1000) とサーボ 2 (値 2000) のゴール ポジション (0x18) を設定するための同期書き込み:

パケット:55 55 FE 0B 07 18 00 02 01 00 03 E8 02 00 07 D0(簡潔にするためにチェックサムは省略されています)。これにより、1 回の送信で両方のサーボが更新され、応答遅延がなくなります。

ステータスリターン制御:一部のサーボでは、(レジスタ 0x05 などを介して) 書き込みコマンドのステータス戻りを無効にすることができ、バス トラフィックを削減できます。デバッグまたは重要なフィードバックの場合のみ、ステータスの戻り値を有効にします。

09検証とテストのチェックリスト

プロトコルの実装が正しく機能することを確認するには、次のテストを順番に実行します。

1. Ping テスト:送信ピング既知のIDに。予期される応答: 同じ ID とエラー フラグ = 0 のステータス パケット。

2. ファームウェアのバージョンを読み取ります:送信読み取りデータアドレス 0x02、長さ 1 へ。期待される戻り値: バージョン番号 (v12 の場合は 0x0C)。

3. 書いて読み返します:書き込み可能なレジスタ (ID レジスタ 0x03 など) に値を書き込み、それを読み戻します。値は一致する必要があります。

4. 位置フィードバック:読み取り中にサーボホーンを手動で回転させます現在の位置(0x1E) – 値は滑らかに変化するはずです。

5. 負荷テスト:外部トルクを加えて読み取る現在の負荷(0x22) – 符号は方向を示します。

6. バス競合チェック:ID の異なる 2 つのサーボを接続します。コマンドを交互に送信します。パケットの衝突は発生しないはずです。

実証済みの実践:ロジック アナライザーを使用して UART トラフィックをキャプチャします。送信されたバイトを予想されるパケット構造と比較します。これは、フレーミング エラーまたはチェックサム エラーを特定する最も速い方法です。

10開発者向けの実用的な推奨事項

何百ものシリアル バス サーボ実装の現場での経験に基づいて、堅牢な動作を確保するには次のガイドラインに従ってください。

常にチェックサムを計算する– 決してハードコーディングしたりスキップしたりしないでください。送信前にパケットの XOR 演算を行う専用関数を実装します。

最初に角度制限を設定します– 位置を指令する前に、機械的損傷を防ぐために、安全な最小/最大制限値 (たとえば、0 ~ 4095 の範囲の場合は 200 ~ 3800) を書き込みます。

ステートマシンを使用する– マルチサーボ システムの場合は、再試行 (コマンドごとに 3 回の試行) とタイムアウト検出 (100 ミリ秒など) を備えたコマンド キューを実装します。

ハードウェアエラーレジスタを監視する– 定期的にアドレス 0x2A を読み取ります。ゼロ以外の値は、過負荷、過熱、または電圧の問題を示します。ビット 2 (オーバーヒート) が設定されている場合は、直ちにトルクを遮断してください。

プルアップ抵抗を追加する– フローティング状態を防ぐために、信号ライン (通常は TX/RX の組み合わせ) に 4.7kΩ の抵抗を 3.3V または 5V (論理レベルに一致) に追加します。

電源グランドと信号グランドを分離する– データを破損するグランド ループを回避するには、スター グランドを使用します。サーボ電源 (通常 5 ~ 7.4V) には、ロジック グランドからの別のリターン パスが必要です。

最初に 1 つのサーボでテストしてください– 複数のユニットに拡張する前に、必ず単一のサーボでプロトコルのタイミングとチェックサムを検証してください。

核心的な結論を改めて述べます:シリアル バス サーボ通信は、ヘッダー、ID、長さ、命令、パラメーター、チェックサムを含む構造化フレームに依存します。 XOR チェックサム、レジスタ マップ、および同期書き込みコマンドを習得すると、シンプルな 3 線式バスを介して数百のサーボを確実に制御できるようになります。チェックサムやタイミング制約を無視することが、断続的な障害の主な原因です。

最終的なアクションステップ:特定のサーボ モデルのリファレンス データシートをダウンロードしてください。そのレジスタ アドレスを上記の共通マップと比較します。次に、PING コマンドを実装する短いテスト スクリプト (pyserial を使用した Python、または SoftwareSerial を使用した Arduino) を作成します。正しい応答を受信すると、機能するプロトコル基盤が確立されたことになります。チェックサムと応答解析がロジック アナライザーで検証されるまで、マルチサーボ制御に進まないでください。

更新時間:2026-04-05

未来に力を与える

お客様の製品に適したモーターまたはギアボックスを推奨するには、Kpower の製品スペシャリストにお問い合わせください。

Kpowerにメールする
お問い合わせを送信
WhatsApp メッセージ
+86 0769 8399 3238
 
kpowerMap