はじめに
RGBフルカラーLEDの各色のバランスを揃える電流制限抵抗を求め、PICマイコンからプログラムPWMでグラデーションさせる実験です。
概要
LED(Light Emitting Diode:発光ダイオード)は様々な種類があり、RGBフルカラーLEDは、光の3原色のRed, Green, Blue 3つの発光素子を一つにパッケージしたものです。実験に使ったOptoSupply社のOSTA5131Aは、Φ5mm砲弾型/高輝度/カソードコモンです(下図)。
左下は、このLEDの絶対最大定格、右下は電気-光学特性です。RGBそれぞれ異なるので注意が必要です。
電流制限抵抗の求め方
LEDに流すIFを定格以下にするため、電流制限抵抗を直列につなぎます(下図参照)。このLEDは、RGBそれぞれ特性が異なるので、それぞれの抵抗値R(R),R(G),R(B)を計算から求めます。
高輝度LEDは、IF≈5[mA]程度で明るく点灯します。電源電圧=5[V]で、IF(R)=5[mA]のR(R)は次式になります。
R(R) = (5 – 2.1) / 0.005 = 580 [Ω]
R(B)とR(G)は次式のように、それぞれR(R)に対する電圧比および発光強度Iv比を掛け合わせます。こうすることで、各色の輝度バランスを揃えられます。
R(G) = 580 x (1.9 / 2.9) x (7000 / 2000) = 1330 [Ω]
R(B) = 580 x (1.9 / 2.9) x (2500 / 2000) = 475 [Ω]
実際には、市販の抵抗器から計算値に近しいものを選択したり、抵抗器を組み合わせて使います。
下は、RGBと組合せ7色の発光です。光拡散キャップを付けると発光色が均一になります。
プログラムPWMのしくみ
下図は、グラデーション1サイクルのイメージです。LEDの時間あたりの点灯時間(デューティ)を色毎に徐々に増やしたり減らしたりを繰り返します。実験では、PICマイコンの3本のピンにRGBを割り当て、各ピンの出力をプログラムからPWM(Pulse Width Modulation)制御します。ポイントは、各色全ての組合せを表現するために位相をずらすことです。
プログラムPWMは、for文をネスト(入れ子)するだけで実現できます(下図)。
アップステップは、変数jが0からkまでカウントアップする度に、変数iは0からkまでカウントアップ、i>jでピン出力はHigh→Lowになり、jのカウントアップの度にPWMのデューティがアップするので、LEDは徐々に明るくなります。
ダウンステップは、jをkから0までカウントダウンします。カウントダウンの度にデューティがダウンするので、LEDは徐々に暗くなります。
下は、実験のソースコードです。AD変換値の読み出しは、MCC自動生成関数を使用しています。また、コメントの①~⑦は、上記グラデーションサイクル図の番号に対応する部分です。
結果
ブレッドボードに下図の回路を組んで実験しました。電源電圧を基準とした電圧を可変抵抗器で変化させ、それをPICマイコンの内蔵ADCモジュールで10ビットに変換した値を変数kに与えることでグラデーションのサイクルを変更できるようにしました。(動画はこちら : 後半でサイクルを短くしています)
まとめ
PICマイコンは、内蔵CCPモジュールのPWMモードによるハードウェアPWM制御も可能ですが、モジュールの数に限りがあります。一方、プログラムPWMは、for文のネストだけで実現できるので、数の縛りはありません。様々な場面で活用できるので、覚えておいて損はないと思います。
以上