2: 2010-10-25 (月) 14:13:42 eid7gud | 現: 2010-11-05 (金) 19:44:27 eid7gud | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | TITLE:FDIII-HCで外部LEDを駆動する | + | TITLE:FDIII-HCで外付けLEDを点灯する |
#norelated | #norelated | ||
#contents | #contents | ||
Line 7: | Line 7: | ||
**概要 [#y31bc0e6] | **概要 [#y31bc0e6] | ||
- | ここではDynamixel I/O moduleを使って、FDIII-HCから外部LEDのON/OFF駆動とPWM信号で輝度を変えて点灯させる方法を紹介します。 | + | ここではMultifunction I/O moduleを使って、FDIII-HCから外部LEDのON/OFF駆動とPWM信号で輝度を変えて点灯させる方法を紹介します。 |
**用意するもの [#uc8087ab] | **用意するもの [#uc8087ab] | ||
-[[FDIII-HC]] | -[[FDIII-HC]] | ||
- | -[[Dynamixel I/O module]] | + | -[[Multifunction I/O module]] |
-LED | -LED | ||
- | -抵抗 | + | -数百Ωの抵抗 |
-ケーブル | -ケーブル | ||
-ハンダごて、ハンダ | -ハンダごて、ハンダ | ||
- | |||
- | あると良いもの | ||
-ユニバーサル基板 | -ユニバーサル基板 | ||
-ピンヘッダ | -ピンヘッダ | ||
-[[3ピンコネクタ>http://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=98]] | -[[3ピンコネクタ>http://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=98]] | ||
- | 使用するLEDとDynamixel I/O moduleの仕様を考慮し適切な抵抗値を選定してください。 | + | ハンダが苦手という方はブレッドボードを使用しても良いでしょう。 |
+ | |||
+ | Multifunction I/O moduleの仕様を考慮し適切なLEDと抵抗値を選定してください。 | ||
- | FDIII-HCの変わりにDynamixelコンフィギュレータを使用してパソコンと通信することも可能です。 | + | FDIII-HCの変わりに[[Dynamixelコンフィギュレータ]]を使用してパソコンと通信することも可能です。 |
**接続 [#ja34fcfb] | **接続 [#ja34fcfb] | ||
Line 36: | Line 36: | ||
#ref(figure4.png) | #ref(figure4.png) | ||
- | + | Multifunction I/O moduleのCN2のPin1:VOUT(5V)とPin6:PIO4の間にLEDと抵抗を接続します。LEDの向きを間違えないようにしましょう。 | |
- | Dynamixel I/O moduleのCN2のPin1:VOUT(5V)とPin6:PIO4の間にLEDと抵抗を接続します。LEDの向きを間違えないようにしましょう。 | + | |
LEDのON/OFF駆動ならPIO4~7、輝度を変えての点灯ならPIO4と5が利用できます。 | LEDのON/OFF駆動ならPIO4~7、輝度を変えての点灯ならPIO4と5が利用できます。 | ||
- | Dynamixel I/O moduleのCN2には、VCCとGND端子が1つずつしかありません。複数台のLEDを接続したり、後でLEDを取り外したりする場合は、ユニバーサル基板とピンヘッダで変換基板を作り、ケーブルと3ピンコネクタでセンサを接続するなどの工夫が必要です。 | + | Multifunction I/O moduleのCN2には、VOUTとGND端子が1つずつしかありません。複数台のLEDを接続したり、後でLEDを取り外したりする場合は、ユニバーサル基板とピンヘッダで変換基板を作り、ケーブルと3ピンコネクタでセンサを接続するか、ブレッドボードで配線するなどの工夫が必要です。 |
''変換基板作成例'' | ''変換基板作成例'' | ||
#ref(figure2.png) | #ref(figure2.png) | ||
+ | #ref(FDIII-HCにPSD距離センサの信号を取り込む/figure25.png) | ||
- | また複数のLEDを接続する場合には注意点があります。~ | + | 複数の機器を接続する場合には注意するべき点があります。~ |
- | Dynamixel I/O moduleのCN2のVCCから供給できる電流は300mAです。~ | + | Multifunction I/O moduleのCN2のVOUTから供給できる電流は限られています。~ |
- | LED点灯時の消費電流の合計が300mA以上にならないようにしてください。 | + | VOUTに接続する機器の消費電流が許容量をオーバーすると、Multifunction I/O module自体も同じ電源を使用しているため正常に動作しなくなります。 |
- | 300mA以上になる場合は、別途電源を用意し供給する必要があります。 | + | Multifunction I/O moduleが度々リセットするような場合は、別途電源を用意し外部機器に供給する必要があります。 |
+ | またPWM駆動のようにPIOをソース源とする場合は1端子あたり30mA以下に抑え、さらに全端子の電流が50mAを超えないように調整してください。 | ||
#ref(figure3.png) | #ref(figure3.png) | ||
- | DynamixelケーブルでFDIII-HCとDynamixel I/O moduleを接続します。 | + | DynamixelケーブルでFDIII-HCとMultifunction I/O moduleを接続します。 |
**PIO Configを変更する [#ea65bbe1] | **PIO Configを変更する [#ea65bbe1] | ||
- | コントロールテーブルのLEDを接続した端子に対するPIO Configを、ON/OFF駆動させる場合は1、輝度を変えたい場合は4に設定します。 | + | コントロールテーブルのLEDを接続した端子に対するPIO Configを、ON/OFF駆動させる場合は1、PWM信号で輝度を変えたい場合は4に設定します。 |
PIO Configの設定は、運用時のプログラム内では設定しないことをお勧めします。 | PIO Configの設定は、運用時のプログラム内では設定しないことをお勧めします。 | ||
PIO Configを含む電源を切っても保存されるEEPROMエリア(アドレス0~24)の書き換え回数には制限があるためです。 | PIO Configを含む電源を切っても保存されるEEPROMエリア(アドレス0~24)の書き換え回数には制限があるためです。 | ||
- | 制限といっても何十万回という数ですので、普通に使用していれば制限を越えることはありません。 | + | 制限といっても普通に使用していれば制限を越えることはまずありません。 |
- | しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があるためです。 | + | しかし誤ってプログラムのループの中で高速に書き換えを行ってしまった場合、あっと言う間に制限を越えてしまう危険性があります。 |
- | Dynamixel I/O moduleの設定の変更にはDxpacket Configuratorを使用します。 | + | PIO4 Configを1にするプログラムを以下に示します。 |
- | 基本的な使い方はDynamixel Configuratorと同じですのでそちらを参考にしてください。 | + | |
+ | #include <fd.h> | ||
+ | |||
+ | 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, 10, 1); | ||
+ | fd_printf ("Complete"); | ||
+ | fd_SoftReset(); | ||
+ | while (1); | ||
+ | } | ||
+ | |||
+ | 一度だけ実行しましょう。~ | ||
+ | 書き換えが終わるとブートローダへ戻ります。~ | ||
+ | PWM駆動をする場合は以下修正が必要です。 | ||
+ | |||
+ | fd_DXWriteByteData (200, 10, 1); | ||
+ | |||
+ | ここでIDが200のMultifunction I/O moduleのアドレス10を1に書き換えています。アドレス10はPIO4 Configです。~ | ||
+ | PWM駆動をする場合は第3引数は1ではなく4となります。~ | ||
+ | IDとアドレスは適宜変更してください。 | ||
**プログラミング [#k2387ac0] | **プログラミング [#k2387ac0] | ||
Line 73: | Line 95: | ||
ここではFDIII-HCのプログラムを作成するための準備や書き込み方法は省略します。 | ここではFDIII-HCのプログラムを作成するための準備や書き込み方法は省略します。 | ||
- | **ON/OFF駆動 [#ib89c218] | + | ***ON/OFF駆動 [#ib89c218] |
- | Dynamixel I/O moduleのPIO4に接続したLEDを1秒毎にON/OFFを切り替えます。 | + | Multifunction I/O moduleのPIO4に接続したLEDを1秒毎にON/OFFを切り替えます。 |
#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 DigitalOut = 255; // アドレス43の値 | uint8_t DigitalOut = 255; // アドレス43の値 | ||
+ | |||
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) { | ||
DigitalOut |= (1 << 4); | DigitalOut |= (1 << 4); | ||
- | fd_DXWriteByteData (1, 43, DigitalOut); | + | fd_DXWriteByteData (200, 43, DigitalOut); |
fd_Wait (1000); | fd_Wait (1000); | ||
DigitalOut &= ~(1 << 4); | DigitalOut &= ~(1 << 4); | ||
- | fd_DXWriteByteData (1, 43, DigitalOut); | + | fd_DXWriteByteData (200, 43, DigitalOut); |
fd_Wait (1000); | fd_Wait (1000); | ||
KEY_QUIT; | KEY_QUIT; | ||
Line 96: | Line 118: | ||
} | } | ||
- | **PWM駆動 [#vcf62c85] | + | デジタル出力の設定はアドレス43のDigital Outで行います。Digital Outのビット4を1にするとPIO4がHIGH(LED消灯)、0にするとLOW(LED点灯)となります。 |
- | PWM信号のデューティー比を変えるとこで、Dynamixel I/O moduleのPIO4に接続したLEDの輝度を変えます。 | + | ***PWM駆動 [#vcf62c85] |
+ | |||
+ | PWM信号のデューティー比を変えるとこで、Multifunction I/O moduleのPIO4に接続したLEDの輝度を変えます。 | ||
#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 Duty = 0; // アドレス43の値 | + | uint8_t Duty = 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_DXWriteByteData (1, 49, Duty); | + | fd_DXWriteByteData (200, 49, Duty); |
Duty++; | Duty++; | ||
if (Duty > 255) Duty = 0; | if (Duty > 255) Duty = 0; | ||
KEY_QUIT; | KEY_QUIT; | ||
- | } | + | } |
} | } | ||
+ | |||
+ | PIO4のデューティー比はアドレス49です。 |