VIVITABLOG

VIVITAで活躍するメンバーの情報発信サイト

ソフトウェアエンジニアの質問にハードウェアエンジニアが答える - LED編 -

VIVITAでハードウェアエンジニアをしている嶋田(@shozaburo)です。弊社はスタートアップなので、自分の専門分野に縛られずソフトウェアエンジニアが簡単な回路を手作りすることがあります。その際によく聞かれる「LEDに使用する抵抗値の決め方」についてご紹介したいと思います。

LEDを光らせる基本回路

f:id:shozaburo:20180323105323p:plain

電源(図中左)に、抵抗(図中右上R1)とLED(図中左下D1)を直列に接続したものです。LEDはダイオードの一種ですので、アノードに+、カソードに-となるように電圧をかけると、(厳密には違いますが)ショート状態と同じように大電流が流れてしまいます。もし抵抗R1が接続されていないと電源を直接ショートしているのと同じですから、大電流が流れ電源(e.g. バッテリー、USBチャージャー etc.)、ダイオードともに破壊の可能性があります。そこで抵抗R1を直列に接続することで流れる電流を制限してあげるというのがこの回路のイメージです。

この回路自体はネットで調べればよく出てくるものですが、それでも聞かれるのは「この抵抗R1の値はどうやって決めるのか?」です。

R1の抵抗値の決め方

以下の順番で考えていきます。

LEDに流す電流値を決める(=LEDの明るさを決める)

LEDの明るさは、LEDに流す電流で決まります(電圧ではない)ので、まずは流す電流値を決めます。

このときに思い浮かべてほしいのは、スマホの画面輝度です。スマホのLCDにもLEDが内蔵されていて、そのLEDに流す電流値で、画面輝度を調整しています。画面輝度が最大のときは内蔵LEDにはだいたいif(max)の20mAを流していますし、画面輝度が10%であればif(max):20mAの10%である2mAを流しています。

従って、電子工作でLEDの明るさを決めるときも、スマホの輝度を調整する感覚で

「今日は輝度10%で設計してみようかな?じゃ、if(max):20mA x 10% = 2mAね!」

と決めることができます。

スマホで画面輝度10%はかなり暗いのですが、普通の電子工作であればLEDにシートや筐体を被せたり、レンズをつけたりすることがなく明るさが減衰することがありませんからこれでも十分明るいです。

そこで、今日は2mAで計算を進めていきます。

データシートからLEDのVfを確認する

上図におけるダイオードでの電圧降下の値 Forward Volrage: Vfをデータシートから確認します。抵抗の場合はオームの法則(電圧=電流x抵抗)を用いて計算をするのが普通ですが、ダイオードはオームの法則に従いませんのでデータシートから答えを探します。LEDのデータシートには上述したVfという項が必ずあります。それのTyp値を確認してください。Min.やMax.値は部品のばらつきや条件などを考慮したワーストケースの値を記載していますので、プロのエンジニアでなければ気にする必要はありません。

f:id:shozaburo:20180323133143p:plain
http://akizukidenshi.com/catalog/g/gI-04780/より引用

このデータシートのLEDの場合はVf = 2.1Vです。

余談:興味ない方は読み飛ばしてください

データシートVfの横にCondition, If = 20mAとあります。上述のように、ダイオードはオームの法則に従いませんが、ダイオードでの電圧降下値Vfとダイオードに流れる電流Forward Current: Ifが完全に独立しているわけではなく抵抗と同様に依存関係が存在しています。つまり、データシートでのVf = 2.1Vはダイオードに20mA流したときの電圧値ですので、今、ダイオードに流そうとしている電流値2mAのときのVfはまた違う値になります。では、どうするか?どうもしません。抵抗と違ってIfが多少ずれてもVfは大きく変動はしないので、ざっくり計算するだけであればこの値を使っても問題がないからです。 

下図は、抵抗とLEDのI-V特性を並べて比較できるようにしたものです。このグラフのLEDは上記LEDとは違います。If=20mAでVf=1.9V程度です。抵抗値に97Ωを使っているのは、1.9Vで 20mAが流れ、LEDと特性を比較しやすいようにするためです。

グラフを見ていただければわかりますが、LEDはIf=2mAのときでもVfは1.75V程度なので、流れる電流値によってその両端電圧Vfはほとんど変わりません。

一方、抵抗の場合は、オームの法則からI = V/Rの比例関係ですので、Iが20mAから2mAの1/10になれば、その両端電圧は1.9Vから0.19Vの1/10まで落ちます。 f:id:shozaburo:20180323171448p:plain

抵抗値を計算する

f:id:shozaburo:20180323172959p:plain

 今までの情報を図に反映させました。電源はよく使われる5Vと仮定しました(電源電圧は自分の回路に合わせて計算してください)。

  • これより抵抗の両端にかかる電圧Vr = Vcc - Vf = 2.9V
  • オームの法則から、R1 = Vr/If = 2.9V/2mA = 1.45kΩ

とR1を計算できました。抵抗値はある決まった値毎に売られており普通はE12もしくはE24系というものを使いますので、今回はE12系の中でもっとも値の近い1.5kΩを選択することになります。 (E12/E24系についてはこちらを参照)

 後は、実際にこの値を使用して回路を組んでみて明るさを見てください。少し明るいなと思ったらLEDに流す電流を流しすぎているので、抵抗値を少し上げます。少し暗いなと思ったら電流を絞りすぎていることになるので、抵抗値を少し下げたものに変更します。電流を増やす際は、データシートにあるIf(max)を超えないようにだけ注意してください。

LED回路の注意点

電源側の最大電流容量

f:id:shozaburo:20180323225907p:plain
実際にLEDを点灯させる際はマイコンのGPIOポートに接続してH出力をすることで点灯させることがあります。この際に気を付ける必要があるのが、マイコンのGPIOが吐き出すことのできる最大電流値です。

図に挙げているのはAtmega328pなので、そのデータシートをみると「1ポート当たり最大40mA」かつ「C0-C5, D0-D4,ADC7, RESETピンの合計値が最大150mA」「B0-B5, D5-D7, ADC6, XTAL1, XTAL2の合計値が最大150mA」という条件を満たさなければなりません。

今回の計算例は2mAだったので余裕があるのですが、例えばLEDに50mAを流したいと思った場合は、このマイコンのGPIOに直結はできません。この問題を解決するには、バイポーラトランジスタやMOSFETを使ってLEDドライブ回路を作りますが、その話は別の機会にしたいと思います。

使いたいLEDの色と電源電圧

上述した計算方法のおさらいですが抵抗の両端にかかる電圧Vrは、Vr = Vcc - Vfで計算します。ということは、Vcc < VfになってしまうとVrはマイナスになってしまうので、これでは回路は成立しなくなります。

具体的にどのようなケースでこのようなことが起こるかというと、青色LEDや白色LEDです。これらは一般的にVfが3V以上ですので、電源電圧が3.3V系や乾電池2本直列(約3V)ですとVcc < Vfとなることがあります。青や白を使う際はお気をつけください。

最後に

回路設計は、取り巻く部品のパラメータを加味しながら、抵抗などの値を決めて行かなければいけません。もし、回路設計に詳しくなりたいという方がいらっしゃれば、ぜひ「データシートを読む癖」と「パラメータの意味を調べる」習慣を身につけるとよいと思います。