3色LEDストリップライトを制御する
秋月電子でマイコン内臓テープLEDを買ってきました。赤、緑、青の3色を発光するLEDが96個、テープの中に内蔵されていて、それぞれの光らせ方をLEDの中に組み込まれたマイコンで制御するようになっています。
各LEDの中のマイコンはシリアル線で1本に繋がっており、シリアル線に各マイコン宛てのデータを流すことでいろいろな色に光らせることができるようです。今回はこれを光らせることにトライしてみたいと思います。
テープの中身はどうなっているの
テープの仕様、およびテープに96個も内蔵されている「マイコン内蔵LED」なるものの仕様は以下の秋月電子のページに掲載されています[1]、[2]。
仕様によると、テープと電源、制御装置との接続方法は図1、テープの内部の回路は図2のようになっています。LEDを光らせる電源は各LEDに並列に接続され、光らせ方を制御する信号は図3、図4、図5のように構成されます。
つまり各LED宛てに赤、緑、青の輝度を8ビットで表し、LEDあたり8ビット×3色分の24ビットのデータをシリアル転送します。このデータを手前のLEDから順に送り届けます。各マイコンは自分宛てデータを削除し、それ以降のデータをスルーして隣のLEDに送ることを繰り返します。80us以上の無信号を検出すると各LEDでデータが確定され一斉に発光するような動きをします。
周期1.2usの信号を作る
図3によると上記信号の各ビットは周期1.2usのパルスで構成する必要があります。ビット1は、High0.6us、Low0.6usのパルス、ビット0はHigh0.3us、Low0.9usのパルスとなります。このパルスはarduinoIDE上のスケッチで生成するには高速すぎて追いつきません。そこで16MHzクロックのAVRマイコンをアセンブラでコーディングし、パルスを生成することにしました。833kHz(=1/1.2us)の周波数のパルスなので1クロックサイクル1命令を基本とするAVRを16MHzのクロックで駆動すると、ぎりぎり生成できそうです。
AVRとしてはすでに廃番となっていますが手元にあったAT90S1200を使用しました。デジタルIOにHigh、Lowを出力して信号を作りますが、出力するタイミングは間に挟むnop命令の数で調整します。オシロスコープで観測しながらnop命令の数を調整し、大体上記の数値になるようにします。写真1にビット1が連続する信号を、写真2にビット0が連続する信号をオシロスコープで観測した様子を示します。
図6にはnop命令の数を調整後のテストプログラムを示します。これをAVRの統合開発環境AVRstudioVer.4でアセンブルし、出てきたhexファイルをAVRprogでAT90S1200に書き込みます。写真3はテープを最大輝度で赤色に発行させたときの信号を示します(最初の2つのLEDに対する信号が表示されています)。
テスト環境の配線方法
写真4にテスト環境を示します。安定化電源から5Vをテープに加え、手前のマイコンAT90S1200からは信号をテープに送り込みます。無信号、無発行時にはテープに77mA流れています。マイコン内蔵LEDが96個並列に繋がっていますので待機状態では1個当たり800uA流れています。
発光の様子
信号を送り、テープを発光させた時の様子を写真で紹介します。
最大輝度で赤に発光させた時・・・写真5、結構まぶしいので絞りを絞っています。1300mA流れます。一個あたり13.5mA流れます。
最大輝度で緑に発光させた時・・・写真6
最大輝度で青に発光させた時・・・写真7
最大輝度で赤、緑を発光させた時・・・写真8、倍近くの2400mA流れます。
最大輝度で赤、緑を発光させた時・・・写真9
最大輝度で緑、青を発光させた時・・・写真10
最大輝度で赤、緑、青を発光させた時・・・写真11、3600mA流れます。
今後の応用について
今回はマイコン内蔵テープLEDを各色に光らせるところまで確認しましたが、別にLoRAWANのような通信機能を持ったマイコンを用意して、これから発光パタンをAT90S1200にデジタルIOなどで指定するようにするようにすれば、遠隔からいろいろな色に光り方を制御できてサインボードや広告などに利用できるのではないかと思います。
参考資料
[1]マイコン内蔵テープLEDの仕様 https://akizukidenshi.com/download/ds/ipixelled/N006096YA3SF.pdf
[2]マイコン内蔵LED SK6812の仕様 https://akizukidenshi.com/download/ds/dongguangopsco/sk6812.pdf