2: 2010-10-12 (火) 18:51:01 eid7gud ソース 現: 2010-11-05 (金) 19:39:06 eid7gud ソース
Line 1: Line 1:
-TITLE:FDIII-HCで反射型フォトインタラプタを使う方法+TITLE:FDIII-HCに反射型フォトインタラプタの信号を取り込む
#norelated #norelated
#contents #contents
Line 14: Line 14:
それに対しFDIII-HCは、Dynamixelプロトコルに則ったシリアル通信を行うことでDynamxielと通信を行っています。故に反射型フォトインタラプタをFDIII-HCに直接接続して運用することはできません。 それに対しFDIII-HCは、Dynamixelプロトコルに則ったシリアル通信を行うことでDynamxielと通信を行っています。故に反射型フォトインタラプタをFDIII-HCに直接接続して運用することはできません。
-そこで必要になるのがDynamixelConverterです。DynamixelConverterは、センサからのアナログ・デジタル信号を取り込み、FDIII-HCへDynamixelプロトコルに則ってその情報を渡す、云わば中継役です。+そこで必要になるのがMultifunction I/O moduleです。Multifunction I/O moduleは、センサからのアナログ・デジタル信号を取り込み、FDIII-HCへDynamixelプロトコルに則ってその情報を渡す、云わば中継役です。
-ここではDynamixelConverterを使って、反射型フォトインタラプタの信号をFDIII-HCへ取り込む方法を紹介します。+ここではMultifunction I/O moduleを使って、反射型フォトインタラプタの信号をFDIII-HCへ取り込む方法を紹介します。
**用意するもの [#ia904fd4] **用意するもの [#ia904fd4]
-[[FDIII-HC]] -[[FDIII-HC]]
--[[DynamixelConverter]]+-[[Multifunction I/O module]]
-[[反射型フォトインタラプタ]] -[[反射型フォトインタラプタ]]
-ケーブル -ケーブル
-ハンダごて、ハンダ -ハンダごて、ハンダ
 +-ユニバーサル基板
 +-ピンヘッダ
 +-[[3ピンコネクタ>http://www.besttechnology.co.jp/modules​/onlineshop/index.php?fct=photo&p=98]]
-ケーブルには必要に応じてノイズの混入を防ぐためのシールド等の措置を講じてください。また、ケーブルが長過ぎると信号の劣化に繋がります。+ハンダが苦手という方はブレッドボードを使用しても良いでしょう。
FDIII-HCの変わりに[[Dynamixelコンフィギュレータ]]を使用してパソコンと通信することも可能です。 FDIII-HCの変わりに[[Dynamixelコンフィギュレータ]]を使用してパソコンと通信することも可能です。
Line 31: Line 34:
**接続 [#zc590dd4] **接続 [#zc590dd4]
-DynamixelConverterと反射型フォトインタラプタを接続します。 +下図の様に配線を行います。
- +
-下図の様に、ケーブルをそれぞれの端子にハンダ付けします。~+
#ref(figure1.png) #ref(figure1.png)
-反射型フォトインタラプタのVCCにDynamxielConverterのCN2のPin1:VOUT(5V)を接続し、電源を供給します。これにより反射型フォトインタラプタのOUTから出力されるHigh時の電圧は5Vとなります。+反射型フォトインタラプタのVCCにMultifunction I/O moduleのCN2のPin1:VOUT(5V)を接続し、電源を供給します。これにより反射型フォトインタラプタのOUTから出力されるHigh時の電圧は5Vとなります。
-反射型フォトインタラプタのGNDとDynamxielConverterのCN2のPin10:GNDを接続します。+反射型フォトインタラプタのGNDとMultifunction I/O moduleのCN2のPin10:GNDを接続します。
-反射型フォトインタラプタのOUTとDynamxielConverterのCN2のPin2:P1を接続します。勿論P2~P8でも構いません。+反射型フォトインタラプタのOUTとMultifunction I/O moduleのCN2のPin2:PIO0を接続します。勿論PIO1~PIO7でも構いません。 
 + 
 +Multifunction I/O moduleのCN2には、VOUTとGND端子が1つずつしかありません。複数台のセンサを接続したり、後でセンサを取り外したりする場合は、ユニバーサル基板とピンヘッダで変換基板を作り、ケーブルと3ピンコネクタでセンサを接続するか、ブレッドボードで配線するなどの工夫が必要です。
#ref(figure2.png) #ref(figure2.png)
 +#ref(FDIII-HCにPSD距離センサの信号を取り込む/figure25.png)
-DynamxielConverterのCN2には、VCCやGND端子が1つしかありません。複数の反射型フォトインタラプタを接続する場合、1つの端子に何本ものケーブルをハンダ付けするのは危険です。+複数のセンサを接続する場合には注意するべき点があります。
-変換基板やコネクタ等を用意し、接続数分の端子を用意するなど工夫をしましょう。 +Multifunction I/O moduleのCN2のVOUTから供給できる電流は限られています。~ 
-また、いつでも付け替えられるようにしておくとより便利です。+VCCに接続する機器の消費電流が許容量をオーバーすると、Multifunction I/O module自体も同じ電源を使用しているため正常に動作しなくなります。 
 +Multifunction I/O moduleが度々リセットするような場合は、別途電源を用意しセンサに供給する必要があります。 
 + 
 +別途電源を用意する場合、反射型フォトインタラプタに供給する電源の電圧は5Vでなければならないということに注意してください。 
 +反射型フォトインタラプタのOUT端子から出力される電圧はHighのとき電源電圧と等しい値になります。 
 +Multifunction I/O moduleのデジタル入力Highレベル電圧範囲は3~5.5Vです。反射型フォトインタラプタの電源電圧範囲が5~12Vだからといって12Vを入力すると、反射型フォトインタラプタのOUT端子から12Vが出力され、Multifunction I/O moduleが破損してしまいます。
#ref(figure3.png) #ref(figure3.png)
-DynamixelケーブルでFDIII-HCとDynamixelConverterを接続します。+DynamixelケーブルでFDIII-HCとMultifunction I/O moduleを接続します。
-**Modeを変更する [#ycd5aec4]+**PIO Configを変更する [#ycd5aec4] 
 +コントロールテーブルの反射型フォトインタラプタを接続した端子に対するPIO Configを0に設定します。
-Modeの設定は、運用時のプログラム内では設定しないことをお勧めします。 +PIO Configの設定は、運用時のプログラム内では書き変えないことをお勧めします。 
-Modeを含む電源を切っても保存されるEEPROMエリア(アドレス0~24)の書き換え回数には制限があるためです。+PIO Configを含む電源を切っても保存されるEEPROMエリア(アドレス0~24)の書き換え回数には制限があるためです。
 +制限といっても普通に使用していれば制限を越えることはまずありません。 
 +しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があります。
-制限といっても何十万回という数ですので、普通に使用していれば制限を越えることはありません。 +PIO0 Configを0にするプログラムを以下に示します。
-しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があるためです。+
-DynamixelConverterの設定の変更にはDxpacket Configuratorを使用します。 + #include <fd.h> 
-基本的な使い方はDynamixel Configuratorと同じですのでそちらを参考にしてください。+  
 + void main (void) { 
 +   fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); 
 +  
 +   fdWait(2000); 
 +   fd_DXWriteByteData (200, 6, 0); 
 +   fd_printf ("Complete"); 
 +   fd_SoftReset(); 
 +   while (1); 
 + } 
 + 
 +一度だけ実行しましょう。~ 
 +書き換えが終わるとブートローダへ戻ります。 
 + 
 + fd_DXWriteByteData (200, 6, 0); 
 +ここでIDが200のMultifunction I/O moduleのアドレス6を0に書き換えています。アドレス6はPIO0 Configです。~ 
 +IDとアドレスは適宜変更してください。
**プログラミング [#k2387ac0] **プログラミング [#k2387ac0]
Line 68: Line 95:
ここではFDIII-HCのプログラムを作成するための準備や書き込み方法は省略します。 ここではFDIII-HCのプログラムを作成するための準備や書き込み方法は省略します。
-DynamixelConverterのP1に接続した反射型フォトインタラプタの状態を取得し、それを表示するプログラムは以下のようになります。+Multifunction I/O moduleのPIO0に接続した反射型フォトインタラプタの状態を取得し、それを表示するプログラムは以下のようになります。
 #include <fd.h>  #include <fd.h>
 #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();}  #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();}
 + 
 void main (void) {  void main (void) {
   uint8_t ReadData;  // アドレス42の値    uint8_t ReadData;  // アドレス42の値
-   bool P1;          // アドレス42のビット0の値 +   bool PIO0;          // アドレス42のビット0の値 
 + 
   fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4);    fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4);
 + 
   while (1) {    while (1) {
-     fd_DXReadByteData (1, 42, &ReadData); +     fd_DXReadByteData (200, 42, &ReadData); 
-     P1 = (ReadData & (1 << 0) ) >> 0; +     PIO0 = (ReadData & (1 << 0) ) >> 0; 
-     fd_printf ("%d : %d\r", ReadData, P1);+     fd_printf ("%d : %d\r", ReadData, PIO0);
     KEY_QUIT;      KEY_QUIT;
  }   }
Line 89: Line 116:
---- ----
- fd_DXReadByteData (1, 42, &ReadData); + fd_DXReadByteData (200, 42, &ReadData); 
-DynamixelConverter(ID=1)のDigital In(アドレス42)のデータをReadDataに代入しています。IDを変更した場合は適宜書き換えてください。+Multifunction I/O module(ID=200)のDigital In(アドレス42)のデータをReadDataに代入しています。IDを変更した場合は適宜書き換えてください。
---- ----
- P1 = (ReadData & (1 << 0) ) >> 0; + PIO0 = (ReadData & (1 << 0) ) >> 0; 
-Digital In(アドレス42)のデータからビット0の値だけを取り出しています。本来は「P1 = ReadData & 1;」だけで良いのですが、P2~P8の値を取得する場合を想定しこのように表記しています。+Digital In(アドレス42)のデータからビット0の値だけを取り出しています。本来は 
 + PIO0 = ReadData & 1; 
 +だけで良いのですが、PIO1~PIO7の値を取得する場合を想定しこのように表記しています。
-それではP3に反射型フォトインタラプタを接続した場合を考えてみます。 +それではPIO2に反射型フォトインタラプタを接続した場合を考えてみます。 
- P3 = (ReadData & (1 << 2) ) >> 2; + PIO2 = (ReadData & (1 << 2) ) >> 2; 
-P3の値はReadDataのビット2です。ReadDataからビット2の値だけを取り出すには論理積(&)とビットシフト(<<又は>>)を使います。+PIO2の値はReadDataのビット2です。ReadDataからビット2の値だけを取り出すには論理積(&)とビットシフト(<<又は>>)を使います。
(1 << 2)は1を左に2ビットシフトさせた値です。2進数で書くと (1 << 2)は1を左に2ビットシフトさせた値です。2進数で書くと


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