FPGAでLED駆動回路設計

FPGAでLED駆動回路設計

 FPGAに直接LEDを接続することは珍しくありません。しかし、最近のデバイスの低電圧化によって、FPGAのIO電圧も年々下がってきています。昭和の時代、デジタル回路といえば5Vでしたが、いつの間にか3.3Vになり、2.5Vの回路が普通になってきました。

 さすがに2.5Vまでデバイスの電圧が下がってくると、LEDを光らせるのが難しくなってきますので、とりあえず、3.3V以上のデバイス電圧で、FPGAからLEDを光らせる回路を考えてみます。

 回路図を先に示します。

 一番基本となる回路図を示しました。まずは、この回路の計算方法を示します。

 当然ながら、LEDを選定するのですが、LEDはデバイスの中でもユーザーに触れる(見える)機会の多いデバイスですので、会社で標準品が決まっている事が多いと思います。その場合はこのよう駆動回路も決まっていると思うので、実績のある回路を採用してください。

 もし、自由にLEDを選定することになったなら、まずは入手性が良い物を探してください。LEDは意外に製造中止になる事が多いのと、国産よりもアジア製の物が多く出回っているので、リピート購入が困難な場合が多い部品です。したがって、この先数年使うのか、一回キリなのか。などの今後の購入予定をまず考えるべきです。

 LEDには色、指向性、形など様々な物が多いのですが、できれば「白」「青」は除外した方が良いでしょう。白LEDは点灯させるのに回路に工夫が必要です。「青」は白よりは良いのですが、Vfが違うのでLEDの点灯回路に慣れてから設計することをお勧めします。

 「赤」「黄」「橙」「緑」等ありますので、あとは好きな形、色を選んでください。

 LEDを決めたなら、データシートからIfとVfを見てください。If=15mAとかVf=2.0Vと記されていると思います。

 まずVfを見て(赤とか橙であればだいたい2.0~2.2Vぐらいだと思います)、上の回路図のVf=2.0Vと記します。Vddは回路で決まっているので、+3.3Vとか+5Vになると思います。ここまで決まれば、抵抗R1にかかる電圧が計算できます。

 R1両端の電圧 = Vcc – Vf

 Vdd=3.3V,Vf=2.0であれば、「R1両端の電圧」は1.3Vになります。次に、LEDに流れる電流を決めます。これは本来LEDのデータシートから類推するのですが、最近のLEDのデータシートには電流と光度のグラフが載っていない物が多いので、実際のところ、光らせてみないとわからない場合が多いです。仕方がないので、データシートの推奨Ifを見てください。普通のLEDであれば、数十mAだと思います。たとえば、推奨Ifが10mAであったなら、10mAを流しても良いのですが、だいたい推奨電流を流すとLEDは明るすぎます。8割程度で問題ない事が多いです。今回IF=10mAとして8割の8mAとしましょう。

 LEDに流す電流が8mAと決まりました。直列回路の電流はすべて同じなので、LEDに8mA流すとすれば、R1にも8mA流れます。

 ここでR1の抵抗値を計算します。これはオームの法則をそのまま適応します。

 R1抵抗値 = R1両端の電圧(1.3V) / R1に流れる電流(8mA) = 162.5Ω

 R1を決める事ができました。実際にはLEDを点灯するのに、162.5Ωの抵抗を使うのはナンセンスで、E24系列かE12系列で選ぶわけですが、この場合160Ωか180Ωを選ぶことになると思います。

 抵抗値を決めたなら、必ずLEDを点灯させて様子を見てください。明るすぎたり、指向性が適してなかったり問題が出てくる場合があります。もし、同じ機器の中にいろいろな色を使っていた場合には、色による光り方の違いも観察してください。以外に黄色がまぶしく見える。とか出てくるものです。その場合、抵抗の値を調整して明るさを均等にします。

 この回路のようにトランジスタを使っている場合、LEDへ流す電流がTr1のコレクタ電流になりますので、コレクタ電流がTr1の仕様を満足しているのかを確認します。

 次に、R2,R3を決める訳ですが、FPGAがHiになった時に、Tr1のVbeがONする電圧に設定します。一般的なスイッチングトランジスタを選んでいればVbeは0.6V程度のはずです。Tr1のベースに流す電流はコレクタに流す電流(この場合8mA)の1/hfe以上であればトランジスタは動作します。

 トランジスタのデータシートを見て、hfeが80であれば、

 8mA / 80 = 100uA

 トランジスタのベースに100uA流れるという事は最低限その10倍以上をR2とR3に流してやれば良いので、R2+R3に1mA以上流れるようにします。この場合、2~3mA流せば良いと思います。

 そして、Vbe=0.6V以上になるようなR2,R3を選定してください。

 もし、選択したLEDのIf=5mA程度であれば、FPGで直接駆動できる場合もあります。FPGAのデータシートを見て、IOピンのシンク電流を調べてください。

 ほとんどのFPGAはIOピンの掃き出し電流よりも吸い込み電流の方が大きいです。したがって、IOピンの吸い込み電流がLEDのIfよりも大きければ、直接LEDを光らせることができます。

 

 このようにすれば、FPGAでトランジスタを使わずにLEDを点灯することができます。R1の計算方法は同じです。ただし、FPGAがLowの時にLEDが点灯します。注意するのはVccとFPGAのIO電圧が同じである。という事です。

 もしVccとFPGAのIO電圧が異なる場合にはFPGA側をトライステートにする。等の方法もありますが、その時には素直にトランジスタで点灯させる方が良いでしょう。