LEDパネルを1000fps over で駆動してみた

スポンサーリンク

はじめに

以前に 64×96 のOLED(有機EL)を 869fps で駆動した記事を書きました。今回は 64×64 のLEDパネルを1000fps以上で駆動する話です。

当サイトでは画像処理などでの計測対象のダイナミクスに対して十分小さな遅延で信号処理を行うことでゼロ遅延信号処理を目指しています。止まっているディスプレイは60Hz程度あれば、特殊な訓練を受けていない一般人には十分なのですが、残念ながら人間の生活する動線の中に情報表示を行う場合は秒速1m程度のゆっくりな動きでも 16.6ms あれば 1.66cm もブレたりズレたりしてしまい文字など読めなくなってしまいます。動くものを写真に撮るとブレるのと同じですね。
では、もっと速く表示することでいろんなところに情報を出したいわけですが、上記のOLED同様に、デバイスは高速な性能を持っているのにコントローラがタコなので低速でしか信号入力できないモジュールで溢れているという事情があります。

液晶のような物理的に低速なデバイスは別として、OLEDやDMDやプラズマディスプレイなど高速なデバイスは、人間の目で見たときに綺麗な階調画像を作るのには少し信号処理が必要です。FPGAなどを習得しているプログラマであれば無問題であっても、そうでない人には普通の映像信号が入力できないと困ってしまいます。したがってそれらを代替するコントローラを搭載することで簡単に使えるようにする反面、低速入力しかできないようにしてある製品が大多数です。というかそうしないと売れないので結局市場から消えているのだと思います。

そんな中、最近大変面白い情報を頂きました。なんとバカ仕様のまま売られている、つまり折角の超高性能をわざわざ封印するという事をしていないパネルが割と安価に流れているとの事でした。
早速ゲットしてみましたので今日はその話です。

上記の Kenta IDA さんに紹介いただいたこちらを買いました。探すと他にもいろんなものが売られているようですね。ご指摘いただいた通りインテリジェントでないバカ仕様のものを探すのが重要そうです。

HUB-75E 仕様を使った高速表示

HUB75で検索するといろいろ出てくるのですが、こちらとか AI とか、実物に張ってるチップを眺めたり、いろいろしながら仕様理解を進めていきます。
詳しい説明は多数サイトがあるので行いませんが、私が買ったものの要点をかいつまむと

  • 32×64 が2セット組み合わさった構造
  • 列方向にシフトレジスタでデジタル値を転送
  • 列の値をラッチできるラッチICがシフトレジスタと別にある
  • ラッチした値に対して選択した行を点灯
  • 点灯時間はOEで制御可能でPWMで輝度も制御できる
  • ラッチが終わればラッチ後の値の点灯と次の値の伝送を同時に行える
  • 転送は25MHzぐらいまで動きそう(実物での実験による)

と言った感じです。
ラッチパルス以外は転送できますので、バイナリ値においてはほぼ ピクセルクロック 25MHz で書き込みができ、OE制御で階調が作れるという事になります。
25MHzで32×64(を2並列)送ればいいので、単純計算でバイナリで 12000 fps 近い性能が出ます。

この手のものの表示の常套手段としては、画像をbitプレーンに分解して表示します。
8bit階調(RGBあるので24bit色)とすると、まず 8bit目を書き込んで 100% の点灯、次に7bit目を書き込んで 50% の点灯、5bit目を書き込んで 25% の点灯、のようにやっていくと階調表示ができます。12000 fps を 8 で割っても 1500fps 近いですので、24bit カラーが 1000fps 以上で表示できます。トランジスタのスイッチが追いつくならこのやり方で 10bit階調(30bit色)ぐらい行けそうですが、実際には最後の方のパルスが小さくなりすぎるので適当なところで打ち切ります。
これでもまだ 1000fps 以上ありますので、さらにやりたければフレーム間で変調するとか空間ディザを掛けるとかいろいろあるのですが私の目的は 1000fps のカメラの信号処理結果を遅延なく出すことなのでこの辺りにしておきます。

KV260にはPMODが1個しかないので、とりあえず ZYBO-Z7 を使いましたが、まずは静止画表示で64×64 に縮小したマンドリルの画像がそこそこ見れるレベルで表示できました。

シミュレーションですが、8つのbitプレーンが 1ms よりも短い間隔で1巡しています。

拡大するとこんな感じで、bit によって OE を下げる時間を倍々で変化させています。

注意点としてはこの段階ではガンマ1.0のディスプレイになっています。
もっとも当方はガンマ1.0の信号をそのままマシンビジョンとして処理して、そのままガンマ1.0で表示するので問題ありませんが、PCなどでガンマ2.2などの信号を扱っている方は注意が必要です。

おわりに

今日は静止画の表示テストまででしたが、また近いうちに自作1000fpsカメラとの組み合わせをやりたいと思います。
世の中の画像信号処理は、歴史的経緯から 50Hz ~ 60Hz ぐらいが多く、電灯の電源周波数との干渉を避けて微妙な周波数になってるとかいろいろと負の遺産を引き継いでいる部分があり、このデジタルの時代のHDMI規格にすら入り込んでいます。
一方で、最近はやりのフィジカルAIだとか、エンボディドAIなどの分野だとこんな柵は無視して本当に必要なスペックで信号処理やアルゴリズムや学習モデルを構築すべきだと思います。
このような従来の規格に縛られない生のおバカ仕様というのは、必要なスペックを自分の好きなように再定義してFPGAで作り直すというのに大変適していると思います。

インテリジェントと呼ばれている従来のコントローラのスペックに縛られずに、自由に設計できるのが低レイヤーの良いところかと思います。
今回は 1000fpsカメラの為の1000fps表示コントローラと言う、オレオレ仕様を作ったわけですが、既製品にとらわれず新しいことをやりたい方の参考になれば幸いです。

コメント

タイトルとURLをコピーしました