この記事では LED に流れる電流をきちんと制御する方法を紹介します。オペアンプを用いることで非常に簡単に作成できます。
LED に流れる電流を電圧で制御したい
LED に流れる電流を、電圧に比例して制御したくなりました。具体的には制御電圧 0V~3.3V で 0~1mA の範囲で電流を変化させたいです。
これは電圧で LED の電流を制御するもっとも原始的な回路です。電圧を上げるほど多くの電流を流せる、という意味で、電流を電圧により制御している、と言えます。
しかし LED が順方向電圧(VF)を持つため、この回路では LED の電流は「電圧に比例」しません。LED というのは、VF より電圧が低いときは電流がほとんど流れず、VF を超えた途端に急に大きな電流が流れ始めるという特性があります。今回は、電圧が 0V のとき 0mA、0.33V のとき 0.1mA、0.66V のとき 0.2mA、というように、電圧に比例した電流を流したいので、もっと回路を工夫する必要があります。
オペアンプで電流を制御する
オペアンプを使うと電圧に比例した電流を流す回路をとても簡単に作れます。
ぱっと見ると複雑な回路に見えますが、中心的な役割を果たすのは U1D と D1、R19 の 3 つの部品だけです。まずはここに注目して説明します。
今回、電流の制御したい LED は D1 です。D1 に流れる電流をオペアンプ U1D[1] で制御します。
オペアンプの +/- 端子(12、13 番)は入力端子で、この端子には電流は流れ込みません。三角形の頂点から出ている端子(14 番)は出力端子で、ここから電流が出力されます。
オペアンプの詳しい仕組みは他所に譲りますが、簡単に説明すると、オペアンプは + 端子と - 端子の電位差が無くなる[2]ように、出力電圧を調整します。言い方を変えると、- 端子からみた + 端子の電圧を無限大に増幅して出力します。
何を言っているかよく分からないかもしれませんが、要するに、LED_C 点の電圧が、ATTEN 点の電圧と等しくなるように、LED_A 点の電圧が調整される、ということです。
ATTEN 点の電圧が x[V] だとします。オペアンプの作用によって、LED_C 点の電圧も x[V] となります。R19 に流れる電流は、オームの法則より x/330[A] = x/0.33[mA] となります。
オペアンプの - 端子には電流が流れないということは、R19 に流れる電流と D1 に流れる電流は等しくなります。したがって、D1 に流れる電流も x/0.33[mA] ということになりますね。
これをグラフにすると下図となります。
オペアンプを使って、電圧に比例した電流を LED に流すことができました!R19 の抵抗値を調整することによって、ある電圧に対応する電流値(グラフの傾き)を変化させられます。
のこぎり波による動作観察
ATTEN 点にのこぎり波を流して動作を観察します。流すのこぎり波は下図の通りです。(ATTEN 点にはこの電圧を 1/10 に減衰させた電圧がかかります)
のこぎり波で LED 電流を制御する様子を示します。
赤色 LED がだんだん明るくなり、ある時点で一気に暗くなる、というのを繰り返しています。LED の電流値がのこぎり波にしたがって変化していることがよく分かりますね。
ラダー抵抗回路とオペアンプ
R1 から R16 はラダー抵抗回路[3]といって、一種の D/A 変換器です。R1 から R8 に 0V/3.3V で変化するデジタル信号を入力すると、DAC_OUT 点に 0V から約 3.3V までのアナログ信号が出力されます。8 ビットのデジタル信号を 256 段階のアナログ電圧に変換しているわけです。R1 に最上位ビットを、R8 に最下位ビットを接続します。
ラダー抵抗回路は、明らかに出力抵抗が高い構成になっています。DAC_OUT 点から電流が漏れてしまうと、正しい電圧が出力できなくなります。
そこで、DAC_OUT にオペアンプを接続することで、電流を流すことなく、電圧だけを読み取るようにします。この目的には、U1C のように - 端子と出力端子を短絡したオペアンプ回路を用います。このような回路をボルテージフォロワといいます。
ボルテージフォロワでは、+ 端子には電流が流れ込まないにも関わらず、オペアンプの作用によって + 端子と - 端子(と、そこに接続された出力端子)の電位差が等しくなります。これで、電流を流すことなく電圧だけを読み取ることができました。
DAC_OUT 点の電圧は 0V~3.3V で変化します。一方、先ほど作った電流制御回路は 0V~0.33V の入力を期待しています。ですから、信号を 1/10 に減衰させる必要があります。
そのために R17 と R18 によって分圧を行います。本来なら 1kΩ と 9kΩ を使いたいところですが、9kΩ の抵抗はなかなか売っていません。そこで、入手性が良い値 9.1kΩ で代用しました。ATTEN には 0V~3.3V を 1/(1+9.1) = 1/10.1 に分圧した電圧が現れます。
※2021/09/08:R17 と R18 の順序が逆だったので図を差し替えました。古い図では R17 が 1kΩ になってしまっており、分圧比が 9.1/(1+9.1) = 9.1/10.1 となる回路になっていました。
オペアンプはどうやって電流を制御するか
蛇足ですが、オペアンプ U1D が D1 の電流を制御する仕組みについて、説明を加えておきましょう。
オペアンプは - 端子からみた + 端子の電圧を無限倍して出力します。これは理想オペアンプの動作であり、実際のオペアンプはもちろん無限倍ということはありませんが、回路の設計ではしばしば理想オペアンプが登場します。現実のオペアンプ製品は、上記のような簡単な回路であれば無限倍と見なしても問題無い程度には大きな倍率(電圧利得、ゲイン)を持っています。
もし、LED_A 点の電圧が低く、D1 に十分な電流が流れていない場合、R19 に発生する電圧降下は小さい値になります。R19 の電圧降下が小さく、LED_C 点の電圧[4] < ATTEN 点の電圧である場合、オペアンプは LED_C 点と ATTEN 点の電圧の差を無限倍して出力しようとします。現実には出力電圧はオペアンプの電源電圧(+5V)を超えることはできませんから、LED_A 点の電圧はある電圧まで振り切れることになります。
しかし、オペアンプの出力端子がある程度まで上がると、D1 に十分な電流が流れ、R19 に発生する電圧降下が十分な大きさになり、LED_C 点の電圧 = ATTEN 点の電圧となります。こうなると、+/- 端子の電圧の差が 0 になり、出力電圧の上昇はそこで止まります。(0V を何倍しても 0V ですからね)
逆に LED_A 点の電圧が高すぎる場合は、D1 に過剰な電流が流れ、R19 の電圧降下が大きくなり、LED_C 点の電圧 > ATTEN 点の電圧となるため、逆にオペアンプは出力電圧を下げようとします。(LED_C 点からみた ATTEN 点の電圧が負となるため、出力を負の無限大にしようとするのです。現実には 0V に振り切れることになります。)
結局のところ、ATTEN 点の電位と LED_C 点の電位は常に同じに保たれるのです。オペアンプは、LED_C 点の電圧より VF だけ高い電圧を LED_A に発生させることにより、D1 に指定した電流が流れるように自動調整してくれている、というわけです。
実際の LED は VF は固定ではなく、流す電流により変化しますが、オペアンプはその変化をも吸収し、指定した電流を流してくれます。
PWM による明るさ調整方法との違い
PWM という方式でも LED の明るさを制御することができます。
PWM は、デジタル信号を高速に ON/OFF させることによって、平均的な明るさを調整する方式です。細かく見れば、LED は点灯状態と消灯状態を交互に繰り返します。点灯と消灯の時間の比率(デューティー比)を変えることで、明るさを調整するのです。
PWM はデジタル信号の端子 1 本だけで明るさを調整できます。Arduino のようなマイコンに接続した LED の明るさを調整するような用途では最適でしょう。そのような場面では、わざわざラダー抵抗回路でアナログ信号を生成するよりも PWM の方がシンプルですね。
本記事で紹介した LED の電流制御方法は、もともとがアナログ信号であるような電圧によって LED の明るさを調整する場合にぴったりです。アナログ信号の発生源としてたまたまラダー抵抗回路を使っただけであって、ラダー抵抗回路でアナログ電圧を生成することはこの記事の本質ではありません。例えばマイクやギターの出力など、元からアナログな信号でもって LED を制御する場合、本記事が役立つことでしょう。
LM324 という IC は、1 つの IC に 4 つのオペアンプが入っています。回路図では、それぞれを区別するために A から D までの記号を振り、U1C や U1D などと表記しています。 ↩︎
+ 端子と - 端子があたかもショートしているように見えるので、イマジナリショート(仮想短絡、あるいは仮想接地)と呼びます。ショートといっても電流は流れません。 ↩︎
ラダー抵抗回路の動作原理は http://mitt.la.coocan.jp/pic/pic7_16.html が分かりやすかったです。 ↩︎
電圧は 2 点間の電位差のことです。基準点を明示しない場合は、回路の GND 端子を電位の基準とするのが一般的です。したがって「LED_C 点の電圧」とは、GND 端子を基準とした LED_C 点の電位、ということになります。 ↩︎
投稿者の人気記事
-
uchan
さんが
2021/08/15
に
編集
をしました。
(メッセージ: 初版)
-
uchan
さんが
2021/08/16
に
編集
をしました。
(メッセージ: 脚注の先頭が記号だと表示が崩れるので修正)
-
uchan
さんが
2021/09/08
に
編集
をしました。
(メッセージ: R17とR18の順序を修正)
ログインしてコメントを投稿する