Home Made Garbage

APA102-2020の再考 - バーサライタへの応用 –

ホーム
電子工作
Raspberry Pi
IOT
WEB

さて先日購入したLEDストリップの動作に驚愕してもろもろ基本的な動作検証をしたわけですが。。。

APA102 vs APA102C -フルカラーLEDのリフレッシュレート-

ここではもう一度落ち着いてAPA102-2020と向き合ってみたいと思います。

 そう。まさに トランキーロ!あっせんなよ

です。

 

 

購入品

購入したLEDバーは以下です。

Look, just bolt this to your ceiling fan already - we know that's the first thing you thought of! OK, so you already know what DotStar LEDs are - those digitally controllable LEDs that ...

2mm角のSPI入力LED APA102-2020が3mmピッチでぎっしり128個も載った商品で、強度や放熱のためか基板には1mm厚ほどのアルミ板が貼り付けられています。

APA102 DotStar搭載と記載ありますが、5050サイズのチップと異なり高速PWM動作ができないため、バーサライタなどのPOV (Persistence of Vision)には適していないとも明記されています。

商品データシートは以下 
 https://cdn-shop.adafruit.com/product-files/3776/3776_datasheet.pdf

APA102-2020

購入したLEDバーに搭載されているチップの写真が以下です(小さすぎてうまく撮れない。。)。

 
APA102-2020でググると正規なのかコピーなのかよくわからないのですが たくさんのチップが検索されます。以下に一部をまとめます。

恐らく購入したLEDバーに搭載されているAPA102-2020は8ピンでチップ写真から想像するにAPA102-2020-256-8かAPA-102-2020-8192-8Bなのではないかと思います。

しかし、サイトページとデータシートの写真が異なっていたりデータシートもリフレッシュレートが記載ないなど情報不十分ですので、もはや製造元や正式型番を知ることに意味はないように思います。疲れるし。。。

ということで実機で動作を観ていきましょう。
それこそ泥臭き爪真っ黒のエンジニアリングというものです。

APA102-2020動作

測定方法

Arduino UNOでLEDバーのセルを1つ光らせて点灯時の電流を10Ω抵抗による電圧降下でオシロスコープ観測しリフレッシュレートを観ます。オシロにはADALM2000を使用しています。

LED用ライブラリ

LED点灯用のライブラリはAdafruitのDotstar用のライブラリを使用しました。
 https://github.com/adafruit/Adafruit_DotStar

ここでこのライブラリの注意点があります。このライブラリのsetBrightness()はLEDの輝度を設定する関数ですが、グローバル輝度を設定するものではありませんでした。ずっと勘違いしていました。。

setBrightness(0~255)は色輝度に係数としてかけられておりました。以下のコードコメントにも明記されております。
 https://github.com/adafruit/Adafruit_DotStar/blob/master/Adafruit_DotStar.cpp

正規のDatstar LEDはグローバル輝度を設定すると600Hzほどの低周波PWMが重畳されます。そのためPOVに使用した際に残像の途切れの要因となります。
そこでAdafruitはsetBrightnessをグローバル輝度ではなく色輝度への設定に変更したようです。このライブラリではグローバル輝度は最大値(31)となっております。正しい判断だと思います。

ここではグローバル輝度も変更してLEDの特性を観たいのでライブラリを修正して可変にしております。Adafruit_DotStar.cppspi_out(0xFF)もしくはsw_spi_out(0xFF)の0xFFを所望のグローバル輝度に変更します。

たとえばグローバル輝度を16にしたい場合は
 0xFF → 0b11110000

グローバル輝度を1にしたい場合は
 0xFF → 0b11100001

などです。
グローバル輝度は以下の図のように5ビットの値D4-D1 (0~31)で指定します。

測定結果

  • グローバル輝度31、色128 (RGB=0x808080)
     

     
     
  • グローバル輝度16、色128 (RGB=0x808080)
     

 
リフレッシュレートはやはり600Hz台で グローバル輝度をさげると周波数が上がり、LEDに流れる電流が減りました。

 

  • グローバル輝度16、色30
     

     
     
  • グローバル輝度16、色224
     

 

グローバル輝度を16として色輝度を変えていくと以下のような結果となりました。

色輝度 freq [Hz] Duty [%]
0 0
30 664.8 0.016
60 648.5 1.8
128 625.1 9.4
196 610.8 50.6
224 597.2 72.8
240 590.4 85.3
255 100

 

色輝度-Dutyは以下の通り。

LEDの輝度を上げるとリフレッシュレートが変動して下がるなど よくわからない動きをしておりますが。。。とにかくLEDバーに搭載されているAPA102-2020は低いリフレッシュレートのためPOVには向かないことがよ~くわかりました。

ようするに以下のようになるのです 😥 。

 

バーサライタへの応用

しかし、ここで「あーリフレッシュレート低いわ。バーサライタ無理だね」と終わってしまってはタダのリサーチャーもしくは評論家止まりなわけで。。

私は泥臭き爪真っ黒のエンジニアリングをやめませんよ。なんせ9430円も払ったんですから。。。

じゃあ色輝度MAXでグローバル輝度のみで調光すればいいのでは?そうすればDuty 100%で低周波PWM制御の影響は受けません。

やってみた

マイコン SPRESENSEを用いてこのLEDバーを使用したバーサライタを試しました。

 
以前作成したSPRESENSEバーサライタの応用で

SPRESENSE で バーサライタ

 
LEDバーを搭載!

LEDバーの128個のセルのうち64を使用してグローバル輝度は1としました。のこりの64個はいっさい制御せず電源投入時に点灯したままになったりするので黒テープで隠してます。

動作

SPRESENSEは1コアのみの使用。LED64個の点灯で1周128分解能が達成されました。ギリギリですが。。

RGBはそれぞれ0か255でしか点灯できないので8色しか出力できません。。。

 

絵も出してみる。

狭ピッチのLEDバーですのでいい感じに絵が出ます。

ちょっと1周の分解能が低いのでマルチコアやSPI出力2個使用などで向上は考えたいですね。

しかし8色しかでないバーサライタをこれ以上いじるかどうかは。。。

また別のお話

Related Posts

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください