2023年02月12日

最近LEDパネル界隈で流行りの「SRAM内蔵ドライバチップ」とは

1
HUB75接続のフルカラーLEDパネル、電車や駅を模した電光掲示板に使ったり、時計にしてみたり、ゲームを作ってみたりなど電子工作er界隈で様々に活用(流用?)されています。
LEDパネルの中にはLED1個当たりの価格が1円未満というものも少なくなく、大変コスパが良く魅力的な自発光表示デバイスだと私は考えております。
こういったHUB75接続のLEDパネルは、これまで行の選択にラインデコーダ、列の駆動にシフトレジスタ内蔵LEDドライバチップが使用されることが一般的で、Arduino等を使用してLEDパネルを光らせることも比較的容易でした。

1

しかしこの構成にはいくつか問題点もあります。

1.LEDパネルの全面を光っているように見せるには、シフトレジスタにデータを流し込む、ラインデコーダで点灯させる行を切り替える、という作業を常に高速で繰り返し続けなければなりません。もしデータを流し込む速度が遅ければ、それだけリフレッシュレートが低下しちらつきを感じるようになります。しかしシフトレジスタにデータを流し込める速度にも限度があり、それがリフレッシュレート向上の障害になっていました。

2.LEDパネルをフルカラーで表示させるには、PWMによってRGBLEDの各色の明るさを任意に変える必要があります。よって上記の作業をさらにPWM分解能分繰り返さなければなりません。現在一般的な24bitトゥルーカラーはRGB各色8bitですが、LEDの輝度と人間の目が知覚する明るさが比例関係にならないため、ガンマ補正を必要とします。そのため各色8bitのPWMでは全く足りません。実際のところ最低でも13bit、理想的には16bitのPWM分解能が必要となります。しかしデータ量が増えるとその分LEDパネルのリフレッシュレートが低下するため、リフレッシュレート向上と画質向上がトレードオフの関係にありました。

よって最近では、これらの問題を克服した列ドライバチップを使用したLEDパネルがより一般的になりつつあります。それが「SRAM内蔵ドライバチップ」です。
従来のシフトレジスタ内蔵ドライバチップとSRAM内蔵ドライバチップの内部ブロック図は下記のようになっております。
2

シフトレジスタ内蔵ドライバチップに比べてSRAM内蔵ドライバチップはずいぶんと複雑になっているように見えますが、大きな違いとしてSRAMバッファが内蔵されている点、16bitカウンタとコンパレータによって構成されるPWM回路が内蔵されている点にあります。

このSRAM内蔵ドライバチップを使用する利点としては、以下のものがあります。

1.LEDパネルへのデータ転送と、画面のリフレッシュを非同期にすることができます。つまり2000RPSくらいの高速なリフレッシュレートを維持しながら、表示するデータは60FPS等フレームレートに同期したタイミングでのんびりLEDパネルへ転送する、といったことが可能になります。

2.ドライバチップ側にPWM生成回路があるためコントローラ側はPWM制御を意識する必要はありません。ガンマ補正した後の16bitデータをLEDパネルへ送るだけです。

3.その他コースト除去機能や暗部補正機能などいろいろな付加機能を利用できます。

このようにSRAM内蔵ドライバチップは様々な利点があることから、従来のシフトレジスタ内蔵ドライバチップを置き換えつつあります。
しかし、実は電子工作erにとってこれは大きな問題となっています。
というのもこういったSRAM内蔵ドライバチップを搭載したLEDパネルは、コマンドを送信したりコンフィギュレーションレジスタを書き換えたりして初期設定をしなければまともに表示させることができません。
ところがコマンドやコンフィギュレーションレジスタの詳細は殆ど公開されておらず、またドライバチップの種類やメーカーによって仕様が異なります。
つまり、電子工作erがこういったLEDパネルを自作のコントローラで表示させるのはかなり難しいのです。
例えばAliexpressやeBay等でLEDパネルを買ってラズパイにつないでみたけど正しく表示されない、あらゆるオプションを試してみたがすべてダメで手も足も出ない、というような場合にはこのSRAM内蔵ドライバチップが使用されている可能性が高いと思われます。
こういったLEDパネルを購入してしまった場合、現状では市販の対応コントローラを買ってくるか、返品するか、諦める以外に対処法はありません。
そんな状況のため、今後はよりLEDパネルを使用した電子工作がしにくくなってくるのではと考えています。

かくいう私もこういったLEDパネルを買ってしまったことが何度かあります。
どうにも諦めきれず市販のコントローラも買ってきて表示できることを確認したうえで、ロジアナでコマンド送信方法やレジスタ設定内容を解析したりしていました。
何かの役に立つかもしれないし、せっかくなのでこれまでの解析内容を乗せておきます。
なお、間違いもあると思われますのでご注意ください。
またMBI5253のデータシートやMBI505xのアプリケーションノートも少し参考になります。
https://olympianled.com/wp-content/uploads/2019/11/Macroblock-MBI5253_V0.01_EN_20180327.pdf
https://www.neumueller.com/download/MBI5051%20MBI5052%20MBI5053%20Anwendungshinweis%20-%20Application%20Note.pdf
なお、私が過去に販売したLEDパネルコントローラはこういったSRAM内蔵ドライバチップには対応しておりません。現在試作レベルでは上手く行っているのですが、仕様があまりにもバラバラなため販売することはないかもしれません・・・

SM16380S解析内容
345

ICND2153解析内容
6789

SM16169解析内容
10

wata_net at 15:39コメント(0) この記事をクリップ!

2021年12月29日

STM32でシリアルアブソリュートエンコーダと通信しよう(ニコン A-format用)

大昔のACサーボモータはインクリメンタルエンコーダが搭載されていて、A相B相Z相U相V相W相が
ラインドライバで出力されていたので大変扱いやすかったのですが、最近のACサーボモータって
ほとんどRS-485通信のアブソリュートエンコーダなんですよね。
つまりはシリアル通信をしないとエンコーダの位置データを取り出すことができないのですが、
そのシリアル通信フォーマットにもいろいろあり(EnDat、BiSS、SSI、HIPERFACE、三菱、安川、多摩川など)、
これらの仕様が分からないとどうしようもないわけです。

ただ、ニコンのA-formatだけはたまたまネット上に通信フォーマットが転がっていました。
(A-format [yuqlid wiki])
そこで、この資料を参考にSTM32F103C8T6でアブソリュートエンコーダと通信するコードを書いてみたのですが、
結構苦戦?したためブログ記事にしてみました。

まずA-formatのタイミング仕様は、RS-232みたいないわゆる調歩同期シリアル通信です。
ただ一般的な調歩同期シリアルと決定的に異なる点がいくつかあります。
下記にA-formatの仕様を示します。
A-format_specification
ちなみにコマンドデータフレームはこんな感じです。
A-format_CDF

皆さんお気づきでしょうか、実はこれマイコンのUSARTペリフェラルが使えないんですね・・・
F103C8のUSART1はデータ長を18bitに設定することができません。
さらに通信速度も2.5Mbpsもしくは4Mbpsと高速なため、Arduinoでおなじみのソフトウェアシリアル
のように割り込みで処理していたのでは間に合いません。
そんな時に便利なのがDMAです。
何らかのペリフェラル等からDMAリクエストが発行されると、CPUの介在なしにメモリ上のデータをレジスタに転送したり、
逆にレジスタの値をメモリに転送したり、メモリ間でデータを転送したりできます。
下図にDMAでUARTを実装する際の構成図を示します。
構成図
TIM1は繰り返しカウンタレジスタを使用し、Nパルスモードとして動作させます。
毎パルスごとにアウトプットコンペアDMAリクエストを生成し、送信バッファからPORTAの
出力データレジスタへデータを転送します。こうすることでUARTデータ送信を実現しています。

UARTデータ送信ののち、すぐUARTデータを受信できるようTIM1がNパルス出力完了時、
アップデートイベントトリガを発生させスレーブトリガモードに設定したTIM2のカウンタをスタートさせます。

TIM2は単パルスモードで動作させ、調歩同期シリアルの受信データの立上り、立下りエッジでインプットキャプチャします。

TIM2でインプットキャプチャが発生するたびDMAリクエストを生成し、キャプチャレジスタのデータを
受信バッファに転送します。こうすることでUARTデータ受信を実現しています。

こちらにCubeMXのプロジェクトファイル一式を置いておりますので、ダウンロードしてご利用ください。
A-format_F103C8_v1

CubeMXの設定や実装なんかはプロジェクトファイルの中身を見ていただくとして、
最後に実際の通信波形をお見せします。
通信波形
RS-485通信は半二重通信のため、まずDE_/REをHIGHにしてマイコンを送信側に設定します。
続いてエンコーダの位置データを要求するためにCDF0を送信します。
次にDE_/REをHIGHにしてマイコンを受信側に設定します。
するとIF,DF0,DF1,DF2が返ってきます。
とまぁこんな感じです。
より詳細は通信フォーマットのPDFをご参照ください。

wata_net at 02:49コメント(0) この記事をクリップ!

2021年10月24日

LEDパネルコントローラ 従来比2.8倍の高速化を達成!

相変わらずより高性能を求め、HUB75なLEDパネルのコントローラを作り続けております。
大画面・高画質・高リフレッシュレート・高輝度に対する探究心は留まることを知らず、いろいろと試行錯誤をしておりました。
その甲斐あって新型は従来のF730R8版(高性能版)LEDパネルコントローラより、総画素数は1.5倍、リフレッシュレートは2.8倍、PWM分解能は1.25倍を達成しました。

それがこちら、H730VB版LEDパネルコントローラです。
01

256*128ピクセル、PWM分解能8bit時の最高リフレッシュレート比較です。
0506
新型が202.9RPS、従来品が69.7RPSですのでおよそ2.9倍高速化しているということになります。
新型は200RPSを超えているためちらつきは全く感じませんが、従来品は70RPSを下回っており少しちらつきが気になります。

256*128ピクセル、PWM分解能12bit時の最高リフレッシュレート比較です。
0708
新型が144.9RPS、従来品が51.1RPSですのでおよそ2.8倍高速化しています。
新型の素晴らしいのは、12bitPWMでも144RPSをたたき出している点にあります。
12bitPWMでガンマ補正2.2であれば1543万色を表現できます。これはRGB24の1677万色にかなり近く、PCモニタと遜色ない画質を再現できるということです。
実はこれは従来品でも可能でした。しかし従来品の場合、上記画像のようにリフレッシュレートが51.1RPSまで低下します。51.1RPSというのはちらつきが酷く正直あまり実用的ではありません。
この場合従来品ではLEDパネルコントローラを2つ使用し、1つ辺りの画素数を減らすことでリフレッシュレートを維持する必要がありました。
しかし新型ではこれを1つで達成できるのです。大画面・高画質・高リフレッシュレートをすべて実現できます。


これほどの高速化を達成できたのは、主に以下3つの変更によるものです。

STM32H730VBT6の採用
02
当たり前ですが、使用しているマイコンを高速なものに変えればより高速化できます。
そこまでするならFPGAを使えという話もあるのですが、何より私がVHDLが書けないのと外部DRAMを備えた基板を設計できる自信もないってことで市場最速といわれるマイコンを採用するに至りました。
それに市場最速を謳っておきながらバリューラインという位置づけのH730VB、実は1個800円程度と結構安価に入手できました・・・世界的な半導体不足に陥る前までは。
多分FPGA+DRAMよりは安価だったのではと思います。半導体不足で全く手に入らなくなってしまったのですが、それは多分FPGAも同じですよね!?
従来まで使用していたF730R8のクロックが216MHz、H730VBは550MHzとおよそ2.5倍クロック周波数が高速化していますが(実際のところちょっとオーバークロックしていますが)、リフレッシュレートは2.8倍高速化しております。
その理由は下記2つになります。

▲泪ぅ灰鵑IO割付の最適化
04
同じタイミングで変化すべき信号は同じポートにまとめるよう、IO割付を変更しました。
もしポートがバラバラだった場合、同じタイミングで変化すべき信号なのに出力データレジスタの書き込みが複数回発生し、それが速度低下の原因となっていました。
1回1回は本当にわずかな差ですが、画素数・RGBの3色・PWM分解能の要素がすべて掛け算でのしかかかってくるため、ちりつも効果で最終的なリフレッシュレートではかなり大きな差になります。
また別の効能として、従来では出力データレジスタの書き込みが複数回発生するために同じタイミングで変化してほしい信号が少し異なるタイミングで変化しており、タイミング合わせのウェイトを入れざるを得なかったのですが、新型はそれがなくなりさらに高速化に寄与しています。

クロック信号生成回路の採用
これも△隼たような原理ですが、従来はクロック生成まですべてマイコン側でやっていました。
09
上図のタイミングチャートで、CLKが従来タイプのクロック信号、MCUCLKが新タイプのクロック信号の元になる信号、CLKOUTがクロック信号生成回路の出力信号になります。
従来タイプでは、赤線に加えて青線のタイミングでも出力データレジスタの書き換えが発生します。新タイプではデータレジスタの書き換えが赤線のタイミングのみで発生するため、単純に半減できます。
その信号を元にハードウェアでCLKOUTの信号を生成することでかなり高速化できました。
回路的には単純な両エッジ検出回路です。
03
実際の波形がこちらです。
あまり綺麗ではないのはオシロプローブのGNDクリップを使っているためです。
10
デューティ比が50%でないのは意図的なものです。実際にLEDパネルに接続し、正しく表示できるパルス幅に調整した結果このようなデューティ比になりました。
この手法も△汎瑛諭▲ロックのパルス幅を確保するためのウェイトを無くせたためより高速化に寄与しています。

上記のように色々と変更点はありますが、通信仕様は従来品と互換性があるためポン付けで置き換え可能にしてあります。


そのような感じで、従来品よりかなり高速なLEDパネルコントローラを作ることができたためいつか販売したいと思っています。
しかしドキュメントを作るのがめんどくさすぎるのと部品が全然手に入らないのでいつになるやらって感じです。

以上

wata_net at 00:43コメント(0) この記事をクリップ!

2021年01月30日

最近作ったもの

最近作ったものをまとめて紹介します。
主にLEDパネル関係ばかりなんですが、そうでないものも多少はあります。


1. P3、256×128ピクセル高輝度LEDディスプレイ
屋外用の3mmピッチ、64×64ピクセルのLEDパネルを8枚使用した高輝度LEDディスプレイを構築しました。
フレームは黒色のアルミフレームで、LEDパネル前面に保護用のアクリルパネルを取り付けています。
DSC_1175DSC_1174
でかいし明るいしサイコー。最高輝度時全部白だと40Aくらい消費しています。えげつない。


2. PCの画面を無線でLEDパネルに表示させるやつ
ESP32とらびやん氏のScreenShotReceiverを使用して、PCの画面を無線でLEDパネルに表示させる奴を作りました。
大体27FPSくらい出ています。多分頑張れば2倍くらいの速度は出せるんじゃないかと思います。
というのもDMA転送をしているのにDMA転送中は何もしないという大変非効率なプログラムになっているためです。
DSC_1653-1DSC_1902
LEDパネルでマイクラもプレイできてしまいます。若干カクカクしてはおりますが、なかなか良い感じです。



3. HUB75インタフェースなドットマトリクスLEDドライバ基板
普通のドットマトリクスLEDをHUB75インターフェースにできるLEDドライバ基板です。
普通のLEDパネルと似たような回路になっており、最大32×16ピクセルのLEDパネルが構築できます。HUB75インタフェースなので当然LEDパネルコントローラで制御できますし、複数数珠繋ぎにして拡張させることもできます。
わずか32×16ピクセルとはいえ、はんだ付け大変でした・・・
もうやりたくないという感想があります。
DSC_1598DSC_1600ドットマトリクスLEDドライバ
回路図はこちらになります。
マトリクスLEDドライバ


4. LEDパネルな時計
そういえば時計をちゃんと作ったことなかったなと思ったので作りました。
ESP8266を使用し、NTPサーバーに接続して自動的に時間合わせをしてくれます。
せっかくのフルカラーLEDパネルなので時間によって背景画像が変わるようにしてあります。
DSC_1901


5. 超小型定電流レーザードライバ
降圧タイプのものと昇降圧タイプのもの2種類を作りました。
とにかく小型化することに命を懸けてみました。
降圧タイプは17.94mm×7.78mm、昇降圧タイプは12.86mm×7.78mmとなっております。
小さすぎる&ICがDFNではんだ付け難しかったです。
それぞれ一長一短があります。
降圧タイプは最大2Aまで流せますが電流を可変できません。また基板外形が昇降圧タイプより少し大きめです。
昇降圧タイプはレーザーダイオードのVfと電源電圧が同じでも高くても低くても定電流動作をしてくれますし、半固定VRによって電流を可変することもできます。しかし最大1Aまでしか流せないのと、使用しているICが1個500円以上します。
DSC_1863DSC_1888DSC_1861
回路図を乗っけておきますのでどなたか作ってみては?
LDドライバ回路

wata_net at 21:38コメント(0) この記事をクリップ!
プロフィール

wata

Recent Comments
記事検索
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
  • ライブドアブログ