マイコンでLEDを発光制御する場合、一番単純な方法は、ポートにLEDをつないでオンオフ制御する。
ポートのオンオフが5V/0V、LEDの降下電圧を2Vとすると、5-2=3Vの電圧に対してどれだけの電流を設定するか(どれだけの抵抗を挟むか)によりLEDの光量が決まる。
ポートから電流を流れださせる(ソースカレント)か、ポートに電流を流れこませる(シンクカレント)かの方法がある。
ポートから流れ出す電流値(と全てのポートから流れだす電流値の総和)、ポートに流れ込む電流値(と全てのポートから流れこむ電流値の総和)にはマイコンによって上限制限があり、普通は流れこませる電流値上限のほうが高い。
シンクカレントでも上限に引っかかる場合には、トランジスタやFETを使って別途用意した電源から電流を流すようにする。
トランジスタを使用する場合、ポート電流を設定する抵抗と、LEDに流す電流を設定する抵抗と、を回路に追加する必要があるので部品数が増加する。1個や2個のLEDなら苦にはならないが、5個、6個、…となるとめんどくさい。
なので、TD62003のようなあらかじめ抵抗とトランジスタの組が1つに組み込まれた部品を使ってサボる。
TD62003を使用する場合には、制御するLEDの数だけポートとLED電流制限の抵抗を用意して構成する。
PWMを使えるポートなら、LEDの光量制御も今まで通りにできる。
しかし、10個を超えるようなLED制御をしようとすると、1個ずつポートに接続していてはマイコンのポートが足りなくなる。
なので、74HC595のような汎用シフトレジスタを使用してシリアル→パラレル変換してしのぐ。74HC595は、カスケード接続してもオーバーフローピンとデータピンをつないでいけば制御プログラム側をいじることなく増やしていける。
でも今度はPWMによる光量制御ができなくなる。個別の光量制御ならまだしも、全てのLEDの光量制御を同時にできないのはツライ。個別の光量制御もソフトウェア側で工夫すればできないことはないが(PWMでなくBAMとかBCMとかよばれるやつをプログラムして)、お手軽じゃぁない。
ソフト側での調整でなくてもいいから、可変抵抗を回しての全体調整でもよいのだがそれもできない。(いや、考察と実験が足りないのかもしれないけど。。。)電流制限の抵抗を一旦はんだづけしたら取り外すのは面倒だから、簡単に調整したいのだ。
追記:) 連続電流でなければ、595のenable/disableをいじればいいのか。でもポート使うのもったいないしなぁ。。。
ってことで、最終的にはTLC5940のようなLEDを駆動するのに必要な機能が揃っている半導体の使用に行き着く、のだろうか。
0 件のコメント:
コメントを投稿