ページへ戻る

− Links

 印刷 

BTH076 Dynamixel Starter Kit A のソース :: Besttechnology

knowledge:BTH076 Dynamixel Starter Kit Aのソース

  
TITLE:Dynamixel Starter Kit Aマニュアル
#norelated
#contents
[[ショップページへ>http://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=264]]

#ref(E133C_3D.png)
**概要 [#pa5b2c3d]
本製品はDynamixelを扱うにあたり基本的な事項を把握する事を目的としたキットです。別途PCを用意するだけで、Dynamixelを運転する最低限の装置が一通り揃います。~
PCをホストとしたプログラムによってDynamixelへの理解が進めば、Arduinoによる組み込みプログラミングにチャレンジしたり、Dynamixelを追加して自身のアプリケーションに組み込むといった事が可能です。

なおArduino UNOのUSBシリアル変換機能(主にATmega16U2を使用してるもの)はDynamixelとの通信に支障が生じる事がわかっているため、本製品ではFTDI社のUSBシリアル変換チップを使用しているNerOを採用しています。

**Dynamixel Starter Kit Aの特徴 [#zbac9e6c]
-[[DXSHIELD>BTE074B]]・[[NerO-SP1>https://www.ftdichip.com/old2020/Products/Modules/NerO.htm]](Arduino UNO互換)・[[XL430-W250-T]] x3・USBケーブル・ACアダプタを同梱
-PCもしくはNerOのいずれかをホストコントローラとして選択し使用
-はんだ付け不要
-Windows PCさえあれば一通り動作検証を行うためのハードウェアの準備が整う

**仕様 [#bd27d832]

***同梱内容 [#o9d779cc]
| 型式等 | 数量 | 備考 |h
|DXSHIELD | 1|[[BTE074B]] |
|Arduino UNO互換機| 1|[[NerO-SP1>https://www.ftdichip.com/old2020/Products/Modules/NerO.htm]] |
|HOLDER TYPE UNO | 1|[[X000018>https://store.arduino.cc/products/holder-type-uno]] |
|Arduinoリセット回避基板 | 1|[[Arduinoリセット回避基板(E197)>#l1c3c1a8]] |
|Dynamixel | 3|[[XL430-W250-T>XL430-W250]] |
|USBケーブル| 1|type A <-> micro B |
|ACアダプタ| 1|IN:AC100~240V, OUT:DC12V/3A |

-NerOのC16は取り外した上でE197から延びるリード線をハンダし、E197をNerOのISPコネクタに装着済み(NerOの回路図は[[こちら>https://www.ftdichip.com/old2020/Support/Documents/Schematics/NerOandCleO/NerOSchematic.PDF]])
-部品受給逼迫による影響によりDXSHIELDの一部のEHコネクタ(CN5~CN6、CN8~CN11)は未実装
-DXSHIELDのJ1~J4にはスタッキングコネクタではなく通常のピンヘッダを実装済み、JP1~JP3はジャンパではなくスズメッキ線で短絡済み、CN12にPJ-047AHを装着済み、J1/J2にTTL2DXIFを実装済み
-付属のACアダプタの電源容量では3台を同時に運転するには少々不足

****Arduinoリセット回避基板(E197) [#l1c3c1a8]
NerOに限らずArduinoはUSBシリアルI/Fを装備しており、シリアルデータの送受信信号の他にハードウェアフロー制御信号がArduinoのリセット端子に接続されています。主にArduino IDEからArduinoへプログラムを転送する前にATmega328Pをリセットさせる目的で備わっていますが、このハードウェアフロー制御信号は意図的なコードによる制御で変化する以外にも、USBケーブルの抜き差しや仮想COMポートのオープンだけでも変化するため、Arduinoでは暫し嫌われます。~
USBシリアル変換チップとATmega328Pのリセット端子間に挿入されている直列コンデンサを取り外す事でハードウェアフロー制御信号によるリセットを抑止する事ができますが、プログラムを転送する度に再度コンデンサを装着するのは面倒です。

そこでコンデンサを取り外していても再びハードウェアフロー制御信号を用いてリセットできるようにするための基板(E197)を用意しました。回路は以下の通りとても単純です。
#ref(E197_SCH.png)
本基板をArduinoのISP端子に装着し、コンデンサを取り外した空きパターンにリード線をつないて使用します。結果的にジャンパの挿抜のみでコンデンサが装着された状態と取り外した状態を作り出します。

**スターターキットを使う [#be654865]
基本的に[[DXSHIELD>BTE074B]]のマニュアルに記載されている使用方法と同等ですが、改めて要点を紹介します。

***各装置の接続 [#g7d8744a]
各運用条件に共通する装置の接続を以下に示します。
#ref(E133C_STARTERKIT_ASM.png,60%)

+NerOのISP端子(CN3)にE197を装着
+NerOの電源スイッチ(SW1)は常時ON
+DXSHIELDのJP2は常時ショート
+DXSHIELDのJP3は常時ショート
+DXSHIELDのJP1は常時ショート
+Robot Cable-X3PをDXSHIELDのCN2~CN4のいずれかに接続
+Robot Cable-X3PをDynamixelに接続
+USBケーブルをNerOとPC間に接続
+ACアダプタ(DC12V)をDXSHIELDのCN12に接続

なおNerOに備わっているDCジャック(CN2)は使用しません。またHOLDER TYPE UNOはNerOの端子が不用意に導電性のものに接触する事の無いよう必要に応じて使用します。

***PCをホストとする場合 [#vf746e3c]
PCからNerOに搭載されたUSBシリアル通信機能を中継し、最終的にDXSHIELDのTTL/RS-485 I/Fを介してDynamixelを制御します。
#ref(mode_through.png,60%)

まずNerOのCPUには何も仕事をさせないための設定を行っておく必要がありますが、
Arduino IDEにて以下のようなデフォルトで生成されるコード(GPIOやUARTを一切初期化や使用をしないスケッチ)を使用します。
#html{{
<pre class="brush: c;">
void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}
</pre>
}}
コンパイルができたらDXSHIELDをソフトウェアシリアルモード(SW1をSOFTの位置)に切り替えてからNerOに書き込みます。
#ref("BTE074B DXSHIELD/E133C_SW1_SOFT.png")

書き込んだらDXSHIELDをパススルーモード(SW1をTHROUGHの位置)に切り替えます。
#ref("BTE074B DXSHIELD/E133C_SW1_THROUGH.png")

最後にNerOのISPコネクタに装着された基板(E197)のジャンパピンを取り外します。これによりUSBポートからNerOをリセットする事ができなくなるため、USBポートのオープンと連動したNerOのリセットを防ぐ事ができます。~
特にDYNAMIXEL WizardはScan中のボーレートの切り替わるタイミングでもNerOをリセットさせてしまうため、この措置は必須となります。
#ref("NeroISP_JP_REMOVE.png",50%)
なおジャンパピンは無くさないようくれぐれも注意してください。

これ以後NerO+DXSHIELDはDynamixel用のTTL/RS-485 I/Fボードかつ電源分配装置としてのみ機能し、操作の主役はPCに委ねられます。

****PCからDynamixelを制御する [#a9ddd5be]
概ね[[DYNAMIXEL basic tutorial]]に記載された運用ができます。

なお同梱されるDynamixelはいずれも出荷時の状態(ID=1, Baudrate=57600bps)となっています。複数台を同時に運用する場合は、個々のDynamixelのIDを異なる値に設定してから使用してください。

またNerOに装備されたUSBシリアル変換チップの最大通信速度は3Mbpsとなりますので、この値を超えた運用はできません。

***NerOをホストとする場合 [#p0abefcf]
NerOに書き込んだプログラムによってDynamixelを制御します。Dynamixelとの通信に使用するNerOの端子によって2つのモードを用意していますが、いずれも何らかの制約が生じます。UARTを1チャネルのみ内蔵しているATmega328Pであるが故に致し方ないところです。

またNerOのISPコネクタに装着された基板(E197)のジャンパピンが取り外されていると、Arduino IDEからプログラムを書き込む事ができません。書き込む前には必ずジャンパを装着しておきます。
#ref("NeroISP_JP_MOUNT.png",50%)
なお本ジャンパが挿入されていると、NerOにUSBケーブルを接続したりPCからポートをオープンするタイミングでNerOは必ずリセットされます。NerOにプログラムが書き込まれた状態でそれらの操作によってNerOが再起動してしまう事が運用上問題になるのであれば、最終的にジャンパを外しても構いません。

****ソフトウェアシリアルモード[#ee08b548]
NerOのIO8・IO9ピンを用いてDynamixelと通信するモードです。NerOのUARTはシリアルモニタ等の任意の目的で自由に使えますが、DynamixelとはGPIOのON/OFFをタイミングを見計らいながら通信の処理を行うため、他の割り込みの影響を受けて正しい送受信が行えなかったり通信速度が上げられない等の弊害が生じます。
#ref(mode_soft.png,60%)

SW1を図の位置(SOFT)に切り替えます。
#ref("BTE074B DXSHIELD/E133C_SW1_SOFT.png")
本設定によりNerOのデジタル入出力端子のうちIO8とIO9をソフトウェアシリアル用の端子として使用するため、この2つの端子は他の目的で使用してはなりません。~
またNerOへプログラムを転送する際は、無条件に本モードに変更しておかないと転送に失敗します。

****ハードウェアシリアルモード [#ce79cebb]
NerOのIO0・IO1ピンを用いてDynamixelと通信するモードです。UART端子はNerOのUSBシリアル通信に接続されていますが、USBシリアル通信を犠牲にしても高速かつ安定したDynamixelとの通信を行いたい場合に選択します。
#ref(mode_hard.png,60%)
SW1を図の位置(HARD)に切り替えます。
#ref("BTE074B DXSHIELD/E133C_SW1_HARD.png")
本設定を行った後には、Dynamixelとの通信以外にIO0・IO1ピンとUSBシリアル通信機能を使用する事ができなくなります。シリアルモニタが使えないため、Serial.printの類を使用したデバッグができません。~
なおスケッチをコンパイルして描き込む際は、本設定が電気的にUSBシリアル通信機能に影響を及ぼすため、その都度ソフトウェアシリアルモードに切り替える必要があります。

****NerOのプログラミング [#b6f637ea]
*****Arduino IDE [#cc87ec57]
NerOはArduino UNO互換ですので、[[Dynamixel Library for Arduino>BTE074B#t98a44bc]]が利用できます。Arduino IDEにてNerOをホストとしたコーディングを行う場合の詳細はそちらを参照してください。
*****GCC Developer Lite [#d8d029e9]
最新の[[GCC Developer Lite>GDL]]はArduino UNOをターゲットとしてサポートしています。UARTとDynamixel Libraryのみですがライブラリを同梱していますので、これらを用いてDynamixelを制御するプログラミングが可能です。~
Arduino IDEで提供されるArduino用のライブラリは一切含まれていませんので、他のAVRマイコンボードシリーズと同様の扱いとなります。~
大まかな使用方法は以下の通りです。
+GDLBasalPack・GDLAvrPackそして必要に応じてGDLFPCPackを順にインストール
+Flash Writerを起動し、システムメニューの「avrdude command line option」をクリックし、コンボボックスから「-c arduino -e -F」を選択して「OK」ボタンを押す
#ref(GSL_FW_0.png)
+Flash WriterのシステムメニューのPropertyにチェックを入れ諸設定項目が表示された状態にする~
#ref(GSL_FW_1.png)
+以下の設定を行う~
CPU TYPE:「AVR:atmega328p」~
COM:ArduinoをUSBケーブルで接続した際に追加されるCOMポート~
BaudRate[bps]:「115200」~
#ref(GSL_FW_2.png)
最後にFlash Writerを終了する事で設定が保存される
+GCC Developer Liteを起動しツールメニュー→コンパイルオプション(O)をクリックし、表示されるダイアログボックスの設定リストから「ArduinoUNO」を選択
#ref(GSL_OPT_1.png)
+GCC Developer Lite上でのコーディングを終えたら、メニューの「コンパイル(C)」→「ビルド(B)」もしくは「F9」キーを押してコンパイル
+コンパイルが成功すると先ほどの設定が反映されたFlash Writeが起動するので、Arduino側の準備を整えて「Execute」ボタンを押す~
書き込みそのものはGDLAvrPackに同梱されるavrdudeが担う

テストがてら次のようなプログラムを作りました。詳細はライブラリのソースを参考にしてください。
>
#ref(dx2test.cpp)~
-TIMER2を割り込みなしでwait(ミリ秒待ち)とtickcount(実行時間測定)を作成
-プロトコルV2のサフィックス処理のいじわるテスト含む
-GDLに同梱のDX2LIBはクラス化されていないのでC言語でも利用可
-初期化方法がDynamixel Library for Arduinoとは異なりDX2_Openを使用
-DX2_Openの引数であるTDX2Host_ConfParamにはポートの初期化・指定バイト数受信・受信バッファクリア・指定バイト数送信の4つのUART関連の関数を定義
-ソフトシリアルの場合は1Mbps固定とする(ライブラリのバグの都合)

**その他 [#w7e62a68]
-JST社製コネクタの市場在庫が少ないため一部未実装状態で提供しているが、運用上不足する場合は別途調達した上で実装の事。
-Arduino UNOはリソースが少ない傾向なので、過度なワークメモリを要求するアプリケーションは避けざるを得ない。
-ソフトウェアシリアルで運用する場合の条件は厳しく、通信中に少しでも横やりが入ると正常なデータとして認識されなくなる。特に割り込みはご法度である。

  

  • BTH076 Dynamixel Starter Kit A のバックアップソース(No. All)