ページへ戻る

− Links

 印刷 

BTE074 DXSHIELD のバックアップソース(No.18) :: Besttechnology

knowledge:BTE074 DXSHIELD のバックアップソース(No.18)

« Prev[4]  Next »[5]
TITLE:DXSHIELDマニュアル
#norelated
#contents
[[ショップページへ>http://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=175]]
**概要 [#i9b1c92f]
DXSHIELDはDynamixelシリーズと通信するためのI/F(RS-485・TTL)をArduinoに増設するシールドで、各I/F用のコネクタに電源を分配する機能も合わせ持ちます。~

また、DXSHIELDのI/Fで通信できるデバイスであればいずれも適用可能です。

**仕様 [#w1fc9eab]
***同梱内容 [#t8074694]
| 型式等 | 数量 | 備考 |
|本体 | 1|- |
|電源コネクタキット | 1式|ハウジング [[JST VHR-2N>http://www.jst-mfg.com/product/pdf/jpn/VH.pdf]] x1 &br;コンタクト [[JST SVH-21T-P1.1>http://www.jst-mfg.com/product/pdf/jpn/VH.pdf]] x2|
|シールド用ピンヘッダ| 1式|< |
|JP1用ピンヘッダ及びジャンパ| 1式|< |

***基本仕様 [#k2975a33]
|品番 |BTE074 |<|
|PCBリビジョン |E133B (2層) |<|
|動作温度範囲 |0~60℃ 結露なきこと|<|
|外形寸法 |約52x53x14.5mm (ピンヘッダ除く) |<|
|重量 | |<|
|電源 |CN1:DC6~24V (Dynamixelが要求する電源)&br;内部ロジック:DC5V±5% (Arduinoより供給) |<|
|コネクタ等|E133B版&br; JST B2PS-VH x1&br; JST B4B-EH x5&br; JST B3B-EH x5&br;E133版&br; JST B2PS-VH x1&br; molex 22-03-5045 x5&br; molex 22-03-5035 x5 |<|
|各I/F仕様 |RS-485|複信 半二重&br;最大通信速度 2Mbps&br;最大ノード数 256台&br;ESD保護 ±15kV&br;ターミネータ装備済 |
|^|TTL|複信 半二重&br;最大通信速度 2Mbps&br;ESD保護 ±2kV&br;信号ラインは47kΩにてプルアップ済 |

***内部簡略ブロック [#gbb4d2b7]
#ref(E133_block.png,60%)
***外観・レイアウト [#k37b8ee0]
| top | side |h
| #ref(E133B_TOP.png,27%) | #ref(E133B_SIDEp.png,27%) |
| [[E133B 3D pdf>http://www.besttechnology.co.jp/download/3D/E133B_3D.pdf]]&br;[[E133 3D pdf>http://www.besttechnology.co.jp/download/3D/E133_3D.pdf]] |<|
※出荷時にピンヘッダは未装着

#ref(E133B_LAYOUT.pdf,100%)
#ref(E133_LAYOUT.pdf,100%)

***回路図 [#k1a3e31b]
#ref(E133B_SCH.pdf)

***各機能詳細 [#r071b4b9]
****J1,J5 [#j5c9c0ef]
#ref(E133_J1_J5.png)
-2.54mmピッチ 10ピンシングルラインヘッダ用ランド
-相互に並列接続
-Arduinoと接続する際はJ1に任意のヘッダを装着
| Pin No. | Name | Connected |h
| 1 |IO8| ''yes'' |
| 2 |IO9| ''yes'' |
| 3 |IO10/SS| no |
| 4 |IO11/MOSI | no |
| 5 |IO12/MISO | no |
| 6 |IO13/SCK | no |
| 7 |GND| ''yes'' |
| 8 |AREF| no |
| 9 |AD4/SDA| no |
| 10 |AD5/SCL| no |

****J2,J6 [#o639f73a]
#ref(E133_J2_J6.png)
-2.54mmピッチ 8ピンシングルラインヘッダ用ランド
-相互に並列接続
-Arduinoと接続する際はJ2に任意のヘッダを装着
| Pin No. | Name | Connected |h
| 1 |IO0/RX| ''yes'' |
| 2 |IO1/TX| ''yes'' |
| 3 |IO2| no |
| 4 |IO3| no |
| 5 |IO4| no |
| 6 |IO5| no |
| 7 |IO6| no |
| 8 |IO7| no |

****J3,J7 [#l3a39046]
#ref(E133_J3_J7.png)
-2.54mmピッチ 8ピンシングルラインヘッダ用ランド
-相互に並列接続
-Arduinoと接続する際はJ3に任意のヘッダを装着
| Pin No. | Name | Connected |h
| 1 | | no |
| 2 | IOREF | no |
| 3 | RESET | no |
| 4 | 3V3 | no |
| 5 | 5V | ''yes'' |
| 6 | GND | ''yes'' |
| 7 | GND | ''yes'' |
| 8 | Vin | ''yes'' |

****J4,J8 [#b2714017]
#ref(E133_J4_J8.png)
-2.54mmピッチ 6ピンシングルラインヘッダ用ランド
-相互に並列接続
-Arduinoと接続する際はJ4に任意のヘッダを装着
| Pin No. | Name | Connected |h
| 1 | AD0 | no |
| 2 | AD1 | no |
| 3 | AD2 | no |
| 4 | AD3 | no |
| 5 | AD4/SDA | no |
| 6 | AD5/SCL | no |

****JP1 [#a37455c9]
#ref(E133_JP1.png)
-2.54mmピッチ2ピンヘッダ用ランド
-DXSHIELDの電源をArduinoの外部電源として供給
-ショート:[[CN1>#f7942cf7]]に接続された電源をArduinoのVinに分配~
[[CN1>#f7942cf7]]に供給する電圧はArduinoのVinが許容する電圧範囲を守ること
-オープン:[[CN1>#f7942cf7]]に接続された電源とArduinoのVinを切断~
[[CN1>#f7942cf7]]とArduinoのVin各々に電源を供給するか、USBバスパワーで動作するArduinoであればPCとArduinoをUSBケーブルで常時接続すること

|CENTER:BGCOLOR(red): :idea:|JP1をショートした状態でArduinoのVinから電源を供給してはならない。&br;CN2~CN11の電源が弱いJP1を介して供給されるため、使用デバイスの負荷条件によってはジャンパや基板が損傷する。|

|CENTER:BGCOLOR(red): :idea:|JP1をショートした状態でCN1とArduinoの外部電源に各々個別の電源を供給してはならない。&br;電源や負荷の条件によってJP1に過電流が流れると、ジャンパや基板が損傷する。|

****SW1 [#g3d6a682]
#ref(SW1.png)
-3Tスライドスイッチ
-シリアル通信に使用するArduinoの送受信端子を3パターンから選択
-詳細は[[こちら>#c8763faf]]

****CN1 [#f7942cf7]
#ref(CN1.png)
-[[JST B2P-VH-B>http://www.jst-mfg.com/product/detail.php?series=262]]
-[[CN2~6>#w4e5b4bc]],[[CN7~11>#q21ef0ec]]のVDD/GND端子へ接続
-[[JP1>#a37455c9]]をショートすることでArduinoへ本電源を供給可~
その場合はArduinoのVinが許容する電圧範囲である事
#ref(PWR_connector.png)

|CENTER:BGCOLOR(red): :idea:|電源の逆接続は電源回路の即時破壊・全損扱いとなる。|

****CN2~CN6 [#w4e5b4bc]
-Dynamixel用
#ref(CN2-6_b.png)
--[[JST B3B-EH>http://www.jst-mfg.com/product/detail.php?series=58]]
--TTL I/Fを搭載したDynamixelシリーズ用のコネクタ
--SIGNAL端子は47kΩの抵抗を介して内部の5V電源へプルアップ済
--5つのコネクタはいずれも内部で並列に接続
--TTL I/Fと電源は以下の端子に接続
#ref(B3B-EH.png,100%)
|端子番号 |信号名 |
|1 |GND |
|2 |VDD |
|3 |SIGNAL(BIDIRECTION) |
-B3M/KRS用
#ref(CN2-6_KO.png)
--ピンヘッダ
--KONDO KRSシリーズ用のコネクタ
--SIGNAL端子は47kΩの抵抗を介して内部の5V電源へプルアップ済
--5つのコネクタはいずれも内部で並列に接続
--TTL I/Fと電源は以下の端子に接続
#ref(TTL_connector_KO.png)
|端子番号 |信号名 |
|1 |SIGNAL(BIDIRECTION) |
|2 |VDD |
|3 |GND |

****CN7~CN11 [#q21ef0ec]
-Dynamixel用
#ref(CN7-11_b.png)
--[[JST B4B-EH>http://www.jst-mfg.com/product/detail.php?series=58]]
--RS-485 I/Fを搭載したDynamixelシリーズ用のコネクタ
--D+/D-間にターミネータ装備
--5つのコネクタはいずれも内部で並列に接続
--RS-485 I/Fと電源は以下の端子に接続
#ref(B4B-EH.png,100%)
|端子番号 |信号名 |
|1 |GND |
|2 |VDD |
|3 |RS-485 D+ |
|4 |RS-485 D- |
-B3M/KRS用
#ref(CN7-11_KO.png)
--[[JST B4B-XH>http://www.jst-mfg.com/product/detail.php?series=277]]
--RS-485 I/Fを搭載したKONDO B3Mシリーズ用のコネクタ
--D+/D-間にターミネータ装備
--4つのコネクタはいずれも内部で並列に接続
--RS-485 I/Fと電源は以下の端子に接続
#ref(RS485_connector_KO.png)
|端子番号 |信号名 |
|1 |GND |
|2 |VDD |
|3 |RS-485 D+ |
|4 |RS-485 D- |

****ユーザランド [#jfa751e7]
#ref(E133C_URAND.png)
-2.54mmピッチランド
-工作用
-5V0のシルクの囲みはArdunioから供給される5V、GNDのシルクの囲みはGNDに接続済~
それ以外のランドはフリー

**使用方法 [#be654865]

***対応するデバイス [#r3b9fa50]
| I/F |  Device Name |h
|TTL|Dynamixel AX・MX(TTL版)・XLシリーズ全般, DXMIO(TTL), ToFセンサ(TTL) |
|RS-485|Dynamixel DX・RX・EX・MX(RS-485版)・XM・XH・PROシリーズ全般, UD3, UD3.5, USS3, DXMIO(RS485), ToFセンサ(RS485) |
要求される電源電圧が同じであれば、I/Fを問わず同時に使用することが可能です。

***接続方法 [#g7d8744a]
ここでは予めJP1~JP4にピンヘッダが装着されているものとします。
+ArduinoにDXSHIELDをスタックさせる。その際に両基板のピンヘッダ以外が物理的に接触していないこと。他のシールドを同時に使用する際は、DXSHIELDが使用済みの端子に十分配慮しておくこと。
#ref(E133B_uno.png,70%)
+Dynamixelのコネクタと同じDXSHIELD上のコネクタ同士を接続する。DXSHIELDにはTTL・RS-485 I/F共に各々5個のコネクタが装備されているが、I/Fの種類が一致してさえいればどのコネクタを使用しても構わない。
+DXSHIELDのCN1にDynamixelが要求する仕様の電源を供給する。この時絶対に電源の極性を間違えてはならない。
+DXSHIELDのJP1がオープンの場合はArduino本体への電源供給が必要なため、別途USBケーブルやACアダプタをArduinoへ接続して電源供給する。~
DXSHIELDのJP1がショートの場合はCN1からの電源がArduinoへも分配されるので、別途ArduinoへACアダプタを使って給電する必要がない。

#ref(E133_ASM.png,60%)

***モード選択 [#c8763faf]
Arduinoの種類に依存する部分が多々ありますが、ここではDXSHIELDを[[Arduino UNO>https://www.arduino.cc/en/Main/ArduinoBoardUno]]に装着して使用する前提として3つのモードを説明します。

****ソフトウェアシリアルモード[#ee08b548]
ArduinoのIO8・IO9ピンをソフトウェアシリアルで構成しDynamixelを制御するモードです。ArduinoのUSBシリアル通信機能(ハードウェアシリアル)はDynamixelの制御以外の目的に使用できます。~
Arduinoには任意の端子をシリアル通信の送受信端子として使用するSoftwareSerialライブラリが用意されています。あまり高速な通信には向きませんが、57600bps程度であれば十分実用レベルです。~
SW1を図の位置(SOFT)に切り替えます。
#ref(mode1.png)
本設定によりArduinoのデジタル入出力端子のうちIO8とIO9をソフトウェアシリアル用の端子として使用するため、この2つの端子は他の目的で使用してはなりません。~
また、Arduinoにユーザのスケッチを転送する際は、無条件に本モードに変更しておかないと転送に失敗します。

****ハードウェアシリアルモード [#ce79cebb]
ArduinoのIO0・IO1ピンをハードウェアシリアルで構成しDynamixelを制御するモードです。USBシリアル通信機能を犠牲にしても高速かつ安定した通信を要求する場合にの設定です。~
予めソフトウェアシリアルモードにおいてライブラリによる制御の理解が得られ、スケッチの書き込み時以外にUSBシリアルによる通信を必要としない場合に本設定を選択します。~
SW1を図の位置(HARD)に切り替えます。
#ref(mode2.png)
本設定を行った場合は、自身のスケッチでSerialライブラリを使用してはなりません。また、IO0・IO1ピンとUSBシリアル通信機能は他の目的で使用する事ができません。~
なお、スケッチをコンパイルして描き込む際は、本設定が電気的にUSBシリアル通信機能に影響を及ぼすため、その都度ソフトウェアシリアルモードに切り替える必要があります。

****USBパススルーモード [#c1027f1a]
Arduinoに搭載されたUSBシリアル通信機能を用いてPCなどからDXSHIELDを[[DXHUB>BTE068B]]ライクに直接使用するモードです。Dynamixelの内部パラメータの変更や制御をPCから行う場合は本設定を行います。~
まずArduino IDEにてデフォルトで生成されるコード(コードとしては意味を持たない無限ループするだけのスケッチ)をコンパイルし、予めArduinoに書き込んでおきます。このほぼ空のスケッチはDigital I/Oやシリアル通信を使用しないため、PCとDynamixel間の通信を阻害しません。なお、これに該当する独自スケッチであればこの限りではありません。

 void setup() {
   // put your setup code here, to run once:
 }

 void loop() {
   // put your main code here, to run repeatedly:
 }
DXSHIELDをソフトウェアシリアルモードに設定してこの何もしないスケッチを書き込んだ後、USBパススルーモードにします。~
SW1を図の位置(THROUGH)に切り替えます。
#ref(mode3.png)

なお、ArduinoのUSBシリアルを担っているAVRに書き込まれているファームウェアの都合で、大きなデータを連続で送受信する事ができません。これはプロトコルV1を装備するDynamixelシリーズであれば概ね問題はありませんが、プロトコルV2を装備するDynamixelシリーズではこの問題が露見しやすくなります。~
また、ArduinoのUSBシリアルとRoboPlus等との相性もよろしくないので、本モードを積極的に使用する事は推奨しません。

***ソフトウェア [#v2bf51a5]
****Dynamixel Configurator, RoboPlus[#va576864]
DXSHIELDを[[USBパススルー>#c1027f1a]]に設定にする事で、Dynamixelのコントロールテーブルの状態をモニタしたりパラメータの変更や動作確認を簡便に行うソフトウェアである[[Dynamixel Configurator>DXCONF]]が利用できます。~
公開されているバージョンはWindows版のみとなります。
#ref(dxconf.png,100%)
Dynamixel Configuratorの詳細は[[こちら>DXCONF]]にて。

またROBOTIS社提供の[[RoboPlus 1.0]]と[[RoboPlus 2.0]]が使用できます。
#ref(RoboPlus 2.0/r+2_top.png,40%)

なお、ArduinoのUSBシリアル通信機能は過度なトラフィックがかかるとデータがドロップすることが頻繁に発生するようです。

****Dynamixel Library for PC [#x91df052]
DXSHIELDを[[USBパススルー>#c1027f1a]]にする事で、Dynamixel Libraryを併用してシリアル通信やプロトコルを意識せずにPCから制御する事ができます。

詳細は[[DYNAMIXEL Protocol 1.0 Library>Dynamixel Library]]と[[DYNAMIXEL Protocol 2.0 Library>Dynamixel Protocol 2 Library]]にて。

****Dynamixel Library for Arduino [#t98a44bc]
DXSHIELDを[[ソフトウェアシリアル>#ee08b548]]もしくは[[ハードウェアシリアル>#ce79cebb]]モードに設定した場合、ArduinoのスケッチでDynamixelを制御するためのライブラリが利用できます。~
PC版DYNAMIXEL Protocol [[1.0>Dynamixel Library]]/[[2.0>Dynamixel Protocol 2 Library]] Library同様プロトコルやにシリアル通信を意識すること無くコントロールテーブルへの読み書きが行えますが、Arduino版は機能を限定したサブセット版となります。

-ライブラリのダウンロード(Arduino UNO/MEGAを想定)~
--
#ref(dxlib1.3_for_arduino.zip)
dxlib.cppのハードウェアシリアルポートの初期化不足修正

--
#ref(dxlib1.2_for_arduino.zip)
任意のハードウェアシリアルポートへの割り当て対応

--
#ref(dxlib1.1_for_arduino.zip)
Dynamixel Protocol V.2に対応~
低位の送受信関数追加~
32bitデータの送受信関数追加~
アドレスとサイズに関する引数は全て16bitに統一

--
#ref(dxlib1.0_for_arduino.zip)
初期リリース

DXLIBのインストールは、ArduinoのIDEの「スケッチ→ライブラリのインクルード→.ZIP形式のライブラリをインストール...」メニューを使用してダウンロードしたZIPファイルを選択するだけです。~
インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。詳しくはサンプルプログラムとライブラリのソースを参照して下さい。~

DXLIB v1.2で使用できるヘッダファイルとAPIは以下の通りです。
-&color(#0099ff){''dxlib.h''};~
[[DYNAMIXEL Communiation Protocol 1.0]]対応デバイスを対象とする場合、'''dxlib.h'''をスケッチにインクルードする事で'''DXLIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dx2lib.h'''との共存はできません。
 #include <dxlib.h>
 DXLIB dxif (true); // select software serial
 void setup() {
   dxif.begin (57600);
 }
-&color(#0099ff){''dx2lib.h''};~
[[DYNAMIXEL Communiation Protocol 2.0]]対応デバイスを対象とする場合、'''dx2lib.h'''をスケッチにインクルードする事で'''DX2LIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dxlib.h'''との共存はできません。
 #include <dx2lib.h>
 DX2LIB dxif (true); // select software serial
 void setup() {
   dxif.begin (57600);
 }
-&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, HardwareSerial *hws, uint8_t rxpin, uint8_t txpin)};~
ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。同時にソフトウェアシリアルの使用('''ss''')・ハードウェアシリアルオブジェクト('''hws''')・受信端子('''rxpin''')・送信端子('''txpin''')を指定した上でオブジェクトを生成できます。~
なお、'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~
また、'''hws'''や'''rxpin'''、'''txpin'''は通常指定する必要はありませんが、他のSHIELDやArduinoの機能の都合で使用できない場合に限り指定します。
 #include <dx2lib.h>
 // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化
 // ソフトウェアシリアルモードで使用
 DX2LIB dxif(true);
-&color(#0099ff){void DXLIB/DX2LIB::''begin'' (long baud)};~
ライブラリを使用可能にします。引数('''baud''')にはDynamixelに設定されたボーレートを指定します。~
なお、選択したモードにより使用できるボーレートに制限があります。
 // 生成されたdxifを57143bpsで初期化
 void setup() {
   dxif.begin (57143);
 }
-&color(#0099ff){bool DXLIB/DX2LIB::''TxPacket'' (uint8_t id, uint8_t inst, uint8_t *param, uint16_t len)};~
指定されたID('''id''')・インストラクション('''inst''')・パラメータ('''param''')・パラメータ長('''len''')のインストラクションパケットを送信します。
 // ID=1へPingインストラクションパケットを送信
 dxif.TxPacket (1, 0x01, NULL, 0);
-&color(#0099ff){bool DXLIB/DX2LIB::''RxPacket'' (uint8_t *rdata, uint16_t rdatasize, uint8_t *rid, uint16_t *rlen, uint8_t *err)};~
ステータスパケットを受信します。成功するとパケット内のパラメータが'''rdata'''へコピーされ、そのパラメータのサイズが'''rlen'''に返されます。なお、ステータスパケットを受信するのに十分なサイズを確保し、そのポインタを'''rdata'''へ、サイズを'''rdatasize'''に指定します。'''rid'''にはID、'''err'''にはDynamixelのエラーが返ります。
 uint8_t buf[10], id, err;
 uint16_t len;
 // ID=1へPingインストラクションパケットを送信
 dxif.TxPacket (1, 0x01, NULL, 0);
 // ステータスパケットを受信
 dxif.RxPacket (buf, sizeof (buf), &id, &len, &err)
-&color(#0099ff){bool DXLIB/DX2LIB::''ReadByteData'' (uint8_t id, uint16_t addr, uint8_t *data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。
 // ID=1のAX-12のLEDを取得
 uint8_t led;
 dxif.ReadByteData (1, 25, &led, NULL);
-&color(#0099ff){bool DXLIB/DX2LIB::''ReadWordData'' (uint8_t id, uint16_t addr, uint16_t *data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')から16ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。
 // ID=1のAX-12からPresentPositionを取得
 uint16_t ppos;
 dxif.ReadWordData (id, 36, &ppos, NULL);
-&color(#0099ff){bool DXLIB/DX2LIB::''ReadLongData'' (uint8_t id, uint16_t addr, uint32_t *data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')から32ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。
-&color(#0099ff){bool DXLIB/DX2LIB::''WriteByteData'' (uint8_t id, uint16_t addr, uint8_t data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。
 // ID=1のAX-12のLEDを点灯
 uint8_t err;
 dxif.WriteByteData (id, 25, 1, &err);
-&color(#0099ff){bool DXLIB/DX2LIB::''WriteWordData'' (uint8_t id, uint16_t addr, uint16_t data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')・16ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。
 // ID=1のAX-12のGoalPositionを511に変更
 dxif.WriteWordData (id, 30, 511, NULL);
-&color(#0099ff){bool DXLIB/DX2LIB::''WriteLongData'' (uint8_t id, uint16_t addr, uint32_t data, uint8_t *err)};~
指定されたID('''id''')・アドレス('''addr''')・32ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。
-&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncByteData'' (const uint8_t *pid, uint16_t addr, const uint8_t *pdata, int num)};~
指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・8ビットのデータ配列('''pdata''')をDynamixelに書き込みます。
 // ID=1~5の5個のAX-12のLEDへ点滅を指令
 uint8_t ids={1,2,3,4,5};
 uint16_t leds={1,1,1,1,1};
 dxif.WriteSyncByteData (ids, 30, leds, 5);
-&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncWordData'' (const uint8_t *pid, uint16_t addr, const uint16_t *pdata, int num)};~
指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・16ビットのデータ配列('''pdata''')をDynamixelに書き込みます。
 // ID=1~5の5個のAX-12に個別のGoalPositionを指令
 uint8_t ids={1,2,3,4,5};
 uint16_t poss={100,200,300,400,500};
 dxif.WriteSyncWordData (ids, 30, ppos, 5);
-&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncLongData'' (const uint8_t *pid, uint16_t addr, const uint32_t *pdata, int num)};~
指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・32ビットのデータ配列('''pdata''')をDynamixelに書き込みます。
-&color(#0099ff){bool DXLIB/DX2LIB::''Ping'' (uint8_t id, uint16_t *err)};~
指定されたID('''id''')のDynamixelを検索します。'''err'''にはDynamixelのエラーが返ります。
-&color(#0099ff){bool DXLIB/DX2LIB::''Reset'' (uint8_t id, uint16_t *err)};~
指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。

また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合は自信のスケッチの先頭に以下の1行を挿入してコンパイルします。
 #include <SoftwareSerial.h>

**その他 [#w7e62a68]
***DXSHIELDのTTL・RS-485 I/Fについて [#k759b64e]
-送信はTTL・RS-485の両I/Fに対して同時に行われ、受信はTTL・RS-485の両I/FがOR接続されているため同時に受信できない。
-TTL・RS-485の両I/Fはいずれも半二重で、無通信時(回路内のTX信号がHigh)は受信回路を活性化し受信待ち状態になり、送信時(回路内のTX信号がLow)は送信回路を活性化し送信状態になる。なお半二重の方向制御として送信信号に10usのオフディレイを設けた信号を用いており、Arduino自信はスケッチ及び回路共に半二重を意識することは無い。
-半二重の方向制御を行うオフディレイ回路よりも高速に応答するデバイスを使用するとバスの切り替えタイミングが間に合わず、デバイスからの応答を正常に受信する事ができない。
-TTL・RS-485のいずれのI/Fにかかわらず同じIDを持ったDynamixelが存在してはならない。
-TTLとRS-485のI/F間をまたいだ送受信はできないため、TTL・RS-485の両I/FにDynamixelが接続された環境において一部のインストラクションが正常動作しない。
-RS-485 I/FのD+/D-ライン間に挿入されているターミネータ(R1)により正常な通信が行えないデバイスが存在する。ターミネータを除去しても正常な通信が行えない場合は、バイアス抵抗等を挿入してみる事。

***Arduino MEGAでの使用 [#z23d4b7d]
少しの改造でDXSHIELDをArduino MEGAで使用する事ができます。DXSHIELDは次の図の位置に装着します。
#ref(E133B_mega.png,80%)

****ハードウェアシリアルモード [#aaf5bd9a]
デフォルトのSerialを利用する限りUNOと同様の運用で利用できます。しかし、MEGAには追加でSerial1~Serial3のハードウェアシリアルポートが備わっていますので、それらのポートを利用する事で最大のパフォーマンスを発揮できます。
-ハードウェアシリアルモードではあるが、SW1を常時SOFTの位置にしておく。
#ref(mode1.png,60%)
-Serial3を利用する際は、DXSHIELDのIO8とIO9をMEGAのIO15とIO14にジャンパ線でつなぐ。Seral1ならIO17とIO16、Serial2の場合はIO19とIO18にジャンパする。
#ref(E133B_mega_hard.png,80%)
-ジャンパ先のSerial??に合わせてクラスの初期化を変更(DXLIB v1.2以降でサポート)。
 DXLIB dxif (false, &Serial3);

 DX2LIB dxif (false, &Serial3);
-IO8・IO9は使用不可

****ソフトウェアシリアルモード [#b9557fa4]
次の作業が必要です。~
-SW1を常時SOFTの位置にしておく。
#ref(mode1.png,60%)
-Arduino MEGAではIO8は[[ソフトウェアシリアルの受信端子>https://www.arduino.cc/en/Reference/SoftwareSerial]]として使用できないため、ジャンパ線でIO8とIO10を短絡。
#ref(E133_mega_jumper.png)
-入れ替えた端子に合わせてクラスの初期化を変更。~
 DXLIB dxif (true, NULL, 10, 9); // rxpin IO8->IO10, txpin IO9

 DX2LIB dxif (true, NULL, 10, 9); // rxpin IO8->IO10, txpin IO9
-IO8・IO9・IO10は使用不可

****USBパススルーモード [#f2ca6d5c]
[[UNOのUSBパススルーモード>#c1027f1a]]と同様です。他のモードで強いられるジャンパ等の措置は必要ありません。

***注意事項 [#o2f97e11]
-いずれの端子も絶縁されていない。そのためArduinoとPCをUSBケーブルで活線接続した際に、突入電流などでPCがArduinoを認識しない問題が生じる事がある。そういった場合は、[[USBISO]]でPCのUSBポートを絶縁する事で解消する。
-Dynamixelシリーズがサポートする2M[bps]を超えるボーレートは、Arduino UNOの機能に依存するため使用できない。必ず2M[bps]以下で運用する事。
-E133(初期リリース版)とE133B(Rev.B)の相違点~
--一部抵抗の定数修正~
--Dynamixel用コネクタをmolexからJST製EHに~
--JST製XHコネクタの装備に対応
--PCBのレジスト色を青から緑に
-FUTABA社製コマンド式サーボのうち、JST社B4B-EHコネクタを装備してるものはDynamixelのそれとはピンアサインが異なるため、絶対に接続しない事。


« Prev[4]  Next »[5]