2011年2月12日土曜日

PWM多チャンネル制御

ArduinoのPWMピンは3,5,6,9,10,11の6本しかないので、そのままでは最大で6個までしか制御することができません。
が、テキサス・インスツルメンツのTLC5940NTを繋げば、5ピンを使ってもっとたくさんのLEDを同時に制御できるらしいです。



Arduino.ccの公式解説
スイッチサイエンス:TLC5940NT

回路図は公式解説に分かりやすいイラストがあるので、それを参考にするといいかも。
こちらでライブラリをインストールし、以下のような感じでコードを書きます。

#include "Tlc5940.h"
int time;

void setup() {
Tlc.init(); // 初期化
}

void loop() {
time++;
pos = time % 16;
Tlc.clear();   // Tlcオブジェクトの全チャンネルを0に設定
Tlc.set(pos,4095);
Tlc.update();  // PWMの値を同時に更新
delay(25);
}


clear()で一度全てのチャンネルを初期化、set()でチャンネルと出力値を設定して、updateで状態を更新しているようです。



これはシリアル通信を制御してシーケンサーとしてMIDI信号と同期させてます。
ICを連結すると、16チャンネル毎にどんどん増やせるらしい、、、けど速度とか電力とかの問題でArduino単体では限度があると思います。

ただ、この動画実は3個連結してあります。公式サイトの通りに回路を組んだんですが、n個ICを連結させ、一個目のICを光らせると何故かn個目のICの出力まで変わってしまう奇妙な現象が発生。色々変えてみたんですが原因分かりません。。。どこか間違えてるのかな。

スイッチサイエンスではLED制御用とうたってますが、普通にPWM出力なんで、サーボ制御とかにも使えるんじゃないかと期待。

0 件のコメント:

コメントを投稿