要約
PWM LEDドライバMAX6975をビデオディスプレイアプリケーションで使用する場合、8ビットまたは10ビットのビデオ情報に対するガンマ(視覚効果)補正、LED特性マッチング、および環境光調整を提供するために、より高いPWM分解能が必要になります。このアプリケーションノートでは、本来のPWM分解能が14ビットであるMAX6975を使用してビデオアプリケーション向けに16ビットのPWM分解能をエミュレートする方法を説明します。
同様の記事が「Power Systems Design Europe」誌の2010年5月号に掲載されています。
はじめに
電力効率および色の一貫性を向上させるため、一般的にLEDドライバでPWM周期のデューティサイクルを調整することによってLEDの輝度を制御します。PWM周期は、通常は2の制御ビット数乗(2CONTROL BITS)に等しい数のクロックサイクルで構成されます。コンシューマ向けエレクトロニクスアプリケーションの制御ビット分解能は、通常は8ビットです。8ビットのPWM分解能によって256通りの異なる輝度レベルを提供可能であり、それに対応するPWM周期は256クロックサイクルで構成されます。コンシューマエレクトロニクスで一般的な32kHzのクロック周波数の場合、PWM周期は約256/32kHzすなわち8ms継続します。したがって、PWMのリフレッシュレートは約125Hzです。このPWM分解能とリフレッシュレートの組合せによって十分な照明輝度の調整が実現し、人間の目に見えるフリッカ作用を防止することができます。
LEDドライバへの16ビット分解能の提供
16ビットのPWM分解能と2kHzのリフレッシュレートという両方の要件を満たすのは難題です。分解能が16ビットの場合、PWM周期は216 = 65536クロックサイクルです。2kHzのPWMリフレッシュレートでこれに相当するクロック周波数は、2000 × 65536 = 131.072MHzになります。CMOSインタフェース上でこの速度のデータ送信を行った場合、妥当な距離であっても信頼性が低下します。最大の問題は、LEDおよび付随する配線を負荷とした状態でLEDドライバの出力ポートを十分な速度でスイッチオン/オフすることができないという点です。正確なオン/オフタイミングなしに、16ビット分解能の利点を実現することは不可能です。
妥協案として、16ビット未満のPWM周期のグループを使用して、完全な16ビットのPWM周期をエミュレートすることができます。このアプローチを使用することによって、各PWM周期のクロックサイクル数が減少するため、より低いクロック周波数で目的の2kHzのPWMレートを維持することが可能になります。PWMリフレッシュレートが数百Hzより高速である場合、人間の目では変化/フリッカを識別することができないため、16ビット分解能の視覚効果を維持することが可能です。
1/2000秒の(またはそれに近い)シャッター速度で動作するビデオカメラの例を考えます。このカメラは分解能を低下させてフレームをキャプチャすることになりますが、リフレッシュレートを低下させて黒い画面をキャプチャするよりずっとましです。シャッター速度を非常に高速にすることは可能ですが、その場合もビデオカメラは毎秒60フレームでキャプチャを行います。これらの複数ビデオフレームの平均による効果によって、やはり目的である16ビット分解能に近い画像を得ることができます。
16ビットの分解能を、様々な割合でMSB/LSB (上位/下位ビット)に分割してエミュレーションを行うことが可能です。MSBの分解能を備えた、一定数のPWM周期が存在することになります。すなわち、それぞれの分解能は2の最上位ビットの数乗(2MSB)です。周期の数はLSBの分解能に等しく、2のLSBの数乗(2LSB)になります。PWMエミュレーショングループ間のビット配分にも、様々な方法があります。単純なアプローチとして、各グループの最後のクロックサイクルのオン/オフをLSBによって決定し、残りのクロックサイクルをMSBによって決定する方法があります。簡単に言い直すと、MSBによって決定されるクロックサイクルのオン/オフ時間はすべてのグループでまったく同一になります。
テストケース例
上記のアプローチを詳しく説明するための例として、4ビットの分解能を2/2に分割するエミュレーションを使用します。図1に、4ビットで直接16ポジションのPWM波形パターンを実装する場合を示します。
図1. 従来の4ビット/16ポジションのPWM波形
2/2分割のエミュレーションでは、4ポジションのPWMグループが4つ作成されます。2つのLSBは、どのグループで最後のクロックサイクルをオンにするかの選択に使用されます。2つのMSBは、残り3つのクロックサイクルのオン/オフパターンの決定に使用されます。図2に、2つのMSBが0である場合に2つのLSBがエミュレーションPWM波形に及ぼす作用を示します。
図2. 4ビットを2/2に分割したエミュレーションにおけるLSBの作用
図3に、2つのLSBが0である場合に2つのMSBがエミュレーションPWM波形に及ぼす作用を示します。
図3. 4ビットを2/2に分割したエミュレーションにおけるMSBの作用
このアプローチをLEDドライバMAX6975の内蔵LVDSインタフェースで使用して、16ビット分解能をエミュレートすることが可能です。これには14/2の分割を使用します。16ビットのビデオフレームを、わずかに(1クロックサイクルのみ)オン/オフの異なる4つの14ビットのビデオフレームによって表示します。入力として16ビットのPWMコードを使用して、単純なエンコーダによってこれらの14ビットPWMコードを生成します。このエンコーダは、14のMSBを14ビットコードのベースとして使用して、これらの2つのLSBのパターンに応じてもう1つのビットを加算します。図4に、エミュレーションエンコーダを示します。最初の14ビットPWMコードには、MSBがそのまま採用されます。第2のコードには、これら2つのLSBのMSBが加算されます。第3のコードには前述のこれらの2つをOR演算したものが加算され、第4のコードにはAND演算したものが加算されます。
図4. 16ビットを14/2に分割したエミュレーションエンコーダの構造
ここで提示したエミュレーション方式には、2つの小さな欠点があります。
第1に、最も高輝度の領域にいくつかPWMコードの抜けが存在します。図2に示すように、MSBとLSBの選択を組み合わせた場合、一部のエミュレーションPWMコードは完全なオン状態になります。完全なオン状態は、MAX6975の本来の設計に基づく動作では作り出すことができません。しかし、これらの存在しないコードの影響は顕著ではありません。これらのコードは完全な輝度に近く、頻繁には使用されません。これらのコードが使用される場合でも、人間の視覚はそれだけの明るさにおける輝度のわずかな変化を感知することができません。
第2に、MAX6975に送信される情報が4倍の量になり、毎秒60ビデオフレームの表示速度を維持する場合は4倍高速になります。MAX6975のデータインタフェースは、その場合でもシリアルチェーン内の多数のチップの供給に十分な速度ですが、チェーン内のチップ数はそれに比例して少なくなります。クロック周波数が32MHzの場合、32000000/(14 × 24 × 60) = 1587 × MAX6975チップをシリアルチェーンにして、毎秒60ビデオフレームのフレームレートで同一のデータインタフェースを共有することができます。各ビデオフレームについて4つのエミュレーションフレームを配送する必要がある場合、この数が396に減少します。その場合でも、すべてのチップをシリアルチェーンにして単一のデータインタフェースで32 × 32 (または最大で56 × 56)ピクセルのビデオアレイを駆動することが可能です。
最後に、一般的なエミュレーション方式と比較して、注意すべき小さな相違点も存在します。MAX6975のグローバル輝度制御のためのサブフレームとして、通常は各PWMフレームが32回繰り返されます。したがって、MAX6975の14/2方式による16ビット分解能の実装でも、これら4つのエミュレーションPWMフレームのそれぞれが32回繰り返されることになります。
結論
大半のLEDビデオディスプレイメーカーにとって既知であり、一般には未発表の高ビット分解能エミュレーション手法について、単純な例を使って説明しました。MAX6975チップについての実用的な実装アプローチも提示しています。