12: 2017-06-25 (日) 13:32:38 takaboo ソース 13: 2017-06-25 (日) 20:34:18 takaboo ソース
Line 203: Line 203:
ここでは予めJP1~JP4にピンヘッダが装着されているものとします。 ここでは予めJP1~JP4にピンヘッダが装着されているものとします。
+ArduinoにDXSHIELDをスタックさせる。その際に両基板のピンヘッダ以外が物理的に接触していないこと。他のシールドを同時に使用する際は、DXSHIELDが使用済みの端子に十分配慮しておくこと。 +ArduinoにDXSHIELDをスタックさせる。その際に両基板のピンヘッダ以外が物理的に接触していないこと。他のシールドを同時に使用する際は、DXSHIELDが使用済みの端子に十分配慮しておくこと。
 +#ref(E133B_uno.png,80%)
+Dynamixelのコネクタと同じDXSHIELD上のコネクタ同士を接続する。DXSHIELDにはTTL・RS-485 I/F共に各々5個のコネクタが装備されているが、I/Fの種類が一致してさえいればどのコネクタを使用しても構わない。 +Dynamixelのコネクタと同じDXSHIELD上のコネクタ同士を接続する。DXSHIELDにはTTL・RS-485 I/F共に各々5個のコネクタが装備されているが、I/Fの種類が一致してさえいればどのコネクタを使用しても構わない。
+DXSHIELDのCN1にDynamixelが要求する仕様の電源を供給する。この時絶対に電源の極性を間違えてはならない。 +DXSHIELDのCN1にDynamixelが要求する仕様の電源を供給する。この時絶対に電源の極性を間違えてはならない。
Line 252: Line 253:
ROBOTIS社提供のRoboPlusは[[こちら>http://support.robotis.com/jp/software/​roboplus_main.htm]]。 ROBOTIS社提供のRoboPlusは[[こちら>http://support.robotis.com/jp/software/​roboplus_main.htm]]。
 +
 +なお、ArduinoのUSBシリアル通信機能は過度なトラフィックがかかるとデータがドロップすることが頻繁に発生するようです。
****Dynamixel Library for PC [#x91df052] ****Dynamixel Library for PC [#x91df052]
Line 262: Line 265:
本家Dynamixel Library同様にスケッチではシリアル通信である事を意識すること無くコントロールテーブルへの読み書きが行えますが、Arduino版はコードを端折り機能を限定したサブセット版となります。 本家Dynamixel Library同様にスケッチではシリアル通信である事を意識すること無くコントロールテーブルへの読み書きが行えますが、Arduino版はコードを端折り機能を限定したサブセット版となります。
--ライブラリのダウンロード(Arduino UNOを想定)~+-ライブラリのダウンロード(Arduino UNO/MEGAを想定)~ 
 +-- 
 +#ref(dxlib1.2_for_arduino.zip) 
 +任意のハードウェアシリアルポートへの割り当て対応 
-- --
#ref(dxlib1.1_for_arduino.zip) #ref(dxlib1.1_for_arduino.zip)
Line 277: Line 284:
インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。詳しくはサンプルプログラムとライブラリのソースを参照して下さい。~ インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。詳しくはサンプルプログラムとライブラリのソースを参照して下さい。~
-DXLIB v1.1で使用できるヘッダファイルとAPIは以下の通りです。+DXLIB v1.2で使用できるヘッダファイルとAPIは以下の通りです。
-&color(#0099ff){''dxlib.h''};~ -&color(#0099ff){''dxlib.h''};~
Dynamixel Protocol V.1のデバイスを対象とする場合、'''dxlib.h'''をスケッチにインクルードする事で'''DXLIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、V.2との共存はできません。 Dynamixel Protocol V.1のデバイスを対象とする場合、'''dxlib.h'''をスケッチにインクルードする事で'''DXLIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、V.2との共存はできません。
Line 292: Line 299:
   dxif.begin (57600);    dxif.begin (57600);
 }  }
--&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, uint8_t rxpin, uint8_t txpin)};~ +-&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, HardwareSerial *hws, uint8_t rxpin, uint8_t txpin)};~ 
-ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。同時にソフトウェアシリアルの使用('''ss''')・受信端子('''rxpin''')・送信端子('''txpin''')を指定した上でオブジェクトを生成できます。~+ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。同時にソフトウェアシリアルの使用('''ss''')・ハードウェアシリアルオブジェクト('''hws''')・受信端子('''rxpin''')・送信端子('''txpin''')を指定した上でオブジェクトを生成できます。~
なお、'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~ なお、'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~
-また、'''rxpin''''''txpin'''は通常指定する必要はありませんが、他のSHIELDやArduinoの機能の都合で使用できない場合に限り指定します。+また、'''hws'''や'''rxpin''''''txpin'''は通常指定する必要はありませんが、他のSHIELDやArduinoの機能の都合で使用できない場合に限り指定します。
 #include <dx2lib.h>  #include <dx2lib.h>
 // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化  // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化
Line 372: Line 379:
-TTLとRS-485のI/F間をまたいだ送受信はできないため、TTL・RS-485の両I/FにDynamixelが接続された環境において一部のインストラクションが正常動作しない。 -TTLとRS-485のI/F間をまたいだ送受信はできないため、TTL・RS-485の両I/FにDynamixelが接続された環境において一部のインストラクションが正常動作しない。
***Arduino MEGAでの使用 [#z23d4b7d] ***Arduino MEGAでの使用 [#z23d4b7d]
-少しの改造でDXSHIELDをArduino MEGAでも使用する事ができます。+少しの改造でDXSHIELDをArduino MEGAで使用する事ができます。DXSHIELDは次の図の位置に装着します。 
 +#ref(E133B_mega.png,80%) 
****ハードウェアシリアルモード [#aaf5bd9a] ****ハードウェアシリアルモード [#aaf5bd9a]
-UNO同様にハードウェアシリアルモードではSerialを利用する限りUNOと同様の運用で利用できます。しかしMEGAには追加でSerial1~Serial3のハードウェアシリアルポートが備わっていますので、それらのポートを利用する事で最大のパフォーマンスを発揮できます。 +デフォルトのSerialを利用する限りUNOと同様の運用で利用できます。しかし、MEGAには追加でSerial1~Serial3のハードウェアシリアルポートが備わっていますので、それらのポートを利用する事で最大のパフォーマンスを発揮できます。 
--例えばSerial3を利用する際は、DXSHIELDのIO8とIO9をMEGAのIO14とIO15にジャンパ等でつなぐ。 +-ハードウェアシリアルモードではあるが、SW1を常時SOFTの位置にしておく。 
-#ref(E133B_mega_hard.png) +#ref(mode1.png,60%) 
--+-Serial3を利用する際は、DXSHIELDのIO8とIO9をMEGAのIO15とIO14にジャンパ線でつなぐ。Seral1ならIO17とIO16、Serial2の場合はIO19とIO18に読み替える。 
 +#ref(E133B_mega_hard.png,80%
 +-ジャンパ先のSerial3に合わせてクラスの初期化を変更(DXLIB v1.2以降でサポート)。 
 + DXLIB dxif (false, &Serial3); 
 + DX2LIB dxif (false, &Serial3); 
 +-IO8・IO9は使用不可 
****ソフトウェアシリアルモード [#b9557fa4] ****ソフトウェアシリアルモード [#b9557fa4]
次の作業が必要です。~ 次の作業が必要です。~
--Arduino MEGAではIO8は[[ソフトウェアシリアルの受信端子>https://www.arduino.cc/en/Reference/Sof​twareSerial]]として使用できないため、ジャンパなどでIO8とIO10を短絡。+-SW1を常時SOFTの位置にしておく。 
 +#ref(mode1.png,60%) 
 +-Arduino MEGAではIO8は[[ソフトウェアシリアルの受信端子>https://www.arduino.cc/en/Reference/Sof​twareSerial]]として使用できないため、ジャンパ線でIO8とIO10を短絡。
#ref(E133_mega_jumper.png) #ref(E133_mega_jumper.png)
-入れ替えた端子に合わせてクラスの初期化を変更。~ -入れ替えた端子に合わせてクラスの初期化を変更。~
- DXLIB dxif (true, 10, 9); // rxpin IO8->IO10, txpin IO9 + DXLIB dxif (true, NULL, 10, 9); // rxpin IO8->IO10, txpin IO9 
- DX2LIB dxif (true, 10, 9); // rxpin IO8->IO10, txpin IO9 + DX2LIB dxif (true, NULL, 10, 9); // rxpin IO8->IO10, txpin IO9 
- +-IO8・IO9・IO10は使用不可
-なお、そもそもArduino MEGAはハードウェアシリアルポートを複数備えていますので、機能の制約が大きいソフトウェアシリアルを利用する利点は皆無です。送受信端子をSerial1(TX:18,RX:19)、Serial2(TX:16,RX:17)、Serial3(TX:14,RX:15)等に割り振り直し、ライブラリを適宜修正する事で最大限のパフォーマンスを発揮できるでしょう。+
***注意事項 [#o2f97e11] ***注意事項 [#o2f97e11]
Line 396: Line 412:
--JST製XHコネクタの装備に対応 --JST製XHコネクタの装備に対応
--PCBのレジスト色を青から緑に --PCBのレジスト色を青から緑に
 +-RS-485 I/FのD+/D-ライン間に挿入されているターミネータ(R1)により正常な通信が行えないデバイスが存在する。ターミネータを除去しても正常な通信が行えない場合は、バイアス抵抗等を挿入してみる事。
-FUTABA社製コマンド式サーボのうち、JST社B4B-EHコネクタを装備してるものはDynamixelのそれとはピンアサインが異なるため、絶対に接続しない事。 -FUTABA社製コマンド式サーボのうち、JST社B4B-EHコネクタを装備してるものはDynamixelのそれとはピンアサインが異なるため、絶対に接続しない事。


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