**メモリマップ [#x4eb66a5] Dynamixelの内部機能及び設定は次に示すメモリマップとして提供され、インストラクションパケットを使用して操作されます。Dynamixelはコントロールテーブルに値を書くことで操作され、状態はコントロールテーブルから値を読むことで確認します。~ 16ビットデータレジスタは(L)と(H)の2バイトで表されます。両方のバイトが1つのインストラクションパケットにおいて同時に書き込まれる必要があります。 |Address|Item|Access|Initial Value| |0 (0x0)|[[Model Number(L)>#ta493b6c]]|R|-| |1 (0x1)|[[Model Number(H)>#ta493b6c]]|R|-| |2 (0x2)|[[Version of Firmware>#x2b21b74]]|R|-| |3 (0x3)|[[ID>#n563922f]]|R/W|1 (0x01)| |4 (0x4)|[[Baudrate>#r27c0a5d]]|R/W|34 (0x22)| |5 (0x5)|[[Return Delay Time>#z6a035d0]]|R/W|250 (0xFA)| |6 (0x6)|[[CW Angle Limit (L)>#u752e406]]|R/W|0 (0x00)| |7 (0x7)|[[CW Angle Limit (H)>#u752e406]]|R/W|0 (0x00)| |8 (0x8)|[[CCW Angle Limit (L)>#u752e406]]|R/W|255 (0xFF)| |9 (0x9)|[[CCW Angle Limit (H)>#u752e406]]|R/W|3 (0x03)| |10 (0xA)|[[Drive Mode>#rd7fa695]]|R/W|0 (0x00)| |11 (0xB)|[[Highest Limit Temperature>#eae67652]]|R/W|80 (0x50)| |12 (0xC)|[[Lowest Limit Voltage>#sf36842f]]|R/W|60 (0x3C)| |13 (0xD)|[[Highest Limit Voltage>#sf36842f]]|R/W|190 (0xBE)| |14 (0xE)|[[Max Torque (L)>#m8848974]]|R/W|255 (0xFF)| |15 (0xF)|[[Max Torque (H)>#m8848974]]|R/W|3 (0x03)| |16 (0x10)|[[Status Return Level>#mc2f793d]]|R/W|2 (0x02)| |17 (0x11)|[[Alarm LED>#q8d97e3d]]|R/W|36 (0x24)| |18 (0x12)|[[Alarm Shutdwon>#y219e63a]]|R/W|36 (0x24)| |19 (0x13)|(Reserved)|RW|0 (0x00)| |20 (0x14)|[[Down Calibration (L)>#hceb4e38]]|R|?| |21 (0x15)|[[Down Calibration (H)>#hceb4e38]]|R|?| |22 (0x16)|[[Up Calibration (L)>#hceb4e38]]|R|?| |23 (0x17)|[[Up Calibration (H)>#hceb4e38]]|R|?| |24 (0x18)|[[Torque Enable>#ae42664f]]|R/W|0 (0x00)| |25 (0x19)|[[LED>#j0f1ab3d]]|R/W|0 (0x00)| |26 (0x1A)|[[CW Compliance Margin>#re44c84d]]|R/W|1 (0x00)| |27 (0x1B)|[[CCW Compliance Margin>#re44c84d]]|R/W|1 (0x00)| |28 (0x1C)|[[CW Compliance Slope>#re44c84d]]|R/W|32 (0x20)| |29 (0x1D)|[[CCW Compliance Slope>#re44c84d]]|R/W|32 (0x20)| |30 (0x1E)|[[Goal Position (L)>#i10660fa]]|R/W|[Addr36]value| |31 (0x1F)|[[Goal Position (H)>#i10660fa]]|R/W|[Addr37]value| |32 (0x20)|[[Moving Speed (L)>#s3139326]]|R/W|0 (0x00)| |33 (0x21)|[[Moving Speed (H)>#s3139326]]|R/W|0 (0x00)| |34 (0x22)|[[Torque Limit (L)>#m8848974]]|R/W|[Addr14]value| |35 (0x23)|[[Torque Limit (H)>#m8848974]]|R/W|[Addr15]value| |36 (0x24)|[[Present Position (L)>#v2f847df]]|R|?| |37 (0x25)|[[Present Position (H)>#v2f847df]]|R|?| |38 (0x26)|[[Present Speed (L)>#qeda324a]]|R|?| |39 (0x27)|[[Present Speed (H)>#qeda324a]]|R|?| |40 (0x28)|[[Present Load (L)>#j002f18d]]|R|?| |41 (0x29)|[[Present Load (H)>#j002f18d]]|R|?| |42 (0x2A)|[[Present Voltage>#r74e7fb8]]|R|?| |43 (0x2B)|[[Present Temperature>#i9d8fe30]]|R|?| |44 (0x2C)|[[Registered Instruction>#oc452a69]]|R/W|0 (0x00)| |45 (0x2D)|(Reserved)|-|0 (0x00)| |46 (0x2E)|[[Moving>#vc953eee]]|R|0 (0x00)| |47 (0x2F)|[[Lock>#ib2c369f]]|R/W|0 (0x00)| |48 (0x30)|[[Punch (L)>#edd9e980]]|R/W|32 (0x20)| |49 (0x31)|[[Punch (H)>#edd9e980]]|R/W|0 (0x00)| |56 (0x38)|[[Sensed Current(L)>#vfbc0b35]]|R|?| |57 (0x39)|[[Sensed Current(H)>#vfbc0b35]]|R|?| **各アイテムの詳細 [#hd8e7c4e] ***Model Number [#ta493b6c] モデルナンバーです。 ***Version of Firmware [#x2b21b74] ファームウェアのバージョンです。 ***ID [#n563922f] 各Dynamixelを特定するための固有のIDナンバーです。同じネットワークの各Dynamixelに異なるIDが必要です。 0~253まで使用可能です。254は全てのDynamixelを意味するブロードキャストIDなので、ここでは使用できません。 ***Baudrate [#r27c0a5d] 通信速度を決定します。以下の公式で計算します。~ Baudrate[BPS]=2000000 / (value + 1)~ ~ 主なBaudrateのデータ値~ |Set value(Dec.)|Set value(Hex.)|Baudrate[BPS]|Target Baudrate[BPS]|Error※[%]| |1|0X01|1000000.0|1000000|0.000| |3|0X03|500000.0|500000|0.000| |4|0X04|400000.0|400000|0.000| |7|0X07|250000.0|250000|0.000| |9|0X09|200000.0|200000|0.000| |16|0X10|117647.1|115200|-2.124| |34|0X22|57142.9|57600|0.794| |103|0X67|19230.8|19200|-0.160| |207|0XCF|9615.4|9600|-0.160| 注意: ±3%以下の許容誤差が一般に通信可能な範囲です。 ***Return Delay Time [#z6a035d0] インストラクションパケットが送られた後、ステータスパケットが返ってくるまでの時間です。遅延時間は2uSec * Address5の値です。 ***CW Angle Limit, CCW Angle Limit [#u752e406] Dynamixelの動作角を設定します。Goal Positionは以下の範囲にある必要があります。~ CW Angle Limit <= Goal Position <= CCW Angle Limit~ Goal Positionが動作角のリミットを越えると、Angle Limit Errorが起こります。 CW Angle Limit及びCCW Angle Limitを両方0に設定すると[[Endless Turnモード>#m81274a2]]になります。 ***Drive Mode [#rd7fa695] デュアルモードにおけるマスタ/スレーブ、及び回転方向を設定します。 |Bit|名称|内容| |Bit7~2| - | - | |Bit1| デュアルモード | 0:マスタ、1:スレーブ | |Bit0| リバースモード | 0:ノーマル、1:リバース | ****デュアルモード [#x1127b7a] スレーブに設定されたDynamixelは、マスタに設定されたDynamixelとデュアルモード用ケーブルで接続すると、マスタに設定されたDynamixelと同期したポジションに自動的に動作します。 1つの関節に対し、2つのDynamixelを使用して、トルクアップを図る場合などに使用します。 デュアルモード用ケーブルの接続の仕方により、スレーブのDynamixelの回転方向が変わります。 黒い線を並列に接続した場合は順方向に、クロスして接続した場合は逆方向に回転します。 #ref("DualMode.png"); ****リバースモード [#n0bc4bd0] リバースモードをオンにすると、図のようにポジションが左右対称になります。デュアルモードでスレーブに設定されている場合は無効です。 左右対称の機構などに対し、片方をリバースすることで回転方向を統一できます。 #ref("ReverseMode.png"); ***Highest Limit Temperature [#eae67652] Dynamixelの動作温度の上限です。Dynamixelの内部温度がこの値より高くなるとOverheating Errorが起こります。値は℃です。 ***Lowest Limit Voltage, Highest Limit Voltage [#sf36842f] Dynamixelの動作電圧の上限と下限です。現在の電圧(Address42)が指定した範囲から出ると、Input Voltage Errorが起こります。値は実際の電圧の10倍です。例えばAddress12が80なら、電圧の下限は8Vに設定されます。 ***Max Torque, Torque Limit [#m8848974] Dynamixelの最大トルク出力です。この値が0に設定されるとDynamixelはトルクがかかっていないFree Runモードになります。EEPROM(Address14, 15)とRAM(Address34, 35)の2つに最大トルクが定義されます。電源を入れるとEEPROMの最大トルク値がRAMの最大トルク値にコピーされます。DynamixelのトルクはRAM(Address34, 35)の値によって制限されます。 ***Status Return Level [#mc2f793d] インストラクションパケットを受けた後にDynamixelがステータスパケットを返すかどうかを決定します。 |Adress16|ステータスパケット| |0|PING以外のインストラクションには応答しない| |1|READ_DATAだけに応答する| |2|すべてのインストラクションに応答する| Broadcast ID(0xFE)を使ったインストラクションの場合は、Address16の値に関わらずステータスパケットを返しません。 ***Alarm LED [#q8d97e3d] 対応するBitが1に設定されると、Errorが起こったときにステータスLEDが点滅します。 |Bit|Function| |Bit7|0| |Bit6|1に設定されていたら、Instruction Errorが起こるとLEDが点滅します| |Bit5|1に設定されていたら、Overload Errorが起こるとLEDが点滅します| |Bit4|1に設定されていたら、Checksum Errorが起こるとLEDが点滅します| |Bit3|1に設定されていたら、Range Errorが起こるとLEDが点滅します| |Bit2|1に設定されていたら、Overheating Errorが起こるとLEDが点滅します| |Bit1|1に設定されていたら、Angle Errorが起こるとLEDが点滅します| |Bit0|1に設定されていたら、Input Voltage Errorが起こるとLEDが点滅します| すべてのビットのOR論理演算に従って動作します。例えば0x05が設定されていたら、Input Voltage ErrorかOverheating Errorが起こったときにLEDが点滅します。エラー状態から正常状態に戻るとLEDは2秒後に点滅を止めます。 ***Alarm Shutdown [#y219e63a] 対応するビットが1に設定されていて、エラーが発生するとDynamixelのトルクがオフになります。Alarm LEDとは異なり、Errorが発生した後、正常状態に戻ってもトルクオフの状態が維持されます。復帰するためにはTorque Enable(Address24)を1に再設定しなければなりません。 |Bit|Function| |Bit7|0| |Bit6|1に設定されていたら、Instruction Errorが起こるとトルクをオフにします| |Bit5|1に設定されていたら、Overload Errorが起こるとトルクをオフにします| |Bit4|1に設定されていたら、Checksum Errorが起こるとトルクをオフにします| |Bit3|1に設定されていたら、Range Errorが起こるとトルクをオフにします| |Bit2|1に設定されていたら、Overheating Errorが起こるとトルクをオフにします| |Bit1|1に設定されていたら、Angle Errorが起こるとトルクをオフにします| |Bit0|1に設定されていたら、Input Voltage Errorが起こるとトルクをオフにします| ***Down Calibration, Up Calibration [#hceb4e38] Dynamixelで使用されるPotentiomerterの誤差を補うのに使用されるデータです。ユーザーはこのデータを変更できません。 以下はRAMエリアです。~ ***Torque Enable [#ae42664f] 最初に電源を入れるとDynamixelはTorque Free Run(ゼロトルク)になります。Address24に1を設定するかゴールポジションが設定されるとトルクが有効になります。 ***LED [#j0f1ab3d] 1が設定されるとLEDが点灯し、0が設定されると消灯します。 ***CW Compliance Margin, CCW Compliance Margin, CW Compliance Slope, CCW Compliance Slope [#re44c84d] Dynamixelのコンプライアンスは、コンプライアンスのMarginとSlopeを設定することで定義されます。この特徴は出力軸で衝撃を吸収するのに利用します。下のグラフはそれぞれのコンプライアンス値(A、B、C、Dの長さ)がポジションエラーと適用されたトルクによってどう定義されるかを示します。 #ref(Dynamixelコントロールテーブル/DxCntTable1.png) A : CCW Compliance Slope(Address26)~ B : CCW Compliance Margin(Address27)~ C : CW Compliance Margin(Address28)~ D : CW Compliance Slope(Address 29)~ E : Punch(Address48, 49)~ ***Goal Position [#i10660fa] Dynamixelの出力角の位置を要求します。0(0x000)~4095(0xfff)の設定値に対し、出力軸は0°~250.92°まで動作します。 #ref(DxCntTable2.png) ***Moving Speed [#s3139326] 出力軸がGoal Positionへ動く時の角速度です。0に設定すると速度調節が適用されない供給電圧で可能な最大の速度になります。 Endless Turnモードでは回転速度になります。詳しくは[[Endless Turn>#m81274a2]]を参照。 ***Present Position [#v2f847df] 出力軸の現在の角度です。Goal Positionと同様0(0x000)~4095(0xfff)の値に対し、0°~250.92°を表します。 Endless Turnモードでは総回転角度を表します。詳しくは[[Endless Turn>#m81274a2]]を参照。 ***Present Speed [#qeda324a] 出力軸の現在の角速度です。 ビット10は回転方向を表します。 | BIT | Bit15~11 | Bit10 | Bit9~0 | | Value | 0 | Turn Direction | Speed Value | Trun Direction = 0 : CCW, Trun Direction = 1 : CW ***Present Load [#j002f18d] 操作するDynamixelの負荷の大きさです。ビット10は負荷の向きを表します。 | Bit | Bit15~11 | Bit10 | Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 | | Value | 0 | Load Direction | Load Value | Load Direction = 0 : CCW Load, Load Direction = 1 : CW Load ***Present Voltage [#r74e7fb8] 現在のDynamixelに供給されている電圧です。値は実際の電圧の10倍です。例えば、10Vは100(0x64)と表します。 ***Present Temperature [#i9d8fe30] Dynamixelの内部温度(℃)です。 ***Registered Instruction [#oc452a69] REG_WRITEコマンドでインストラクションが格納されたとき1が設定され、ACTIONコマンドによって格納されたインストラクションが完了したら0が設定されます。 ***Moving [#vc953eee] Dynamixelが供給された電力で動いているときに1が設定されます。 ***Lock [#ib2c369f] 1が設定されるとAddress24からAddress35以外のエリアが書き換え不能となります。ロックを解除する方法は、電源を切る以外にありません。 ***Punch [#edd9e980] 操作時にモータに供給される最小の電流です。初期値は0x20に設定されていて、最大値は0x3ffです。 ***Sensed Current [#vfbc0b35] 現在の電流値です。 単位は10mAです。 値が512より大きい場合はCW方向に、512より小さい場合はCCW方向にモータが回転していることを意味し、値と512の差が電流値となります。 例えば値が612なら、回転方向はCWで、612 - 512 = 100 -> 100 × 10mA = 1000mAとなります。値が312なら、回転方向はCCWで、512 - 312 = 200 -> 200 × 10mA = 2000mAとなります。 ***Endless Turn [#m81274a2] Address 6(0x06)~9(0x09)のCW Angle Limit、CCW Angle Limitを0に設定し、Address 32(0x20),33(0x21)に以下の通りMoving Speedを設定するとEndless Turnモードになります。車輪のような役割で使用する際にこのモードに設定します。~ ~ Moving Speedの設定 | BIT | Bit15~11 | Bit10 | Bit9~0 | | Value | 0 | Turn Direction | Speed Value | Trun Direction = 0 : CCW, Trun Direction = 1 : CW Present Positionは車輪の総回転角度を表します。 値はCCW方向に回転すると減少、CW方向に回転すると増加し、積算されます。値が0を下回ると65535になり、65535を超えると0になります。 **Range [#f13ed204] 各データには有効な最小値、最大値があります。この有効値外に書き込まれたインストラクションはエラーを返します。下表に各レジスタのデータ範囲と長さをまとめています。16ビットデータレジスタは(L)と(H)の2バイトで表されます。両方のバイトが1つのインストラクションパケットで同時に書き込まれる必要があります。 |Write Address|Writing Item|Length(bytes)|Min|Max| |3(0x03)|ID|1|0|253(0xFD)| |4(0x04)|Baudrate|1|0|254(0xFE)| |5(0x05)|Return Delay Time|1|0|254(0xFE)| |6(0x06)|CW Angle Limit|2|0|4059(0xFFF)| |8(0x08)|CCW Angle Limit|2|0|4095(0xFFF)| |11(0x0B)|Highest Limit Temperature|1|10(0x10)|99(0x63)| |12(0x0C)|Lowest Limit Voltage|1|50(0x32)|250(0xFA)| |13(0x0D)|Highest Limit Voltage|1|50(0x32)|250(0xFA)| |14(0x0E)|Max Torque|2|0|1023(0x3FF)| |16(0x10)|Status Return Level|1|0|2| |17(0x11)|Alarm LED|1|0|127(0x7F)| |18(0x12)|Alarm Shutdown|1|0|127(0x7F)| |19(0x13)|(Reserved)|1|0|1| |24(0x18)|Torque Enable|1|0|1| |25(0x19)|LED|1|0|1| |26(0x1A)|CW Compliance Margin|1|0|254(0xFE)| |27(0x1B)|CCW Compliance Margin|1|0|254(0xFE)| |28(0x1C)|CW Compliance Slope|1|1|254(0xFE)| |29(0x1D)|CCW Compliance Slope|1|1|254(0xFE)| |30(0x1E)|Goal Position|2|0|4095(0xFFF)| |32(0x20)|Moving Speed|2|0|1023(0x3FF)| |34(0x22)|Torque Limit|2|0|1023(0x3FF)| |44(0x2C)|Registered Instruction|1|0|1| |47(0x2F)|Lock|1|1|1| |48(0X30)|Punch|2|0|1023(0x3FF)| Moving SpeedはEndless Turnモードの場合Min:0、Max:2047 **RAM EEPROM [#be8cd93b] Address0から23はEEPROMエリア、Address24から49まではRAMエリアです。RAMエリアのデータは電源を入れたときに常に初期値に設定されます。EEPROMのデータは電源を切ってもその時の値が残ります。~ コントロールテーブルの右側のInitial ValueはEEPROMエリアデータの製造時の初期値と、RAMエリアデータの電源を入れた時の初期値です。~ EEPROMエリアデータの書き換え回数には制限があります。必要な時のみ書き換えられるような運用を行って下さい。~
(This host) = http://www.besttechnology.co.jp