名称 | 数量 | 備考 |
本体 | 1 | |
ネジ・ナットキット | 1 | |
Robot Cable-3P 180mm | 1 | |
フレーム | 1 | F2 |
フレーム | 1 | F3 |
ワッシャ | 1 | |
ブッシュ | 1 |
商品番号 | BTX030B | |
ストールトルク | 1.5N•m (at 12V, 1.5A) | |
無負荷回転数 | 59rpm (at 12V) | |
減速比 | 1/254 | |
モータ | コアドモータ | |
出力軸動作範囲 | 位置決め制御時:0~300°(10ビット分解能), Endless Turn | |
電源電圧範囲 | 9~12V (Recommended 11.1V) | |
動作温度範囲 | -5~+70℃ | |
重量 | 54.6g | |
コマンドシグナル | デジタルパケット | |
プロトコル | 半二重非同期通信 8-1-N | |
リンク方式 | TTL Multi Drop(daisy chain type Connector) | |
ID数 | 254 (0~253) | |
通信速度 | 8k~1M bps | |
フィードバック | 位置, 速度, 温度, 負荷, 電源電圧 | |
材質 | ケース | エンプラ |
ギア | ピニオンを除きエンプラ | |
認証 | z |
Pats Name | Molex Parts Number |
基板用ヘッダー | molex 22-03-5035[14] |
ハウジング | molex 50-37-5033[15] |
ターミナル | molex 08-70-1040[16] |
端子番号 | 信号名 |
1 | TTL Signal |
2 | VDD |
3 | GND |
様々な配線方法が考慮されていますので、用途に応じた方法を選択します。
DXHUB[21]とDynamixelを接続する場合は、Robot Cable-X3P 180mm (Convertible)が別途必要です。
なお、電源が供給された状態での配線作業は絶対に避けて下さい。
配線を終え電源を投入すると、正常であればDynamixelの背面上部に装備された赤色のLEDが0.5秒点滅した後消灯します(ホストからLEDの点灯指示等が無いものとする)。
通信を行っていないにもかかわらず電源投入時にLEDが常時消灯ないし常時点灯した場合は、何らかの重大な問題が生じている可能性があります。まず電源を切り、配線方法やケーブル、電源装置を確認して下さい。
LEDが一定周期で点滅し続ける場合は、Dynamixel自身が何かしらの異常を検出した時です。
Dynamixel(スレーブ)自らが勝手にデータを送信することは無く、別途用意されるPC等(マスターないしホスト)から送信されるデータをDynamixelが受信した際にのみデータを返信するといったマスタースレーブ方式を採用しています。また、予め決められた電文に従った(プロトコル)電文にのみ応答します。さらに、その1回分の電文をパケットと言います。
Dynamixelシリーズには2種類の通信プロトコル(1.0と2.0)が存在し、本品はその2種類に対応しています。
Dynamixelは出荷時において個体識別用のID(数字)が全て1に設定されいます。その状態のまま1つのネットワークに複数台接続してしまうと、ホストから個々のDynamixelを識別することができないまでか、全てのDynamixelが自分自身への指令と認識してしまいます。そのため、複数台を接続して使用する際は、必ず予め1台ずつ異なるIDを設定しておきます。
IDを設定する際は先の識別の問題を回避するためホストが提供するネットワークに1台のみのDynamixelを接続し、複数台のDynamixelが接続されていない状態で作業を行う必要があります。
Dynamixelのボーレートは高いほど大量のデータを短時間に送受信できます。しかしながら高いボーレートはケーブルの長さや等の外的要因が相まって、データそのものの信頼性が損なわれる確率が高くなります。
また、複数台のDynamixelを使用する際は、全て同じボーレートに設定しておく必要があります。
Dynamixel内に用意されたメモリ領域をここではコントロールテーブルと称します。コントロールテーブル中の任意のデータにアクセスする手段として通信プロトコロルが用意されています。
ホストから指定されたIDを持ったDynamixelのコントロールテーブルに対して読み書きを行う事で全てを統括するため、先のIDやボーレートもコントロールテーブル上に配置されています。
コントロールテーブルの詳細は後述の表に示します。
Dynamixelは用途に応じて複数の動作モードを選択できます。大きく分けて3つの基本動作を持ちます。
これらの制御の切り替えや制御を行う際の条件の設定は、コントロールテーブル上に配置された様々なパラメータの値を変更することで行います。
Dynamixel DX/RX/EX/AX/MXシリーズ共通の通信プロトコルです。また、Dynamixel XシリーズでプロトコルをV1に切り替えた際にも適用されます。
Dynamixelでは複数のデバイスを同じネットワークに接続して運用する事を前提としているため、各々のデバイスを区別するためにユニークなID番号を用いる事としています。
また、ホストは任意のIDを持ったデバイスを指定して命令し、指定されたIDに一致したデバイスがそれに応答するといったマスタースレーブ方式を採用しています。
なお、複数のデバイスに同じID値が付けられている事は前提としていないため、1つのネットワークに同一IDを持つデバイスが複数存在してはなりません。
デバイスの情報はメモリマップでとして提供されており、それをコントロールテーブルと称します。
複数の情報はコントロールテーブル上の異なるアドレスに割り当てられており、必要に応じてホストから任意のIDを持ったデバイスの任意のアドレスへアクセスします。
ホストとデバイス間は一般的なシリアル通信を行うハードウェアで接続され、パケット単位で処理される共通の通信プロトコルを用いて相互に情報をやりとりします。
ここではホストからデバイスへ送信されるパケットを「インストラクションパケット」、デバイスからホストへ送信されるパケットを「ステータスパケット」と称します。
ホストから送信するインストラクションパケットの主な機能はIDの指定とコントロールテーブルの任意のアドレスへのデータの読み書きとなります。そのパケットに対して応答すべきデバイスから返信されるステータスパケットには、ホストから読み出し要求されたコントロールテーブル内のデータや、書き込み要求に対する整合性の結果などが含まれます。
以後「0x」が付与された英数字は16進数、そうでないものは10進数とみなします。
また、デバイスのコントロールテーブル上のStatus Return Levelによってパケットの有無が異なります。
インストラクションパケットはホストからデバイスへ命令するためのパケットです。
パケット構造は以下の通りで、囲み1つが1byteを意味します。
Instruction | Function | Value | Number of Parameter |
PING | デバイスの死活確認 | 0x01 | 0 |
READ | コントロールテーブルから読み出し | 0x02 | 2 |
WRITE | コントロールテーブルへ書き込み(即時反映) | 0x03 | 2~ |
REG WRITE | コントロールテーブルへ書き込み(保留) | 0x04 | 2~ |
ACTION | REG_WRITEで保留された値を反映 | 0x05 | 0 |
RESET | デバイスのコントロールテーブルを出荷時の値に初期化 | 0x06 | 0 |
SYNC WRITE | 複数デバイスの同一コントロールテーブルへの一括書き込み(即時反映) | 0x83 | 4~ |
SUM = ~(id + LEN + INS + Param1 + … + ParamN)
ステータスパケットはホストから送信されるインストラクションパケットをデバイスが受信した後、その応答としてデバイスからホストへ返信されるパケットです。
パケット構造は以下の通りで、囲み1つが1byteを意味します。
Bit | Name | Description |
7 | - | - |
6 | Instruction Error | 未定義のインストラクションが指定された、もしくはREG WRITEなしでACTIONが指定された |
5 | Overload Error | 指定された最大トルクで現在の負荷を制御できない |
4 | Checksum Error | インストラクションパケットのチェックサムが正しく無い |
3 | Range Error | パラメータの設定範囲を超えた |
2 | Overheating Error | 内部温度が設定温度を超えた |
1 | Angle Limit Error | Angle Limitの範囲外にGoal Positionが指定された |
0 | Input Voltage Error | 電源電圧が指定動作電圧の範囲を超えた |
SUM = ~(id + LEN + INS + Param1 + … + ParamN)
特定のIDを持ったDynamixelの存在を確認します。
IDに254を指定してPINGインストラクションを送信すると、ネットワークに存在する全てのDynamixelが順次ステータスパケットを返します。
例)
INST:ID=1にPINGを発行。
0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x01 ...Instruction
0xFB ...Checksum
STAT:ID=1のDynamixelが応答。
0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x00 ...Error
0xFC ...Checksum
特定IDのデバイスへアドレス・バイトサイズを指定してコントロールテーブルのデータを読み出します。IDは0~253の範囲が指定できます。
Param byte No. | Description |
1 | 開始アドレス |
2 | バイトサイズ(N) |
Param byte No. | Description |
1 | DATA[0] |
2 | DATA[1] |
3 | DATA[2] |
... | ... |
N | DATA[N-1] |
例)
INST:AX-12A想定。ID=1に対しパラメータにAddress=43(0x2B PresentTemperature), Length=2(0x02)を指定してREADを発行。
0xFF 0xFF ...Header
0x01 ...ID
0x04 ...Length
0x02 ...Instruction
0x2B ...開始アドレス
0x01 ...バイトサイズ
0xCC ...Checksum
STAT:8bit幅で現在のPresentTemperature=32(0x20)の値を返信。
0xFF 0xFF ...Header
0x01 ...ID
0x03 ...Length
0x00 ...Error
0x20 ...DATAs
0xDB ...Checksum
特定IDのデバイスへアドレス・データ(任意バイト数)を指定してコントロールテーブルへ書き込みます。IDは0~252の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。
Param byte No. | Description |
1 | 開始アドレス |
2 | |
3 | DATA[0] |
4 | DATA[1] |
5 | DATA[2] |
... | ... |
N+2 | DATA[N-1] |
例)
INST:AX-12A想定。ID=1(0x01)に対しパラメータにAddress=30(0x1E GoalPosition), Data=512(0x0200 16bit幅)を指定してWRITEを発行。
0xFF 0xFF ...Header
0x01 ...ID
0x05 ...Length
0x03 ...Instruction
0x1E ...開始アドレス
0x00 02 ...DATAs
0xD7 ...Checksum
STAT:ID=1のDynamixelが応答。
0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x00 ...Error
0xFC ...Checksum
特定IDのデバイスへアドレス・データ(任意バイト数)を指定してコントロールテーブルへ書き込む点ではWRITEインストラクションと同じですが、その後ACTIONインストラクションが実行されない限りコントロールテーブルへ反映されません。IDは0~253の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。
なお、REG WRITEを受信したデバイスは、コントロールテーブル上のアイテムRegistered Instructionを1にし、ACTIONインストラクションを待機中である事を示します。
Param byte No. | Description |
1 | 開始アドレス |
2 | DATA[0] |
3 | DATA[1] |
4 | DATA[2] |
... | ... |
N+1 | DATA[N-1] |
例)
INST:AX-12A想定。ID=1に対しパラメータにAddress=30(0x1E GoalPosition), Data=200(0x00C8 16bit幅)を指定してREG WRITEを発行。
0xFF 0xFF ...Header
0x01 ...ID
0x05 ...Length
0x04 ...Instruction
0x1E ...開始アドレス
0xC8 0x00 ...DATAs
0x0F ...Checksum
STAT:ID=1のDynamixelが応答。
0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x00 ...Error
0xFC ...Checksum
REG WRITEインストラクションで待機中のデバイスのコントロールテーブルを更新します。IDは0~253の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。
ACTIONを受け取ったデバイスはRegistered Instructionが1であれば0になりますが、0であったデバイスはエラーを返します。
例)
INST:ID=1に対しACTIONを発行。
0xFF 0xFF ...Header
0x01 ...ID
0x03 ...Length
0x05 ...Instruction
0xF6 ...Checksum
STAT:Registered Instructionが1であった場合の正常時の返信。
0xFF 0xFF ...Header
0x01 ...ID
0x02 ...Length
0x00 ...Error
0xFC...Checksum
特定IDのデバイスを出荷時の状態にします。IDは0~253の範囲と254が指定でき、254を指定した場合はステータスパケットが返りません。
例)
INST:ID=0にRESETを発行。
0xFF 0xFF ...Header
0x00 ...ID
0x02 ...Length
0x06 ...Instruction
0xF7 ...Checksum
STAT:正常時の返信
0xFF 0xFF ...Header
0x00 ...ID
0x02 ...Length
0x00 ...Error
0xFD
Parameterに共通のアドレス・共通のバイトサイズ(16bit幅)・複数のIDと各データを指定した1回のインストラクションパケットで、複数のデバイスのコントロールテーブルへ書き込みます。
インストラクションパケットのIDは254固定、パラメータ内のIDは重複しない0~253の範囲をとります。
Param byte No. | Description | |
1 | 開始アドレス | |
2 | バイトサイズ(N) (1以上) | |
3 | 1stデバイス | ID (0~253) |
4 | DATAa[0] | |
5 | DATAa[1] | |
... | ... | |
N+3 | DATAa[N-1] | |
N+4 | 2ndデバイス | ID (0~253) |
N+5 | DATAb[0] | |
N+6 | DATAb[1] | |
... | ... | |
2*N+4 | DATAb[N-1] | |
2*N+5 | 3rdデバイス | ID (0~253) |
2*N+6 | DATAc[0] | |
2*N+7 | DATAc[1] | |
... | ... | |
3*N+5 | DATAc[N-1] | |
... | ... | ... |
0xFF 0xFF ...Header
0xFE ...ID(254固定)
0x18 ...Length
0x83 ...Instruction
0x1E ...開始アドレス
0x04 ...バイトサイズ
0x00 0x10 0x00 0x50 0x01 ...1st ID, DATAs
0x01 0x20 0x02 0x60 0x03 ...2nd ID, DATAs
0x02 0x30 0x00 0x70 0x01 ...3rd ID, DATAs
0x03 0x20 0x02 0x80 0x03 ...4th ID, DATAs
0x12 ...Checksum
以下のDynamixelに共通のコントロールテーブルです。
Dynamixelの機能及び設定は次のメモリマップ上に1バイトないし2バイト(リトルエンディアン)のアイテムとして割り当てられ、インストラクションパケットを使用して操作します。
2バイトに渡るアイテムは1つのインストラクションパケットにおいて同時に書き込まれる必要があります。
Address | Item | Access | Default Value | Range |
0 | Model Number | R | - | uint16 |
1 | ||||
2 | Version of Firmware | R | ? | uint8 |
3 | ID | R/W (NVM) | 1 | uint8 0~253 |
4 | Baudrate | R/W (NVM) | 34 (AXシリーズは1) | uint8 0~254 |
5 | Return Delay Time | R/W (NVM) | 250 | uint8 0~254 |
6 | CW Angle Limit | R/W (NVM) | 0 | uint16 0~1023 |
7 | ||||
8 | CCW Angle Limit | R/W (NVM) | 1023 | uint16 0~1023 |
9 | ||||
10 | (Reserved) | - | - | uint8 |
11 | Highest Limit Temperature | R/W (NVM) | 80 | uint8 10~99 |
12 | Lowest Limit Voltage | R/W (NVM) | 60 | uint8 50~250 |
13 | Highest Limit Voltage | R/W (NVM) | 190 | uint8 50~250 |
14 | Max Torque | R/W (NVM) | 1023 | uint16 0~1023 |
15 | ||||
16 | Status Return Level | R/W (NVM) | 2 | uint8 0~2 |
17 | Alarm LED | R/W (NVM) | 0x24 | uint8 0~127 |
18 | Alarm Shutdwon | R/W (NVM) | 0x24 | uint8 0~127 |
19 | (reserved) | - | - | uint8 |
20 | Down Calibration | R | ? | uint16 |
21 | ||||
22 | Up Calibration | R | ? | uint16 |
23 | ||||
24 | Torque Enable | R/W | 0 | uint8 0~1 |
25 | LED | R/W | 0 | uint8 0~1 |
26 | CW Compliance Margin | R/W | 1 | uint8 0~254 |
27 | CCW Compliance Margin | R/W | 1 | uint8 0~254 |
28 | CW Compliance Slope | R/W | 32 | uint8 1~254 |
29 | CCW Compliance Slope | R/W | 32 | uint8 1~254 |
30 | Goal Position | R/W | [Addr36]value | uint16 0~1023 |
31 | ||||
32 | Moving Speed | R/W | 0 | uint16 0~2047 |
33 | ||||
34 | Torque Limit | R/W | [Addr14]value | uint16 0~1023 |
35 | ||||
36 | Present Position | R | - | uint16 |
37 | ||||
38 | Present Speed | R | - | uint16 |
39 | ||||
40 | Present Load | R | - | uint16 |
41 | ||||
42 | Present Voltage | R | - | uint8 |
43 | Present Temperature | R | - | uint8 |
44 | Registered Instruction | R | 0 | uint8 0~1 |
45 | (reserved) | - | - | uint8 |
46 | Moving | R | 0 | uint8 |
47 | Lock | R/W | 0 | uint8 0~1 |
48 | Punch | R/W | 32 | uint16 0~1023 |
49 |
モデル固有の値を保持します。異なる種類のDynamixelを混在して使用する際の個体識別などに使用できます。
内蔵されるCPUに書き込まれたプログラムのバージョンです。ファームウェアの更新を行った際に合わせて自動的に変更されます。
各Dynamixelを特定するための固有の値で0~253の範囲の数値で設定します。同一ネットワーク内に存在するDynamixelには各々異なるIDが要求されます。
通信速度を決める分周値で、通信速度は次式で導かれます。
Baudrate[bps] = 2000000[bps] / (Value + 1)
主なBaudrate
Value | Actual Baudrate[bps] | Specified Baudrate[bps] | Error[%] |
1 | 1000000.0 | 1000000 | 0.000 |
3 | 500000.0 | 500000 | 0.000 |
4 | 400000.0 | 400000 | 0.000 |
7 | 250000.0 | 250000 | 0.000 |
9 | 200000.0 | 200000 | 0.000 |
16 | 117647.1 | 115200 | -2.124 |
34 | 57142.9 | 57600 | 0.794 |
103 | 19230.8 | 19200 | -0.160 |
207 | 9615.4 | 9600 | -0.160 |
※ホストとのボーレートの誤差は±2%以下が要求されます。
インストラクションパケットが送られた後、ステータスパケットを返すまでの待ち時間を設定します。
ホストにおいて半二重のバス制御のタイミングに合わせて調整しますが、DXHUB[62]を使用する限りでは0を設定しても問題ありません。
Delay Time [us] = Value * 2 [us]
動作角の範囲です。Goal Positionは以下の範囲に設定する必要があります。
CW Angle Limit <= Goal Position <= CCW Angle Limit
Goal Positionが動作角のリミットを越えると、Angle Limit Errorが起こります。
CW Angle Limit及びCCW Angle Limitを両方0に設定するとEndless Turnモードになります。
Present Temperatureがこの値を超えるとOverheating Errorの該当ビットがONになります。
Temperature [degC] = Value * 1 [degC]
Present Voltageがこの値の範囲を超えるとInput Voltage Errorの該当ビットはONになります。
Voltage [V] = Value * 0.1 [V]
最大出力トルクの初期値です。起動直後にこの値がTorque Limitへコピーされ、以後使用されません。
単位は最大出力に対する割合です。Max Torqueが512なら最大出力対比約50%、1023なら100%が出力の上限となります。
ステータスパケットを返信するインストラクションパケットを選択します。
Value | Instruction to respond |
0 | Ping |
1 | Ping, Read |
2 | Ping, Read, Write, Reg Write, Reset |
対応するビットを1に設定すると、エラーが発生した時にステータスLEDが点滅します。
すべてのビットのOR論理演算に従って動作します。例えば0x05が設定されていたら、Input Voltage ErrorかOverheating Errorが起こったときにLEDが点滅します。
Bit | Name | Description |
7 | - | - |
6 | Instruction Error | 未定義のインストラクションが指定された、もしくはreg_writeなしでactionが指定された |
5 | Overload Error | 指定された最大トルクで現在の負荷を制御できない |
4 | Checksum Error | インストラクションパケットのチェックサムが正しく無い |
3 | Range Error | パラメータの設定範囲を超えた |
2 | Overheating Error | 内部温度が設定温度を超えた |
1 | Angle Limit Error | Angle Limitの範囲外にGoal Positionが指定された |
0 | Input Voltage Error | 電源電圧が指定動作電圧の範囲を超えた |
対応するビットを1に設定すると、エラーが発生した時にTorque Limitを0に設定し、モータの出力を遮断します。
エラーが発生した後、正常状態に戻ってもTorque Limitは0が維持されますので、Torque Limitに値を再設定する必要があります。
Bit | Name | Description |
7 | - | - |
6 | Instruction Error | 未定義のインストラクションが指定された、もしくはreg_writeなしでactionが指定された |
5 | Overload Error | 指定された最大トルクで現在の負荷を制御できない |
4 | Checksum Error | インストラクションパケットのチェックサムが正しく無い |
3 | Range Error | パラメータの設定範囲を超えた |
2 | Overheating Error | 内部温度が設定温度を超えた |
1 | Angle Limit Error | Angle Limitの範囲外にGoal Positionが指定された |
0 | Input Voltage Error | 電源電圧が指定動作電圧の範囲を超えた |
ポテンショメータの誤差を補うのに使用されるデータです。ユーザは変更できません。
電源を入れた時、出力軸はフリーの状態です。Torque Enableを1に設定するとトルクが有効になります。 Goal Positionを指定した場合も1になります。
Dynamixelはコンプライアンスを設定することで出力軸に柔軟性を持たせます。グラフはポジションと出力の相関を表し、A~Dは各コンプライアンス値です。
A : CCW Compliance Slope
B : CCW Compliance Margin
C : CW Compliance Margin
D : CW Compliance Slope
E : Punch
出力軸が動く際の回転数を指定します。
Velocity [rpm] = Value * 0.111 [rpm]
但し該当モデルの最大回転数以上では動作しません。0に設定すると供給電圧で可能な最大速度になります。
Endless Turnモードで使用する場合はEndless Turn参照。
最大出力の上限値です。
単位は最大出力に対する割合です。Max Torqueが512なら最大出力対比約50%、1023なら100%が出力の上限となります。
電源を入れるとMax Torqueの値を初期値として使用します。
出力軸の現在位置です。出力軸0~300°に対し、0~1023の値をとります。
Endless Turnモードでは300~360°の間は不定値となります。
出力軸の現在の角速度です。10番目のビットは回転方向を表します。
Present Speed [rpm] = Value * 0.111 [rpm]
Endless Turnモードの場合はEndless Turn参照。
Bit | 15~11 | 10 | 9~0 |
Value | 0 | Direction | Speed |
Direction = 0 : CCW, Direction = 1 : CW
出力に基づいて算出された負荷の大きさです。10番目のビットは負荷の方向です。
単位は最大出力に対する割合です。512ならCCW方向に最大出力対比約50%、1023なら100%の負荷となります。
Bit | 15~11 | 10 | 9~0 |
Value | 0 | Direction | Load |
Direction = 0 : CCW, Direction = 1 : CW
現在供給されている電圧です。値は電圧(V)の10倍値です。例えば10Vは100となります。
内部温度(℃)です。例えば30℃は30です。
REG_WRITEコマンドでインストラクションが格納されたとき1になり、ACTIONコマンドでインストラクションが完了したら0になります。
供給された電力で出力軸が回転しているときに1、それ以外は0が設定されます。外力によって出力軸が動いても1にはなりません。
1を設定するとコントロールテーブルの不揮発エリア(アドレス0~23)が書き換え不能になります。ロックの解除するには電源を入れ直す必要があります。
CW Angle LimitとCWW Angle Limitを0に設定することで、車輪のような役割として使用できるEndless Turnモードになります。Moving Speedで回転速度を指定します。
Endless TurnモードでのMoving Speed及びPresent Speedは、最大出力に対する出力の割合です。512ならCCW方向に最大出力対比約50%、1023なら100%の出力で制御します。負荷の大きさによって回転速度は変わります。
Moving Speedの設定
Bit | 15~11 | 10 | 9~0 |
Value | 0 | Turn Direction | Speed |
Trun Direction = 0 : CCW, Trun Direction = 1 : CW
(This host) = https://www.besttechnology.co.jp