2: 2009-07-02 (木) 13:50:53 sho ソース 3: 2009-07-03 (金) 13:11:29 sho ソース
Line 3: Line 3:
16ビットデータレジスタは(L)と(H)の2バイトで表されます。両方のバイトが1つのインストラクションパケットにおいて同時に書き込まれる必要があります。 16ビットデータレジスタは(L)と(H)の2バイトで表されます。両方のバイトが1つのインストラクションパケットにおいて同時に書き込まれる必要があります。
|Address|Item|Access|Initial Value| |Address|Item|Access|Initial Value|
-|0 (0x0)|Model Number(L)|R|28 (0x1C)| +|0 (0x0)|[[Model Number(L)>#f9679b00]]|R|28 (0x1C)| 
-|1 (0x1)|Model Number(H)|R|0 (0x00)| +|1 (0x1)|[[Model Number(H)>#f9679b00]]|R|0 (0x00)| 
-|2 (0x2)|Version of Firmware|R|?| +|2 (0x2)|[[Version of Firmware>#c0b99f75]]|R|?| 
-|3 (0x3)|ID|R/W|1 (0x01)| +|3 (0x3)|[[ID>#afcb4273]]|R/W|1 (0x01)| 
-|4 (0x4)|Baudrate|R/W|34 (0x22)| +|4 (0x4)|[[Baudrate>#a99cb9a8]]|R/W|34 (0x22)| 
-|5 (0x5)|Return Delay Time|R/W|250 (0xFA)| +|5 (0x5)|[[Return Delay Time>#h9279b18]]|R/W|250 (0xFA)| 
-|6 (0x6)|CW Angle Limit (L)|R/W|0 (0x00)| +|6 (0x6)|[[CW Angle Limit (L)>#r26ada5a]]|R/W|0 (0x00)| 
-|7 (0x7)|CW Angle Limit (H)|R/W|0 (0x00)| +|7 (0x7)|[[CW Angle Limit (H)>#r26ada5a]]|R/W|0 (0x00)| 
-|8 (0x8)|CCW Angle Limit (L)|R/W|255 (0xFF)| +|8 (0x8)|[[CCW Angle Limit (L)>#r26ada5a]]|R/W|255 (0xFF)| 
-|9 (0x9)|CCW Angle Limit (H)|R/W|3 (0x03)|+|9 (0x9)|[[CCW Angle Limit (H)>#r26ada5a]]|R/W|3 (0x03)|
|10 (0xA)|(Reserved)|-|0 (0x00)| |10 (0xA)|(Reserved)|-|0 (0x00)|
-|11 (0xB)|Highest Limit Temperature|R/W|80 (0x50)| +|11 (0xB)|[[Highest Limit Temperature>#pf1cedb0]]|R/W|80 (0x50)| 
-|12 (0xC)|Lowest Limit Voltage|R/W|60 (0x3C)| +|12 (0xC)|[[Lowest Limit Voltage>#p813d1f0]]|R/W|60 (0x3C)| 
-|13 (0xD)|Highest Limit Voltage|R/W|190 (0xBE)| +|13 (0xD)|[[Highest Limit Voltage>#p813d1f0]]|R/W|190 (0xBE)| 
-|14 (0xE)|Max Torque (L)|R/W|255 (0xFF)| +|14 (0xE)|[[Max Torque (L)>#sa69d1ab]]|R/W|255 (0xFF)| 
-|15 (0xF)|Max Torque (H)|R/W|3 (0x03)| +|15 (0xF)|[[Max Torque (H)>#sa69d1ab]]|R/W|3 (0x03)| 
-|16 (0x10)|Status Return Level|R/W|2 (0x02)| +|16 (0x10)|[[Status Return Level>#fc051727]]|R/W|2 (0x02)| 
-|17 (0x11)|Alarm LED|R/W|36 (0x24)| +|17 (0x11)|[[Alarm LED>#m1f363e1]]|R/W|36 (0x24)| 
-|18 (0x12)|Alarm Shutdwon|R/W|36 (0x24)|+|18 (0x12)|[[Alarm Shutdwon>#aa4c7882]]|R/W|36 (0x24)|
|19 (0x13)|(Reserved)|RW|0 (0x00)| |19 (0x13)|(Reserved)|RW|0 (0x00)|
-|20 (0x14)|Down Calibration (L)|R|?| +|20 (0x14)|[[Down Calibration (L)>#d4af5057]]|R|?| 
-|21 (0x15)|Down Calibration (H)|R|?| +|21 (0x15)|[[Down Calibration (H)>#d4af5057]]|R|?| 
-|22 (0x16)|Up Calibration (L)|R|?| +|22 (0x16)|[[Up Calibration (L)>#d4af5057]]|R|?| 
-|23 (0x17)|Up Calibration (H)|R|?| +|23 (0x17)|[[Up Calibration (H)>#d4af5057]]|R|?| 
-|24 (0x18)|Torque Enable|R/W|0 (0x00)| +|24 (0x18)|[[Torque Enable>#m041ac16]]|R/W|0 (0x00)| 
-|25 (0x19)|LED|R/W|0 (0x00)| +|25 (0x19)|[[LED>#k6f31590]]|R/W|0 (0x00)| 
-|26 (0x1A)|CW Compliance Margin|R/W|1 (0x00)| +|26 (0x1A)|[[CW Compliance Margin>#ac00ee58]]|R/W|1 (0x00)| 
-|27 (0x1B)|CCW Compliance Margin|R/W|1 (0x00)| +|27 (0x1B)|[[CCW Compliance Margin>#ac00ee58]]|R/W|1 (0x00)| 
-|28 (0x1C)|CW Compliance Slope|R/W|32 (0x20)| +|28 (0x1C)|[[CW Compliance Slope>#ac00ee58]]|R/W|32 (0x20)| 
-|29 (0x1D)|CCW Compliance Slope|R/W|32 (0x20)| +|29 (0x1D)|[[CCW Compliance Slope>#ac00ee58]]|R/W|32 (0x20)| 
-|30 (0x1E)|Goal Position (L)|R/W|[Addr36]value| +|30 (0x1E)|[[Goal Position (L)>#ee2d2463]]|R/W|[Addr36]value| 
-|31 (0x1F)|Goal Position (H)|R/W|[Addr37]value| +|31 (0x1F)|[[Goal Position (H)>#ee2d2463]]|R/W|[Addr37]value| 
-|32 (0x20)|Moving Speed (L)|R/W|0 (0x00)| +|32 (0x20)|[[Moving Speed (L)>#i69bf70b]]|R/W|0 (0x00)| 
-|33 (0x21)|Moving Speed (H)|R/W|0 (0x00)| +|33 (0x21)|[[Moving Speed (H)>#i69bf70b]]|R/W|0 (0x00)| 
-|34 (0x22)|Torque Limit (L)|R/W|[Addr14]value| +|34 (0x22)|[[Torque Limit (L)>#sa69d1ab]]|R/W|[Addr14]value| 
-|35 (0x23)|Torque Limit (H)|R/W|[Addr15]value| +|35 (0x23)|[[Torque Limit (H)>#sa69d1ab]]|R/W|[Addr15]value| 
-|36 (0x24)|Present Position (L)|R|?| +|36 (0x24)|[[Present Position (L)>#g40fd002]]|R|?| 
-|37 (0x25)|Present Position (H)|R|?| +|37 (0x25)|[[Present Position (H)>#g40fd002]]|R|?| 
-|38 (0x26)|Present Speed (L)|R|?| +|38 (0x26)|[[Present Speed (L)>#ra254ee8]]|R|?| 
-|39 (0x27)|Present Speed (H)|R|?| +|39 (0x27)|[[Present Speed (H)>#ra254ee8]]|R|?| 
-|40 (0x28)|Present Load (L)|R|?| +|40 (0x28)|[[Present Load (L)>#k921f4f9]]|R|?| 
-|41 (0x29)|Present Load (H)|R|?| +|41 (0x29)|[[Present Load (H)>#k921f4f9]]|R|?| 
-|42 (0x2A)|Present Voltage|R|?| +|42 (0x2A)|[[Present Voltage>#o9dde163]]|R|?| 
-|43 (0x2B)|Present Temperature|R|?| +|43 (0x2B)|[[Present Temperature>#yb6e508c]]|R|?| 
-|44 (0x2C)|Registered Instruction|R/W|0 (0x00)|+|44 (0x2C)|[[Registered Instruction>#x5982be7]]|R/W|0 (0x00)|
|45 (0x2D)|(Reserved)|-|0 (0x00)| |45 (0x2D)|(Reserved)|-|0 (0x00)|
-|46 (0x2E)|Moving|R|0 (0x00)| +|46 (0x2E)|[[Moving>#jf0f3fa1]]|R|0 (0x00)| 
-|47 (0x2F)|Lock|R/W|0 (0x00)| +|47 (0x2F)|[[Lock>#bb3a2a7c]]|R/W|0 (0x00)| 
-|48 (0x30)|Punch (L)|R/W|32 (0x20)| +|48 (0x30)|[[Punch (L)>#f79fd083]]|R/W|32 (0x20)| 
-|49 (0x31)|Punch (H)|R/W|0 (0x00)|+|49 (0x31)|[[Punch (H)>#f79fd083]]|R/W|0 (0x00)|
**各アイテムの詳細 [#bb158fce] **各アイテムの詳細 [#bb158fce]
--''Address 0, 1 (0x00, 0x01) Model Number''~+***Address 0, 1 (0x00, 0x01) Model Number [#f9679b00]
モデルナンバーです。 モデルナンバーです。
--''Address 2 (0x02) Version of Firmware''~+***Address 2 (0x02) Version of Firmware [#c0b99f75]
ファームウェアのバージョンです。 ファームウェアのバージョンです。
--''Address 3 (0x03) ID''~+***Address 3 (0x03) ID [#afcb4273]
各Dynamixelを特定するための固有のIDナンバーです。同じネットワークの各Dynamixelに異なるIDが必要です。 各Dynamixelを特定するための固有のIDナンバーです。同じネットワークの各Dynamixelに異なるIDが必要です。
--''Address 4 (0x04) Baudrate''~+***Address 4 (0x04) Baudrate [#a99cb9a8]
通信速度を決定します。以下の公式で計算します。~ 通信速度を決定します。以下の公式で計算します。~
Baudrate[BPS]=2000000 / (value + 1)~ Baudrate[BPS]=2000000 / (value + 1)~
Line 81: Line 81:
注意: ±3%以下の許容誤差が一般に通信可能な範囲です。 注意: ±3%以下の許容誤差が一般に通信可能な範囲です。
--''Address 5 (0x05) Return Delay Time''~+***Address 5 (0x05) Return Delay Time [#h9279b18]
インストラクションパケットが送られた後、ステータスパケットが返ってくるまでの時間です。遅延時間は2uSec * Address5の値です。 インストラクションパケットが送られた後、ステータスパケットが返ってくるまでの時間です。遅延時間は2uSec * Address5の値です。
--''Address 6, 7, 8, 9 (0x06, 0x07, 0x08, 0x09) CW Angle Limit, CCW Angle Limit''~+***Address 6, 7, 8, 9 (0x06, 0x07, 0x08, 0x09) CW Angle Limit, CCW Angle Limit [#r26ada5a]
Dynamixelの動作角を設定します。Goal Positionは以下の範囲にある必要があります。~ Dynamixelの動作角を設定します。Goal Positionは以下の範囲にある必要があります。~
CW Angle Limit <= Goal Position <= CCW Angle Limit~ CW Angle Limit <= Goal Position <= CCW Angle Limit~
Goal Positionが動作角のリミットを越えると、Angle Limit Errorが起こります。 Goal Positionが動作角のリミットを越えると、Angle Limit Errorが起こります。
--''Address 11 (0x0B) Highest Limit Temperature''~+***Address 11 (0x0B) Highest Limit Temperature [#pf1cedb0]
Dynamixelの動作温度の上限です。Dynamixelの内部温度がこの値より高くなるとOverheating Errorが起こります。値は℃です。 Dynamixelの動作温度の上限です。Dynamixelの内部温度がこの値より高くなるとOverheating Errorが起こります。値は℃です。
--''Address 12, 13 (0x0C, 0x0D) Lowest Limit Voltage, Highest Limit Voltage''~+***Address 12, 13 (0x0C, 0x0D) Lowest Limit Voltage, Highest Limit Voltage [#p813d1f0]
Dynamixelの動作電圧の上限下限です。現在の電圧(Address42)が指定した範囲から出ると、Input Voltage Errorが起こります。値は実際の電圧の10倍です。例えばAddress12が80なら、電圧の下限は8Vに設定されます。 Dynamixelの動作電圧の上限下限です。現在の電圧(Address42)が指定した範囲から出ると、Input Voltage Errorが起こります。値は実際の電圧の10倍です。例えばAddress12が80なら、電圧の下限は8Vに設定されます。
--''Address 14, 15, 34, 35 (0x0E, 0x0F, 0x22, 0x23) Max Torque, Torque Limit''~+***Address 14, 15, 34, 35 (0x0E, 0x0F, 0x22, 0x23) Max Torque, Torque Limit [#sa69d1ab]
Dynamixelの最大トルク出力です。この値が0に設定されるとDynamixelはトルクがかかっていないFree Runモードになります。EEPROM(Address14, 15)とRAM(Address34, 35)の2つに最大トルクが定義されます。電源を入れるとEEPROMの最大トルク値がRAMの最大トルク値にコピーされます。DynamixelのトルクはRAM(Address34, 35)の値によって制限されます。 Dynamixelの最大トルク出力です。この値が0に設定されるとDynamixelはトルクがかかっていないFree Runモードになります。EEPROM(Address14, 15)とRAM(Address34, 35)の2つに最大トルクが定義されます。電源を入れるとEEPROMの最大トルク値がRAMの最大トルク値にコピーされます。DynamixelのトルクはRAM(Address34, 35)の値によって制限されます。
--''Address 16 (0x10) Status Return Level''~+***Address 16 (0x10) Status Return Level [#fc051727]
インストラクションパケットを受けた後にDynamixelがステータスパケットを返すかどうかを決定します。 インストラクションパケットを受けた後にDynamixelがステータスパケットを返すかどうかを決定します。
|Adress16|ステータスパケット| |Adress16|ステータスパケット|
Line 106: Line 106:
Broadcast ID(0xFE)を使ったインストラクションの場合は、Address16の値に関わらずステータスパケットを返しません。 Broadcast ID(0xFE)を使ったインストラクションの場合は、Address16の値に関わらずステータスパケットを返しません。
--''Address 17 (0x11) Alarm LED''~+***Address 17 (0x11) Alarm LED [#m1f363e1]
対応するBitが1に設定されると、Errorが起こったときにステータスLEDが点滅します。 対応するBitが1に設定されると、Errorが起こったときにステータスLEDが点滅します。
|Bit|Function| |Bit|Function|
Line 119: Line 119:
すべてのビットのOR論理演算に従って動作します。例えば0x05が設定されていたら、Input Voltage ErrorかOverheating Errorが起こったときにLEDが点滅します。エラー状態から正常状態に戻るとLEDは2秒後に点滅を止めます。 すべてのビットのOR論理演算に従って動作します。例えば0x05が設定されていたら、Input Voltage ErrorかOverheating Errorが起こったときにLEDが点滅します。エラー状態から正常状態に戻るとLEDは2秒後に点滅を止めます。
--''Address 18 (0x12) Alarm Shutdown''~+***Address 18 (0x12) Alarm Shutdown [#aa4c7882]
対応するビットが1に設定されていて、エラーが発生するとDynamixelのトルクがオフになります。Alarm LEDとは異なり、Errorが発生した後、正常状態に戻ってもトルクオフの状態が維持されます。復帰するためにはTorque Enable(Address24)を1に再設定しなければなりません。 対応するビットが1に設定されていて、エラーが発生するとDynamixelのトルクがオフになります。Alarm LEDとは異なり、Errorが発生した後、正常状態に戻ってもトルクオフの状態が維持されます。復帰するためにはTorque Enable(Address24)を1に再設定しなければなりません。
|Bit|Function| |Bit|Function|
Line 131: Line 131:
|Bit0|1に設定されていたら、Input Voltage Errorが起こるとトルクをオフにします| |Bit0|1に設定されていたら、Input Voltage Errorが起こるとトルクをオフにします|
--''Address 20~23 (0x14~0x17) Down Calibration, Up Calibration''~+***Address 20~23 (0x14~0x17) Down Calibration, Up Calibration [#d4af5057]
Dynamixelで使用されるPotentiomerterの誤差を補うのに使用されるデータです。ユーザーはこのデータを変更できません。 Dynamixelで使用されるPotentiomerterの誤差を補うのに使用されるデータです。ユーザーはこのデータを変更できません。
以下はRAMエリアです。~ 以下はRAMエリアです。~
--''Address 24 (0x18) Torque Enable''~+***Address 24 (0x18) Torque Enable [#m041ac16]
最初に電源を入れるとDynamixelはTorque Free Run(ゼロトルク)になります。Address24に1を設定するとトルクが有効になります。 最初に電源を入れるとDynamixelはTorque Free Run(ゼロトルク)になります。Address24に1を設定するとトルクが有効になります。
--''Address 25 (0x19) LED''~+***Address 25 (0x19) LED [#k6f31590]
1が設定されるとLEDが点灯し、0が設定されると消灯します。 1が設定されるとLEDが点灯し、0が設定されると消灯します。
--''Address 26~29 (0x1A~0x1D) CW Compliance Margin, CCW Compliance Margin, CW Compliance Slope, CCW Compliance Slope''~+***Address 26~29 (0x1A~0x1D) CW Compliance Margin, CCW Compliance Margin, CW Compliance Slope, CCW Compliance Slope [#ac00ee58]
Dynamixelのコンプライアンスは、コンプライアンスのMarginとSlopeを設定することで定義されます。この特徴は出力軸で衝撃を吸収するのに利用します。下のグラフはそれぞれのコンプライアンス値(A、B、C、Dの長さ)がポジションエラーと適用されたトルクによってどう定義されるかを示します。 Dynamixelのコンプライアンスは、コンプライアンスのMarginとSlopeを設定することで定義されます。この特徴は出力軸で衝撃を吸収するのに利用します。下のグラフはそれぞれのコンプライアンス値(A、B、C、Dの長さ)がポジションエラーと適用されたトルクによってどう定義されるかを示します。
#ref(DxCntTable1.png,90%) #ref(DxCntTable1.png,90%)
Line 150: Line 150:
D : CW Compliance Slope(Address 29)~ D : CW Compliance Slope(Address 29)~
E : Punch(Address48, 49)~ E : Punch(Address48, 49)~
 +また[[Endless Turn>#j6a51fa3]]モードにする際に使用します。詳細は[[Endless Turn>#j6a51fa3]]参照。
--''Address 30, 31 (0x1E, 0x1F) Goal Position''~+***Address 30, 31 (0x1E, 0x1F) Goal Position [#ee2d2463]
Dynamixelの出力角の位置を要求します。0x3ffを設定すると出力軸が300°の位置まで動きます。 Dynamixelの出力角の位置を要求します。0x3ffを設定すると出力軸が300°の位置まで動きます。
#ref(DxCntTable2.png,80%) #ref(DxCntTable2.png,80%)
--''Address 32, 33 (0x20, 0x21) Moving Speed''~+***Address 32, 33 (0x20, 0x21) Moving Speed [#i69bf70b]
出力軸がGoal Positionへ動く時の角速度を設定します。1に設定すると最低速度となります。0に設定すると速度調節が全く適用されない供給電圧で可能な最高の速度となります。~ 出力軸がGoal Positionへ動く時の角速度を設定します。1に設定すると最低速度となります。0に設定すると速度調節が全く適用されない供給電圧で可能な最高の速度となります。~
Moving Speed(Address 32, 33) 及びPresent Speed(Address 38, 39)の値に0.111を掛けるとRPMに変換することができます。すなわち、最大値は1023×0.111=113.6RPMとなります。しかし、RX-28の最大速度は79.4RPM(at 16V)です。速度の範囲を広く設定しているのは、外的要因によって最大速度より速くなる場合を考慮したためです。つまり16Vを供給する場合は、0~79.4RPMの範囲内で速度を制御することが可能です。Moving Speedの値と速度の関係を下図に示します。 Moving Speed(Address 32, 33) 及びPresent Speed(Address 38, 39)の値に0.111を掛けるとRPMに変換することができます。すなわち、最大値は1023×0.111=113.6RPMとなります。しかし、RX-28の最大速度は79.4RPM(at 16V)です。速度の範囲を広く設定しているのは、外的要因によって最大速度より速くなる場合を考慮したためです。つまり16Vを供給する場合は、0~79.4RPMの範囲内で速度を制御することが可能です。Moving Speedの値と速度の関係を下図に示します。
Line 161: Line 162:
#ref(DxCntTable3.png,100%) #ref(DxCntTable3.png,100%)
--''Address 36, 37 (0x24, 0x25) Present Position''~+***Address 36, 37 (0x24, 0x25) Present Position [#g40fd002]
出力軸の現在の角度です。 出力軸の現在の角度です。
--''Address 38, 39 (0x26, 0x27) Present Speed''~+***Address 38, 39 (0x26, 0x27) Present Speed [#ra254ee8]
出力軸の現在の角速度です。 出力軸の現在の角速度です。
--''Address 40, 41 (0x28, 0x29) Present Load''~+***Address 40, 41 (0x28, 0x29) Present Load [#k921f4f9]
操作するDynamixelの負荷の大きさです。ビット10は負荷の向きです。 操作するDynamixelの負荷の大きさです。ビット10は負荷の向きです。
| Bit | Bit15~11 | Bit10 | Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 | | Bit | Bit15~11 | Bit10 | Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 |
Line 173: Line 174:
Load Direction = 0 : CCW Load, Load Direction = 1 : CW Load Load Direction = 0 : CCW Load, Load Direction = 1 : CW Load
--''Address 42 (0x2A) Present Voltage''~+***Address 42 (0x2A) Present Voltage [#o9dde163]
現在のDynamixelに供給されている電圧です。値は実際の電圧の10倍です。例えば、10Vは100(0x64)と表します。 現在のDynamixelに供給されている電圧です。値は実際の電圧の10倍です。例えば、10Vは100(0x64)と表します。
--''Address 43 (0x2B) Present Temperature''~+***Address 43 (0x2B) Present Temperature [#yb6e508c]
Dynamixelの内部温度(℃)です。 Dynamixelの内部温度(℃)です。
--''Address 44 (0x2C) Registered Instruction''~+***Address 44 (0x2C) Registered Instruction [#x5982be7]
REG_WRITEコマンドでインストラクションが格納されたとき1が設定され、ACTIONコマンドによって格納されたインストラクションが完了したら0が設定されます。 REG_WRITEコマンドでインストラクションが格納されたとき1が設定され、ACTIONコマンドによって格納されたインストラクションが完了したら0が設定されます。
--''Address 46 (0x2E) Moving''~+***Address 46 (0x2E) Moving [#jf0f3fa1]
Dynamixelが供給された電力で動いているときに1が設定されます。 Dynamixelが供給された電力で動いているときに1が設定されます。
--''Address 47 (0x2F) Lock''~+***Address 47 (0x2F) Lock [#bb3a2a7c]
1が設定されるとAddress24からAddress35以外のエリアが書き換え不能となります。ロックを解除する方法は、電源を切る以外にありません。 1が設定されるとAddress24からAddress35以外のエリアが書き換え不能となります。ロックを解除する方法は、電源を切る以外にありません。
--''Address 48, 49 (0x30, 0x31) Punch''~+***Address 48, 49 (0x30, 0x31) Punch [#f79fd083]
操作時にモータに供給される最小の電流です。初期値は0x20に設定されていて、最大値は0x3ffです。 操作時にモータに供給される最小の電流です。初期値は0x20に設定されていて、最大値は0x3ffです。
 +
 +***Endless Turn [#j6a51fa3]
 +Address 0x1A~0x1DのCW Angle Limit、CWW Angle Limitを0に設定し、Address 0x20,0x21に以下の通りMoving Speedを設定するとEndless Turnモードになります。車輪のような役割で使用する際にこのモードに設定します。~
 +~
 +Moving Speedの設定
 +| BIT | Bit15~11 | Bit10 | Bit9,Bit8,Bit7,Bit6,Bit5,Bit4,Bit3,Bit2,​Bit1,Bit0 |
 +| Value | 0 | Turn Direction | Speed Value |
**Range [#p2cb2df8] **Range [#p2cb2df8]


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom