TITLE:AX-S1 Control table **メモリマップ [#kfc50b8a] Dynamixelの内部機能及び設定は次に示すメモリマップとして提供され、インストラクションパケットを使用して操作されます。Dynamixelはコントロールテーブルに値を書くことで操作され、状態はコントロールテーブルから値を読むことで確認します。~ 16ビットデータレジスタは(L)と(H)の2バイトで表されます。両方のバイトが1つのインストラクションパケットにおいて同時に書き込まれる必要があります。 |=~Control Table||||h |=''Address''|=''Item''|=''Access''|=''Initial Value''| |CENTER:|LEFT:|CENTER:|CENTER:|c |0 (0x0)|[[Model Number(L)>#f78419d7]]|R|13 (0x0D)| |1 (0x1)|[[Model Number(H)>#f78419d7]]|R|0 (0x00)| |2 (0x2)|[[Version of Firmware>#q07eb059]]|R|?| |3 (0x3)|[[ID>#v908ebee]]|R/W|100 (0x64)| |4 (0x4)|[[Baudrate>#y9835609]]|R/W|1 (0x01)| |5 (0x5)|[[Return Delay Time>#w53cd19a]]|R/W|250 (0xFA)| |6 (0x6)|(Reserved)|-|-| |7 (0x7)|(Reserved)|-|-| |8 (0x8)|(Reserved)|-|-| |9 (0x9)|(Reserved)|-|-| |10 (0xA)|(Reserved)|-|-| |11 (0xB)|[[Highest Limit Temperature>#k70d072e]]|R/W|100 (0x64)| |12 (0xC)|[[Lowest Limit Voltage>#l4142caa]]|R/W|60 (0x3C)| |13 (0xD)|[[Highest Limit Voltage>#l4142caa]]|R/W|190 (0xBE)| |14 (0xE)|(Reserved)|-|-| |15 (0xF)|(Reserved)|-|-| |16 (0x10)|[[Status Return Level>#o16012dd]]|R/W|2 (0x02)| |17 (0x11)|(Reserved)|-|-| |18 (0x12)|(Reserved)|-|-| |19 (0x13)|(Reserved)|-|-| |20 (0x14)|[[IR Obstacle Detect Compare Value>#g388c09d]]|R/W|32 (0x20)| |21 (0x15)|[[Light Detect Compare Value>#ydcd478d]]|R/W|32 (0x20)| |22 (0x16)|(Reserved)|-|-| |23 (0x17)|(Reserved)|-|-| |24 (0x18)|(Reserved)|-|-| |25 (0x19)|(Reserved)|-|-| |26 (0x1A)|[[IR Left Fire Data>#m7da123e]]|R|?| |27 (0x1B)|[[IR Center Fire Data>#m7da123e]]|R|?| |28 (0x1C)|[[IR Right Fire Data>#m7da123e]]|R|?| |29 (0x1D)|[[Light Left Data>#w21d0c38]]|R|?| |30 (0x1E)|[[Light Center Data>#w21d0c38]]|R|?| |31 (0x1F)|[[Light Right Data>#w21d0c38]]|R|?| |32 (0x20)|[[IR Obstacle Detected>#k998f233]]|R|?| |33 (0x21)|[[Light Detected>#c95af0b1]]|R|?| |34 (0x22)|(Reserved)|-|-| |35 (0x23)|[[Sound Data>#a9725398]]|R/W|?| |36 (0x24)|[[Sound Data Max Hold>#y6543fac]]|R/W|?| |37 (0x25)|[[Sound Detected Count>#a65e60f1]]|R/W|?| |38 (0x26)|[[Sound Detected Time (L)>#c74ed042]]|R/W|?| |39 (0x27)|[[Sound Detected Time(H)>#c74ed042]]|R/W|?| |40 (0x28)|[[Buzzer Data 0>#h7380696]]|R/W|?| |41 (0x29)|[[Buzzer Data 1>#jdce8043]]|R/W|?| |42 (0x2A)|[[Present Voltage>#rfa49b39]]|R|?| |43 (0x2B)|[[Present Temperature>#v05fed84]]|R|?| |44 (0x2C)|[[Registered Instruction>#hddf880f]]|R/W|0 (0x00)| |45 (0x2D)|(Reserved)|-|-| |46 (0x2E)|[[Remocon Arrived>#j2029bea]]|R|0 (0x00)| |47 (0x2F)|[[Lock>#d819857e]]|R/W|0 (0x00)| |48 (0x30)|[[Remocon RX Data 0>#w282a35f]]|R|?| |49 (0x31)|[[Remocon RX Data 1>#w282a35f]]|R|?| |50 (0x32)|[[Remocon TX Data 0>#w282a35f]]|R/W|?| |51 (0x33)|[[Remocon TX Data 1>#w282a35f]]|R/W|?| |52 (0x34)|[[IR Obstacle Detect Compare>#xc872718]]|R/W|?| |53 (0x35)|[[Light Detect Compare>#q375d21b]]|R/W|?| **各アイテムの詳細 [#fba33baa] ***Model Number [#f78419d7] モデルナンバーです。 ***Version of Firmware [#q07eb059] ファームウェアのバージョンです。 ***ID [#v908ebee] 各Dynamixelを特定するための固有のIDナンバーです。同じネットワークの各Dynamixelは異なるIDでなければなりません。 ***Baudrate [#y9835609] 通信速度を決定します。以下の公式で計算します。~ 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 [#w53cd19a] インストラクションパケットが送られた後、ステータスパケットが返ってくるまでの時間です。遅延時間は2uSec * Return Delay Timeの値です。 ***Highest Limit Temperature [#k70d072e] Dynamixelの動作温度の上限です。Dynamixelの内部温度([[Present Temperature>#v05fed84]])がこの値より高くなるとOverheating Errorが起こります。値は℃です。 ***Lowest Limit Voltage, Highest Limit Voltage [#l4142caa] Dynamixelの動作電圧の上限と下限です。現在の電圧([[Present Voltage>#rfa49b39]])が指定した範囲から出ると、Input Voltage Errorが起こります。値は実際の電圧の10倍です。例えばLowest Limit Voltageが80なら、電圧の下限は8Vに設定されます。 ***Status Return Level [#o16012dd] インストラクションパケットを受けた後にステータスパケットを返すか否かを決定します。 |Adress16|ステータスパケット| |0|PING以外のインストラクションには応答しない| |1|READ_DATAだけに応答する| |2|すべてのインストラクションに応答する| Broadcast ID(0xFE)を使ったインストラクションの場合は、Status Return Levelの値に関わらずステータスパケットを返しません。 ***IR Obstacle Detect Compare Value [#g388c09d] 赤外線センサの方向に物体があるか否かを判断するための基準値です。赤外線センサの値がこの基準値より高ければ物体が判定距離内にあると判断し、赤外線センサの方向に対応した物体感知値([[IR Obstacle Detected>#k998f233]])のビットに1が設定され、基準値より低ければ判定距離内にはないと判断し0が設定されます。~ 物体感知基準値(IR Obstacle Detect Compare Value)は、EEPROM(Address0x14)とRAM(Address0x34)の2箇所に割り当てられており、電源が入れられるとEEPROMの値がRAMにコピーされます ***Light Detect Compare Value [#ydcd478d] 輝度センサで明るいと判断する基準値です。輝度センサの値がこの基準値より高ければ明るいと判断し、輝度センサの方向に対応した輝度感知値([[Light Detected>#c95af0b1]])のビットが1に設定され、基準値より低ければ暗いと判断し0が設定されます。照明感知基準値(Light Detect Compare Value)はEEPROM(Address0x15)とRAM(Address0x35)の2箇所に割り当てられていて、電源が入れられるとEEPROMの値がRAMにコピーされます。 ***IR Left Fire Data, Light Center Data, IR Right Fire Data [#m7da123e] 赤外線センサの距離検出値です。3方向へ赤外線を放射し、壁や物体に反射して戻ってきた赤外線の量を測定します。壁や物体が近くにあるほど高い値になります。測定値は0~255です。赤外線による測定なので壁や物体の色相や表面の質感によって反射率が変わり測定値に差が生じる場合があります。 ***Light Left Data, Light Center Data, Light Right Data [#w21d0c38] 赤外線を放射せずに、照明から放射される赤外線を3方向から測定する輝度検出値です。白熱電球のような赤外線を強く放射する照明の輝度を測定できます。またライターやロウソクのようなものとの距離の測定が可能です。測定値は0~255です。 ***IR Obstacle Detected [#k998f233] 赤外線センサの距離検出値([[IR Left Fire Data, Light Center Data, IR Right Fire Data>#m7da123e]])が物体感知基準値([[IR Obstacle Detect Compare Value>#g388c09d]])より高くなると、物体を感知したと判断し対応するビットを1に設定します。各センサのビットは下表です。 |Bit |内容 | |Bit2 |右側センサの物体感知 | |Bit1 |前方センサの物体感知 | |Bit0 |左側センサの物体感知 | ***Light Detected [#c95af0b1] 輝度センサの輝度検出値([[Light Left Data, Light Center Data, Light Right Data>#w21d0c38]])が照明感知基準値([[Light Detect Compare Value>#ydcd478d]])より高くなると、明るいと判断し対応するビットを1に設定します。各センサのビットは下表です。 |Bit |内容 | |Bit2 |右側センサの照明感知 | |Bit1 |前方センサの照明感知 | |Bit0 |左側センサの照明感知 | ***Sound Data [#a9725398] マイクから入力される音量を測定し数値で表した値です。音量は下図のように上下に大きさが変化し無音時がおよそ127~128(0x7F~0x80)となり、音が大きいほど0又は225(0xFF)に近づきます。~ &ref(ax-s1_1.png,70%); ***Sound Data Max Hold [#y6543fac] 音量計測値([[Sound Data>#a9725398]])の最大値を保存した値です。現在の音量が最大音量に保存されている値より大きい場合は、その音量を最大音量に保存します。下図のように128より低い音量計測値は無視され、128より高い値の中で最大の音量計測値が逐次保存されます。~ &ref(ax-s1_2.png,70%); 最大音量が255(0xFF)になると、これ以上大きい値がないため更新されません。改めて最大音量を測定したい場合は、この値を一度0に設定してから再度測定する必要があります。 ***Sound Detected Count [#a65e60f1] あるレベル以上の音量の音をカウントした値です。例えば拍手の回数をカウントするといったことが可能です。下図のように1回の拍手の音を複数回と誤認識することを避けるために、1回カウントすると約80msecの間はカウントしません。また最後にカウントしてから800msecが経つとカウントした値が保存されます。~ &ref(ax-s1_3.png,100%); ***Sound Detected Time [#c74ed042] 音の発生時刻です。[[Sound Detected Count>#a65e60f1]]がカウントされるたびにその時の時刻を保存します。この機能は音源の方向を検知するために使用します。音の発生時刻は、内部でカウントしている値(0~65535を繰り返してカウント)を基に、[[Sound Detected Count>#a65e60f1]]が増加する時のカウント値を保存します。2個のAX-S1を適当な位置に置き、Sound Detected TimeをBroadcast命令で同時に0に初期化させた後に音を発生させると、2つのAX-S1は音源の方向による時間差が発生します。正面に置いた場合はほぼ同じ時刻に感知されますが、横方向に音源がある場合、AX-S1の置いた距離に比例する時間差が生じます。この時間差を利用して大凡の音源の方向を把握することができます。~ &ref(ax-s1_4.png,100%);~ 音の発生時刻の基になるカウンタは約4.096msecで0~65535をカウントし、65535までカウントしたら再び0からカウントします。音速を基に計算すると、音は1カウント当たり0.02mm程度の距離を移動するので、2つのAX-S1間の距離は70cm以下でなければなりません。例えば2つのAX-S1が10cm離れている場合、2つのAX-S1の音の発生時刻は最大で5000の差が生じます。5000の差が生じるのは音源が完全に90度左または右にあるときです。 ***Buzzer Data 0 [#h7380696] 値を書き込むことでビット音を再生します。ブザーの音階は52段階あります。ブザーの音階値は下表のように割り当てられています。 | ブザー値 | 音階 | ブザー値 | 音階 | ブザー値 | 音階 | ブザー値 | 音階 | | 0 | ラ | 13 | ラ# | 26 | シ | 39 | ド | | 1 | ラ# | 14 | シ | 27 | ド | 40 | ド# | | 2 | シ | 15 | ド | 28 | ド# | 41 | レ | | 3 | ド | 16 | ド# | 29 | レ | 42 | レ# | | 4 | ド# | 17 | レ | 30 | レ# | 43 | ミ | | 5 | レ | 18 | レ# | 31 | ミ | 44 | ファ | | 6 | レ# | 19 | ミ | 32 | ファ | 45 | ファ# | | 7 | ミ | 20 | ファ | 33 | ファ# | 46 | ソ | | 8 | ファ | 21 | ファ# | 34 | ソ | 47 | ソ# | | 9 | ファ# | 22 | ソ | 35 | ソ# | 48 | ラ | | 10 | ソ | 23 | ソ# | 36 | ラ | 49 | ラ# | | 11 | ソ# | 24 | ラ | 37 | ラ# | 50 | シ | | 12 | ラ | 25 | ラ# | 38 | シ | 51 | ド | ***Buzzer Data 1 [#jdce8043] 値を書き込むことでブザーを鳴らす長さを調節します。0.1秒単位で調節が可能で、最小は0.3秒、最大で5秒まで再生することができます。0~3の値を入れると0.3秒間ブザーが鳴り、50以上の値を入れると5秒ブザーが鳴ります。ブザーが鳴り終わると自動で0に初期化されます。~ この他にも2つ機能があります。1つ目はブザーを鳴らし続ける機能で、Buzzer Data 1に254を設定し、[[Buzzer Data 0>#h7380696]]に音階値を設定するとブザーが鳴り続けます。止めるにはBuzzer Data 1に0を設定します。~ 2つ目はメロディーの再生です。Buzzer Data 1に255を設定し、[[Buzzer Data 0>#h7380696]]に0~26を設定すると、各値に対応したメロディーを再生します。メロディーの再生が終わるとBuzzer Data 1が自動で0に初期化されます。 ***Present Voltage [#rfa49b39] 現在のDynamixelに供給されている電圧です。値は実際の電圧の10倍です。例えば、10Vは100(0x64)と表します。 ***Present Temperature [#v05fed84] Dynamixelの内部温度(℃)です。 ***Registered Instruction [#hddf880f] REG_WRITEコマンドでインストラクションが格納されたとき1が設定され、ACTIONコマンドによって格納されたインストラクションが完了したら0が設定されます。 ***Remocon Arrived [#j2029bea] 本体前方に赤外線リモートコントロールセンサモジュールが搭載されており、AX-S1同士の赤外線リモートコントロール通信ができます。2バイト単位の送信が可能です。赤外線送信部は前/左/右の3方向に装着されており、どの方向からでもデータを送信できますが、受信部は前方のみ装備されているためデータの受信は限定された角度のみ可能となります。データがセンサに受信されるとRemocon Arrivedは2になります。これは2バイト受信したという意味です。 ***Lock [#d819857e] 1が設定されるとAddress24(0x18)からAddress35(0x23)以外のエリアが書き換え不能となります。ロックを解除する方法は、電源を切る以外にありません。 ***Remocon RX Data [#f1500fda] 赤外線リモートコントロールセンサで受信したデータを保存します。この値が読みだされると[[Remocon Arrived>#j2029bea]]は自動で初期化され0になります。 ***Remocon TX Data [#w282a35f] 赤外線で送信するデータをここへ書き込みます。2バイトの値を書き込んだ直後にリモートコントロールデータが送信されます。 ***IR Obstacle Detect Compare [#xc872718] [[IR Obstacle Detect Compare Value>#g388c09d]]をメモリマップのRAM領域に保存するための場所です。 ***Light Detect Compare [#q375d21b] [[Light Detect Compare Value>#ydcd478d]]をメモリマップのRAM領域に保存するための場所です。 **Range [#p2cb2df8] 各データには有効な最小値、最大値があります。この有効値外に書き込まれたインストラクションはエラーを返します。下表に各レジスタのデータ範囲と長さをまとめています。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)| |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)| |16 (0x10)|Status Return Level|1|0|2| |20 (0x14)|IR Obstacle Detect Compare|1|0|255(0XFF)| |21 (0x15)|Light Detect Compare|1|0|255(0XFF)| |36 (0x24)|Sound Data Max Hold|1|0|255(0XFF)| |37 (0x25)|Sound Detected Count|1|0|255(0XFF)| |38 (0x26)|Sound Detected Time|2|0|65535(0xffff)| |40 (0x28)|Buzzer Data 0|1|0|255(0xff)| |41 (0x29)|Buzzer Data 1|1|0|255(0xff)| |44 (0x2C)|Registered Instruction|1|0|1| |47 (0x2F)|Lock|1|1|1| |50 (0X32)|Remocon TX Data|2|0|65535(0xffff)| **RAM EEPROM [#ub0b5828] Address0から23はEEPROMエリア、Address24から53まではRAMエリアです。RAMエリアのデータは電源を入れたときに常に初期値に設定されます。EEPROMのデータは電源を切ってもその時の値が残ります。~ コントロールテーブルの右側のInitial ValueはEEPROMエリアデータの製造時の初期値と、RAMエリアデータの電源を入れた時の初期値です。~ EEPROMエリアデータの書き換え回数には制限があります。必要な時のみ書き換えられるような運用を行う必要があります。~
(This host) = https://www.besttechnology.co.jp