ショップページへ

概要 anchor.png

DXSHIELDはDynamixelシリーズと通信するためのI/F(RS-485・TTL)をArduinoに増設するシールドで、各I/F用のコネクタに電源を分配する機能も合わせ持ちます。

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

Page Top

仕様 anchor.png

Page Top

同梱内容 anchor.png

型式等数量備考
本体1-
電源コネクタキット1式ハウジング JST VHR-2N x1
コンタクト JST SVH-21T-P1.1 x2
シールド用ピンヘッダ1式 
JP1用ピンヘッダ及びジャンパ1式 
Page Top

基本仕様 anchor.png

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

内部簡略ブロック anchor.png

E133_Block.png
Page Top

外観・レイアウト anchor.png

※出荷時にピンヘッダは未装着

Page Top

回路図 anchor.png

Page Top

各機能詳細 anchor.png

Page Top
J1,J5 anchor.png
E133_J1_J5.png
  • 2.54mmピッチ 10ピンシングルラインヘッダ用ランド
  • 相互に並列接続
  • Arduinoと接続する際はJ1に任意のヘッダを装着
    Pin No.NameConnected
    1IO8yes
    2IO9yes
    3IO10/SSno
    4IO11/MOSIno
    5IO12/MISOno
    6IO13/SCKno
    7GNDyes
    8AREFno
    9AD4/SDAno
    10AD5/SCLno
Page Top
J2,J6 anchor.png
E133_J2_J6.png
  • 2.54mmピッチ 8ピンシングルラインヘッダ用ランド
  • 相互に並列接続
  • Arduinoと接続する際はJ2に任意のヘッダを装着
    Pin No.NameConnected
    1IO0/RXyes
    2IO1/TXyes
    3IO2no
    4IO3no
    5IO4no
    6IO5no
    7IO6no
    8IO7no
Page Top
J3,J7 anchor.png
E133_J3_J7.png
  • 2.54mmピッチ 8ピンシングルラインヘッダ用ランド
  • 相互に並列接続
  • Arduinoと接続する際はJ3に任意のヘッダを装着
    Pin No.NameConnected
    1no
    2IOREFno
    3RESETno
    43V3no
    55Vyes
    6GNDyes
    7GNDyes
    8Vinyes
Page Top
J4,J8 anchor.png
E133_J4_J8.png
  • 2.54mmピッチ 6ピンシングルラインヘッダ用ランド
  • 相互に並列接続
  • Arduinoと接続する際はJ4に任意のヘッダを装着
    Pin No.NameConnected
    1AD0no
    2AD1no
    3AD2no
    4AD3no
    5AD4/SDAno
    6AD5/SCLno
Page Top
JP1 anchor.png
E133_JP1.png
  • 2.54mmピッチ2ピンヘッダ用ランド
  • DXSHIELDの電源をArduinoの外部電源として供給
  • ショート:CN1に接続された電源をArduinoのVinに分配
    CN1に供給する電圧はArduinoのVinが許容する電圧範囲を守ること
  • オープン:CN1に接続された電源とArduinoのVinを切断
    CN1とArduinoのVin各々に電源を供給するか、USBバスパワーで動作するArduinoであればPCとArduinoをUSBケーブルで常時接続すること
:idea:JP1をショートした状態でArduinoのVinから電源を供給してはならない。
CN2~CN11の電源が弱いJP1を介して供給されるため、使用デバイスの負荷条件によってはジャンパや基板が損傷する。
:idea:JP1をショートした状態でCN1とArduinoの外部電源に各々個別の電源を供給してはならない。
電源や負荷の条件によってJP1に過電流が流れると、ジャンパや基板が損傷する。
Page Top
SW1 anchor.png
SW1.png
  • 3Tスライドスイッチ
  • シリアル通信に使用するArduinoの送受信端子を3パターンから選択
  • 詳細はこちら
Page Top
CN1 anchor.png
CN1.png
  • JST B2P-VH-B
  • CN2~6,CN7~11のVDD/GND端子へ接続
  • JP1をショートすることでArduinoへ本電源を供給可
    その場合はArduinoのVinが許容する電圧範囲である事
    PWR_connector.png
:idea:電源の逆接続は電源回路の即時破壊・全損扱いとなる。
Page Top
CN2~CN6 anchor.png
  • Dynamixel用
    CN2-6_b.png
    • JST B3B-EH
    • TTL I/Fを搭載したDynamixelシリーズ用のコネクタ
    • SIGNAL端子は47kΩの抵抗を介して内部の5V電源へプルアップ済
    • 5つのコネクタはいずれも内部で並列に接続
    • TTL I/Fと電源は以下の端子に接続
      B3B-EH.png
      端子番号信号名
      1GND
      2VDD
      3SIGNAL(BIDIRECTION)
  • B3M/KRS用
    CN2-6_KO.png
    • ピンヘッダ
    • KONDO KRSシリーズ用のコネクタ
    • SIGNAL端子は47kΩの抵抗を介して内部の5V電源へプルアップ済
    • 5つのコネクタはいずれも内部で並列に接続
    • TTL I/Fと電源は以下の端子に接続
      [添付]
Page Top
CN7~CN11 anchor.png
  • Dynamixel用
    CN7-11_b.png
    • JST B4B-EH
    • RS-485 I/Fを搭載したDynamixelシリーズ用のコネクタ
    • D+/D-間にターミネータ装備
    • 5つのコネクタはいずれも内部で並列に接続
    • RS-485 I/Fと電源は以下の端子に接続
      B4B-EH.png
      端子番号信号名
      1GND
      2VDD
      3RS-485 D+
      4RS-485 D-
  • B3M/KRS用
    CN7-11_KO.png
    • JST B4B-XH
    • RS-485 I/Fを搭載したKONDO B3Mシリーズ用のコネクタ
    • D+/D-間にターミネータ装備
    • 4つのコネクタはいずれも内部で並列に接続
    • RS-485 I/Fと電源は以下の端子に接続
      [添付]
Page Top
ユーザランド anchor.png
URAND.png
  • 2.54mmピッチランド
  • 工作用
  • 5V0のシルクの囲みはArdunioから供給される5V、GNDのシルクの囲みはGNDに接続済
    それ以外のランドはフリー
Page Top

使用方法 anchor.png

Page Top

対応するデバイス anchor.png

I/FDevice Name
TTLDynamixel AX・MX(TTL版)・XLシリーズ全般, DXMIO(TTL), ToFセンサ(TTL)
RS-485Dynamixel DX・RX・EX・MX(RS-485版)・XM・XH・PROシリーズ全般, UD3, UD3.5, USS3, DXMIO(RS485), ToFセンサ(RS485)

要求される電源電圧が同じであれば、I/Fを問わず同時に使用することが可能です。

Page Top

接続方法 anchor.png

ここでは予めJP1~JP4にピンヘッダが装着されているものとします。

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

モード選択 anchor.png

Arduinoの種類に依存する部分が多々ありますが、ここではDXSHIELDをArduino UNOに装着して使用する前提として3つのモードを説明します。

Page Top
ソフトウェアシリアルモード anchor.png

ArduinoのIO8・IO9ピンをソフトウェアシリアルで構成しDynamixelを制御するモードです。ArduinoのUSBシリアル通信機能(ハードウェアシリアル)はDynamixelの制御以外の目的に使用できます。
Arduinoには任意の端子をシリアル通信の送受信端子として使用するSoftwareSerialライブラリが用意されています。あまり高速な通信には向きませんが、57600bps程度であれば十分実用レベルです。
SW1を図の位置(SOFT)に切り替えます。

mode1.png

本設定によりArduinoのデジタル入出力端子のうちIO8とIO9をソフトウェアシリアル用の端子として使用するため、この2つの端子は他の目的で使用してはなりません。
また、Arduinoにユーザのスケッチを転送する際は、無条件に本モードに変更しておかないと転送に失敗します。

Page Top
ハードウェアシリアルモード anchor.png

ArduinoのIO0・IO1ピンをハードウェアシリアルで構成しDynamixelを制御するモードです。USBシリアル通信機能を犠牲にしても高速かつ安定した通信を要求する場合にの設定です。
予めソフトウェアシリアルモードにおいてライブラリによる制御の理解が得られ、スケッチの書き込み時以外にUSBシリアルによる通信を必要としない場合に本設定を選択します。
SW1を図の位置(HARD)に切り替えます。

mode2.png

本設定を行った場合は、自身のスケッチでSerialライブラリを使用してはなりません。また、IO0・IO1ピンとUSBシリアル通信機能は他の目的で使用する事ができません。
なお、スケッチをコンパイルして描き込む際は、本設定が電気的にUSBシリアル通信機能に影響を及ぼすため、その都度ソフトウェアシリアルモードに切り替える必要があります。

Page Top
USBパススルーモード anchor.png

Arduinoに搭載されたUSBシリアル通信機能を用いてPCなどからDXSHIELDをDXHUBライクに直接使用するモードです。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)に切り替えます。

mode3.png
Page Top

ソフトウェア anchor.png

Page Top
Dynamixel Configurator, RoboPlus anchor.png

DXSHIELDをUSBパススルーに設定にする事で、Dynamixelのコントロールテーブルの状態をモニタしたりパラメータの変更や動作確認を簡便に行うソフトウェアであるDynamixel Configuratorが利用できます。
公開されているバージョンはWindows版のみとなります。

dxconf.png

Dynamixel Configuratorの詳細はこちらにて。

ROBOTIS社提供のRoboPlusはこちら

Page Top
Dynamixel Library for PC anchor.png

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

Dynamixel Libraryの詳細はこちらにて。

Page Top
Dynamixel Library for Arduino anchor.png

DXSHIELDをソフトウェアシリアルもしくはハードウェアシリアルモードに設定した場合、ArduinoのスケッチでDynamixelを制御するためのライブラリが利用できます。
本家Dynamixel Library同様にスケッチではシリアル通信である事を意識すること無くコントロールテーブルへの読み書きが行えますが、Arduino版はコードを端折り機能を限定したサブセット版となります。

  • ライブラリのダウンロード(Arduino UNOを想定)
    • Dynamixel Protocol V.2に対応
      低位の送受信関数追加
      32bitデータの送受信関数追加
      アドレスとサイズに関する引数は全て16bitに統一

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

DXLIB v1.1で使用できるヘッダファイルとAPIは以下の通りです。

  • dxlib.h
    Dynamixel Protocol V.1のデバイスを対象とする場合、dxlib.hをスケッチにインクルードする事でDXLIBクラスが利用できるようになります。なお、Arduinoのリソースの都合から、V.2との共存はできません。
    #include <dxlib.h>
    DXLIB dxif (true); // select software serial
    void setup() {
      dxif.begin (57600);
    }
  • dx2lib.h
    Dynamixel Protocol V.2のデバイスを対象とする場合、dx2lib.hをスケッチにインクルードする事でDX2LIBクラスが利用できるようになります。なお、Arduinoのリソースの都合から、V.1との共存はできません。
    #include <dx2lib.h>
    DX2LIB dxif (true); // select software serial
    void setup() {
      dxif.begin (57600);
    }
  • DXLIB/DX2LIB (bool ss, uint8_t txpin, uint8_t rxpin)
    ヘッダファイルに応じてDXLIBないしDX2LIBいずれかのクラスが使用できます。同時にソフトウェアシリアルの使用(ss)・送信端子(txpin)・受信端子(rxpin)を指定した上でオブジェクトを生成できます。
    なお、ssにtrueを指定したらソフトウェアシリアルモード、falseを指定したらハードウェアシリアルモードにDXSHIELDを設定しなくてはなりません。
    また、txpinrxpinはDXSHIELDを使用する限り指定してはなりません。
    #include <dx2lib.h>
    // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化
    // ソフトウェアシリアルモードで使用
    DX2LIB dxif(true);
  • void DXLIB/DX2LIB::begin (long baud)
    ライブラリを使用可能にします。引数(baud)にはDynamixelに設定されたボーレートを指定します。
    なお、選択したモードにより使用できるボーレートに制限があります。
    // 生成されたdxifを57143bpsで初期化
    void setup() {
      dxif.begin (57143);
    }
  • 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);
  • 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)
  • 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);
  • 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);
  • bool DXLIB/DX2LIB::ReadLongData (uint8_t id, uint16_t addr, uint32_t *data, uint8_t *err)
    指定されたID(id)・アドレス(addr)から32ビットのデータをdataへ読み出します。errにはDynamixelのエラーが返ります。
  • 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);
  • 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);
  • bool DXLIB/DX2LIB::WriteLongData (uint8_t id, uint16_t addr, uint32_t data, uint8_t *err)
    指定されたID(id)・アドレス(addr)・32ビットのデータ(data)をDynamixelに書き込みます。errにはDynamixelのエラーが返ります。
  • 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);
  • 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);
  • 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に書き込みます。
  • bool DXLIB/DX2LIB::Ping (uint8_t id, uint16_t *err)
    指定されたID(id)のDynamixelを検索します。errにはDynamixelのエラーが返ります。
  • 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>
Page Top

その他 anchor.png

Page Top

DXSHIELDのTTL・RS-485 I/Fについて anchor.png

  • 送信は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が接続された環境において一部のインストラクションが正常動作しない。
Page Top

注意事項 anchor.png

  • いずれの端子も絶縁されていない。そのため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のレジスト色を青から緑に

トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
最終更新: 2017-06-05 (月) 18:53:16 (JST) (17d)