黒ガラスを用いたアプリケーションで使用するための環境光センサーMAX44007の最適化
要約
黒ガラスは環境光センサーに特有の課題を突き付けます。これは、黒ガラスが環境光センサーに入射する環境光のスペクトルを変えるためです。特に、黒ガラスは人の目には見えない光スペクトルの赤外成分を強めます。このアプリケーションノートでは、較正/補償方式によって、さまざまな光源下での光センサーの照度測定値を補正する方法について説明します。このアプリケーションノートは、光センサーMAX44007のアドバンストモードを使用して、可視チャネルとIRチャネルへの応答を調整する方法を示します。MAX44007のレジスタマップを使用すると、黒ガラスの下でのセンサー性能を最適化することができます。
はじめに
MAX44007の環境光センサーには、黒ガラスの下でのセンサー性能を最適化するように設計されたアドバンスト動作モードがあります。
今日、ほとんどのスマートフォン、タブレット、ノートブック、およびテレビには、LCDスクリーンを囲う黒ガラスが付いています。この囲いによって、最終製品は光沢のある本格的な仕上がりになります。もともと、環境光センサーが取り付けられているガラス上には、目ではっきりとわかる透明な丸窓や溝が設けられていました。しかし最近の設計では、光センサー用の窓や溝は、ほぼ不透明な黒インクで塗られており、窓や溝が周囲の黒い筐体の色に溶け込むようにしています。製造業者によれば、その理由は明白です。インクが濃ければ濃いほど、目立ちにくくなり、本格的で光沢が増した仕上がりになるからです。
残念ながら、環境光センサー全体に黒インクを使用することで、2つの重要な点でセンサーの動作が複雑になります。最初に、黒インクによって環境光が弱められるためセンサーが受ける環境光の量が減少します。次に、黒インクによって透過する光のスペクトルが変化します。このインクのスペクトル特性は、入射赤外光はほぼすべて透過しますが、可視光は元の強度の3%~5%に減衰されるというものです。結果として、環境光の中の赤外成分が大幅に増大します。赤外光であろうと環境光であろうと、光の透過は非常に複雑です。メーカーによって黒インクの厳密な化学的性質が異なる可能性があるためです。
黒ガラスのための較正および補償
人間の目のCIE曲線に正確に合わせることは困難です。このため、最も高性能の環境光センサー(たとえば MAX44009)は、さまざまな光源の下での照度の測定値を補正する較正/補償方式を搭載しています。この補正は2種類のオンチップフォトダイオードを組み合わせることで実現しており、組み合わせ効果によって、光源の種類にかかわらず正確な照度測定が可能になります。黒ガラスの下でセンサーに入射する光スペクトルが大幅に変化すると、この較正パラメータをさらに調整する必要があります。
注目すべき重要なことは、光源が黒ガラスの下のセンサーに必要な較正の補正量に影響するということです。この調整は、太陽光や白熱灯など、赤外成分が本来多い光源の場合に特に重要となります。白色LED (WLED)や蛍光灯の光の場合には、調整はそれほど必要ではありません。
MAX44007には、可視チャネルとIRチャネルへの応答の調整に使用することができるアドバンストモードが用意されています。
ガラスの下のセンサー性能を最適化するためのレジスタマップ
以下は、MAX44007のレジスタマップです。この表は、デバイスのデータシートにも添付されています。
REGISTER | BIT | REGISTER ADDRESS | POWER-ON RESET STATE | R/W | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
STATUS | |||||||||||
Interrupt Status | INTS | 0x00 | 0x00 | R | |||||||
Interrupt Enable | INTE | 0x01 | 0x00 | R/W | |||||||
CONFIGURATION | |||||||||||
Configuration | CONT | MANUAL | CDR | TIM[2:0] | 0x02 | 0x03 | R/W | ||||
LUX READING | |||||||||||
LUX high byte | E3 | E2 | E1 | E0 | M7 | M6 | M5 | M4 | 0x03 | 0x00 | R |
LUX low byte | M3 | M2 | M1 | M0 | 0x04 | 0x00 | R | ||||
THRESHOLD SET | |||||||||||
Upper Threshold—High Byte | UE3 | UE2 | UE1 | UE0 | UM7 | UM6 | UM5 | UM4 | 0x05 | 0xFF | R/W |
Lower Threshold—High Byte | LE3 | LE2 | LE1 | LE0 | LM7 | LM6 | LM5 | LM4 | 0x06 | 0x00 | R/W |
Threshold Timer | T7 | T6 | T5 | T4 | T3 | T2 | T1 | T0 | 0x07 | 0xFF | R/W |
ADVANCED MODE REGISTERS | |||||||||||
Adv1 Register | 0x09 | 0x00 | R/SW | ||||||||
Adv2 Register | 0xA | 0x00 | R/SW | ||||||||
Visible Gain Register | 0xB | 0x00 | R/SW | ||||||||
IR Gain Register | 0xC | 0x00 | R/SW | ||||||||
Trim Enable Register | 1 | ADV | 0xD | 0x80 | R/W |
1回限り(一般的には立上げ時)の事前セットアップ
1回限り(一般的には立上げ時)の事前セットアップを行うには、以下の手順に従います。
- 4つのレジスタアドレス(0x09~0x0C)の各内容を読み出します。
- 変数として格納します(それぞれAdv1、Adv2、VisibleGain、およびIRGain)。
- これらの変数の1の補数を新しい変数Adv1C、Adv2C、VisibleGainC、およびIRGainCのそれぞれに格納します。たとえば、IRGainC = !IRGainとなり、
- IRGain = 1010 0110であれば、IRGainC = 0101 1001です。
- レジスタ0x0Dに1000 0001を書き込み、アドバンストモードに移行します(すなわち、ADV = 1を設定しています)。
- Adv1C、Adv2C、VisibleGainC、およびIRGainCを元のレジスタ0x09~0x0Cにそれぞれ書き込みます。
- 例として、レジスタ0x0Cの値は最初1010 0110ですが、0101 1001が書き込まれます。
- 注:以降のレジスタ0x0Cの読出し(上記の書込み命令文の後)は、これらのAdvancedレジスタへの格納前にICが実行する内部自動ビット反転のため、引き続き元の0101 1001を読み出します。
- 特にIRGainCの値は、以降も使用するために保持します。
- 必要に応じて、Threshold Timerレジスタであるレジスタ0x07に適当な遅延を設定します。
- INTE = 1 (レジスタ0x01)を設定し、割込みをイネーブルにします。
通常動作モードに移行
通常測定モードに移行するには、以下の手順に従います。
- レジスタ0x03および0x04を読み出し、12ビットの照度測定値を得ます。
- ComboLuxとして値を格納します。
- レジスタ0x0Cに0000 0000を書き込み、一時測定モードに移行します。
- 少なくとも1.6秒(2 x 800ミリ秒)待ちます。
- 必要なら、マキシムに連絡してこの時間を短縮してください。
- レジスタ0x03および0x04を読み出し、12ビットの照度測定値を得ます。
- ApproxLuxとして値を格納します。
- レジスタ0x0CにIRGainCを書き込み、一時測定モードを終了します。
- ActualLux = ApproxLux - IRFactor x (ApproxLux - ComboLux)を計算します。
- ActualLuxは実際の環境光の照度測定値です。
- ApproxLux = ComboLux (蛍光灯およびWLEDライトの場合) (近似)
- ApproxLux > ComboLux (白熱灯および太陽光の場合) (標準)
- 適切なIRFactorの計算については、ガラスサンプルを用意してマキシムのアプリケーションチームに連絡してください。実験室におけるテストで直接データを生成することができます。
- 上記で計算したActualLuxに基づき、適切なバックライト強度を設定します。
- ComboLuxを基準として使用し、適切な上限照度スレッショルド(レジスタ0x05)および下限照度スレッショルド(レジスタ0x06)を設定します(これは、この製品の通常動作モードです)。
- INTSビット(レジスタ0x00)をダミーで読み出し、割込みが前もって設定されていれば、いずれもクリアします。
- ハードウェア割込みを待ちます。
- これはプログラムで多くの時間を費やす部分です。
- ハードウェア割込み時に、レジスタ0x00を読み出し、INTS = 1であることを確認します。
- INTS = 1の場合、上記のステップ7に進みます。
- そうではなくINTS = 0の場合、他のハードウェア割込み元を確認した後、ステップ16に戻ります。