要約
DS1859が他の多くの製品と異なる点は、その内部キャリブレーションと右シフト処理(スケーラブルダイナミックレンジ)の機能です。これらの機能を併用することによって、DS1859の12ビットのアナログ-ディジタルコンバータ(ADC)が大幅に強化され、コストとサイズを増加させることなく、最大で16ビットADCの精度と正確性を実現することができます。さらに、DS1859の内部キャリブレーションは、設定可能な利得と設定可能なオフセットの両方を備えており、(一部の例外を除いて)ほとんどの外付け信号コンディショニング回路が不要になります。ADCより前のアナログドメインに設けられた設定可能な利得によって、ADCの全レンジを使用するように入力信号を増幅または減衰することができます。その後のディジタルドメインで右シフト処理を使用することによって、希望する(またはSFF-8472によって要求された) LSBが温存されるように、かつユーザーからは透過的な形で、ディジタル出力を除算して元の大きさに戻すことができます。
このアプリケーションノートの目的は、内部キャリブレーションと右シフト処理を使用することで、アプリケーションが享受することができる利点を示すことです。また、このアプリケーションノートでは、内部キャリブレーションと右シフト処理の実装方法に関する有用な情報を提供します。最後に、具体例を用いて対象トピックのアプリケーションを示します。
DS1859のアナログモニタ入力
最初に、DS1859 MON入力のブロック図を見てみましょう(図1を参照)。わかりやすくするため1つの入力だけを図示してありますが、この概念は3つのMON入力のすべてに適用されます。
図1. DS1859のMON入力のブロック図
図から分かるように、DS1859のMON端子にはシングルエンドの電圧を印加します。アナログドメイン内で、その電圧が設定可能なゲインブロックに供給されます。このゲインブロックは、利得だけでなく減衰も可能です。このゲインブロックによって、希望するLSBまたはフルスケールの電圧が得られるようなMONチャネルのキャリブレーションが可能になっています。フルスケールの電圧とは、ディジタル出力がフルスケール(FFF8h)に達する電圧のことです。さらに、ゲインブロックが存在することで、小さな入力信号を内部で増幅し、ADCの利用度を最大化することが可能になっています。この手順については、後でさらに詳しく説明します。
ゲインブロックの次に位置するのが12ビットのADCです。12ビットの変換結果は左詰めされて2バイト(16ビット)値の形で出力されます。ADCは、0000h~FFF8hの範囲のディジタル値を出力することができます。
ディジタルドメインで、DS1859は、正または負のオフセットを付加することができるユーザー設定可能なディジタルオフセットを備えることで、内部キャリブレーションを進めます。このディジタルオフセットを使用して、単純なディジタルの加算を行うことで、内部的に正または負のオフセットを付加することができます。重要な点として、正のオフセットはそれでもディジタル値FFF8hでクランプすることに注意してください。一方、最小のディジタル値は、0以上となります。同様に、負のオフセットは、FFF8h未満のフルスケールのディジタル値を持つことになります(負のオフセットは変換結果からの減算になるため)。この場合の最小のディジタル値は、0000hのままです。ディジタルオフセットについての詳しい情報は、この後の「Offset Calレジスタ」の項に記載してあります。
ディジタル値を出力する前の最後の操作が、右シフト処理です。各MON入力には3つのビットが設けられており、希望する右シフト数を制御します。右シフト処理の利点については後で説明します。3つのビットにゼロをセットすると、右シフト数がゼロとなり、右シフト機能が無効化されます。オフセット同様、右シフトもフルスケールのディジタル出力に影響を与えます。たとえば、右シフト数を2に設定すると、フルスケールのディジタル出力は3FFEhになります。シフト実行後、ユーザーが変換結果の読取りを行う適切なレジスタに値が書き込まれます。この値は、アラームやウォーニングのための比較にも使用されます。
DS1859の出荷時キャリブレーション
DS1859の各MON入力は、それぞれフルスケール電圧2.5Vに出荷時調整されています。これは、2.5Vの入力電圧に対してFFF8hのフルスケールのディジタル値が出力されることを意味しています。また、各ディジタルオフセットは、0Vの入力に対してディジタル値0000hが出力されるようゼロに出荷時プログラムされています。また、右シフトの出荷時デフォルトも0です。図2Bに示すのが、出荷時キャリブレートされたDS1859の伝達関数であり、これについては後で説明します。
出荷時に調整されたデバイスは、0~2.5Vの入力電圧に対して、4096通りのディジタル値のいずれか1つを出力します。このとき、12ビットの変換の分解能は610µV (2.5V/4096)になります。理想的には、ディジタル化すべき入力信号が0~2.5Vの信号なら、このレンジ全体が活用されます。しかし現実のアプリケーションでは、必ずしもそうなるとは限りません。たとえば受信出力の場合は0~0.5Vの電圧が一般的であり、残念ながらディジタル出力コードの80%は使用されないことになります。4096通りのコードを生成する能力を持つ12ビットのADCが、820通り(4096通りの20%)のコードの中の1つしか出力しないという無駄が発生するのです。残りの3276通りのディジタルコードは、決して使用されません。しかも、使用される820通りのコードの分解能は610µVのままです。
より多くのディジタルコードを活用するためには、受信出力のMON入力をキャリブレートし直して、フルスケール電圧を少なくとも2.5V未満にする必要があります。しかし、単にMONの値をキャリブレートし直すだけでは、入力信号の問題は解決しません。LSBが変化して、希望のLSBと一致しなくなるためです。この問題を解決する方法が、次項で説明する、内部キャリブレーションと右シフト処理をともに使用する方法です。
DS1859内部キャリブレーションと右シフト処理を使用する利点
内部キャリブレーションと右シフト処理は、モニタ対象の信号が小さく、したがってADCのレンジ全体が使用されない場合に最も役立ちます。アナログ/ディジタル変換の前にアナログドメインの信号を増幅し、後からディジタルドメインでそれと同じ倍率で割って元に戻すことによって、希望のLSBを維持することができます。右シフト1回ごとに、精度と正確さの両方が2倍に改善します(最大4回まで)。4回の右シフト後は、精度は失われますが、正確さはさらに改善され続けます。この特長は、前に浪費したレンジを犠牲にして実現されるものです。
図2に示す例は、内部キャリブレーションと右シフト処理を使用する利点を最も良く表わしています。図2Aは、電圧と時間を軸にしてモニタ対象の信号の例をグラフにしたものです。この信号の例は、0V~0.5Vの範囲で変動しています。図2Bと図2CはMONの入力電圧とディジタル出力の関係を示すグラフで、出荷時キャリブレーションによる伝達関数と、2回の右シフトを使用してフルスケール電圧を2.5V/4 = 0.625Vとした伝達関数の例とをそれぞれ示しています。フルスケール電圧が0.625Vということは、無駄になるコードが減少するとともに、結果として変換後の値が2.5Vのフルスケール電圧に比べて4倍の大きさになることを意味しますが、その後これを4 (右シフト2回分)で割って元の大きさに戻します。右シフトの回数と、それによるフルスケール電圧の決定については、以下の項で取り上げます。ここで右シフト2回を使っているのは、単に右シフトの例を右シフトなしと比較するためです。使用したデバイスの設定、および各伝達関数に関連する計算については、該当する伝達関数の下にそれぞれ記載してあります。
図2. 右シフトなしと右シフトありの比較
図2の3つのグラフは、すべて同一のY軸およびスケールで並べて表示してあるため、入力信号(図2A)上の任意の特定点と、それぞれの伝達関数とを通る水平の線を引くことによって、ディジタル出力の大まかな近似値を求めることができます。0V~0.5Vの範囲の入力信号の例に戻ると、3つのグラフを通る太い水平線によって0.5Vが示されていますが、グラフBとCを比較することによって右シフトの利点が分かります。ADCの入力レンジが入力信号よりはるかに広い電圧範囲にわたっている場合、数多くの段階が無駄になることが改めて分かります(グラフBを参照)。グラフBでは、4096段階のうち819だけが使用され、残りの80%は無駄になっています。これに対してグラフCでは、内部的なキャリブレーションでフルスケール電圧を小さくし、右シフトを使用することによって、精度が増大しています。この場合、4096通りのディジタルコードの内、3276通りが信号のディジタル化に使用されています。ここでの利点は、右シフトの後も希望のLSBが維持されている点です。右シフト処理は、ユーザーからは透過的です。この点は、両方のグラフがほぼ同じディジタル値を出力していることから確認することができます。
必要な右シフト回数の決定方法
アプリケーションで使用可能な右シフトの回数は、フルスケール電圧(内部キャリブレーション)と、特定の入力信号に使用されるディジタルコードの割合との関数になります。(フルスケール電圧に加えて)入力信号の最大電圧が分かっている場合は、予想されるディジタル出力を計算することができます。それ以外の場合は、エンジニアリング評価の期間中に「実地」アプローチを使ってディジタル出力の範囲を決定し、そこから理想的な右シフトの回数を決定することが要求されます。この「実地」アプローチについて、以下で段階を追って詳しく説明します。
1. | 右シフトビットに0をセットします。 |
2. | 希望のLSBが得られるように内部キャリブレーションを行います(これによって、フルスケール電圧の初期値が決定されます)。 |
3. | 最小および最大の入力信号を印加し、それに対するディジタル出力の値を読み取って、使用されているレンジを判定します。 |
4. | ADCのレンジの何パーセントが使用されているかを求めます。ディジタル値が7FFFhを超えている場合は、右シフトは使用しません(右シフト0回)。しかし、ディジタル値が7FFFhより小さければ、少なくとも1回の右シフトが使用可能です。ディジタル値が3FFFhより小さければ、右シフト2回が使用可能です。以下、この繰り返しになります。その他のレンジについては、DS1859のデータシートの表9を参照してください。 |
5. | 右シフトによって生じるディジタル値の除算を補償するため、アナログドメインにおいて利得を追加し、希望のLSBが維持されるようにする必要があります。これは、次の式を使って新しいフルスケール電圧を計算することによって行います。 新しいフルスケール電圧 = フルスケール電圧の初期値 / 2右シフト数すなわち、(希望のLSBを維持するために)ステップ2の内部キャリブレーションの結果フルスケール電圧が2.0Vになり、かつディジタル値が1FFFhより大きく3FFFhを超えない範囲だった場合、右シフトは2回が理想的ということになります。したがって、この例での新しいフルスケール電圧は、2.0V/2² = 0.5Vになります。 |
6. | 新しいフルスケール電圧になるよう(まだ右シフトビットには0をセットしたままで)チャネルの内部キャリブレーションを行います。 |
7. | 右シフトビットに新しい値をセットします。 |
評価時に、特定のアプリケーションについて理想的な右シフト数とフルスケール電圧を決定してしまえば、本番のキャリブレーションで必要になるステップは、1、6、および7だけです。
DS1859内部キャリブレーションおよび右シフト用レジスタ
各アナログチャネルの内部キャリブレーションおよび右シフトの設定に関するDS1859のデバイスレジスタを表1にまとめました。各MONチャネルの設定用の他、VCCについてもレジスタアドレスを示してあります。VCCを含めたのは表を完全なものにするためですが、実際にはこのアプリケーションノートでは解説していません。ディジタル変換値の場所についても、それぞれの相対位置を表に含めておきました。利得、オフセット、および右シフトの各レジスタは、メモリテーブル01hの中にあることに注意してください(このアプリケーションノートの表1と混同しないこと)。メモリテーブル01hは、テーブル選択バイト(7Fh)に01hを書き込むことによって選択します。このとき、ディジタル変換値は低位のメモリバンク(0-7Fh)にあるため、テーブル選択バイトに依存しません。
表1. DS1859の内部キャリブレーションおよび右シフト用レジスタ
VCC | MON1 | MON2 | MON3 | |
Gain Cal | 92-93h | 94-95h | 96-97h | 98-99h |
Offset Cal | A2-A3h | A4-A5h | A6-A7h | A8-A9h |
Right Shifts | N/A | 8Eh (b6-b4) | 8Eh (b2-b0) | 8Fh (b6-b4) |
Readings | 62-63h | 64-65h | 66-67h | 68-69h |
Table 01h |
Gain Calレジスタ
Gain Calレジスタは、入力スイッチトキャパシタ回路の調整によって特定のモニタ対象チャネルの利得/減衰量を決定する2バイトの値です。これによって、フルスケール電圧を約500mV~6.5535Vの範囲で希望する任意の値にキャリブレートすることが可能になります。
残念ながら、Gain Calレジスタのプログラミングは、「4の利得が欲しいからGain Calレジスタに4を書き込む」というような単純なものではありません。また、入力スイッチトキャパシタ回路におけるデバイス(またはロット)の違いに合わせて設定をキャリブレートすることが絶対に必要です。このキャリブレーションおよびGain Calレジスタに書き込む値の決定手順は、DS1859のデータシートの「Internal Calibration (内部キャリブレーション)」の項で説明します。また、このアプリケーションノートの「内部キャリブレーションの方法」の項で追加情報を提供します。
DS1859のキャリブレーションに関する最後の注意点として、オフセットレジスタと右シフトレジスタの両方の値を把握していることが重要になります。さもないと、これらの値がゼロでなく、かつ補償されていない場合、デバイスのキャリブレーションが意図どおりに行われなくなります。
Offset Calレジスタ
Offset Calレジスタは、モニタ対象の各入力に適用するディジタルオフセット量を決定する2バイトの値です。DS1859のオフセットは、変換後の値に対する単純なディジタルの加算または減算であることを思い出してください。したがって、希望の値に合わせて利得の調整が完了した後(かつ右シフトの有効化よりも前に)、オフセットをプログラムして任意のオフセットの除去またはレンジの移動を行うことができます。残念ながら、Gain Calレジスタ同様、プログラムする値の決定は、「100mVのオフセットが欲しいからレジスタに100を書き込む」というような容易なものではありません。
DS1859のデータシートの「Internal Calibration」の項で示される内部キャリブレーションの擬似コードからオフセットの除去に必要なOffset Cal値を求めることができますが、同時にこの項には、正または負のオフセットの例とともに追加情報が記載されています。
Offset Calの計算は、まず変換結果に対して加算または減算するカウントを決定することから始まります。そのための一般的な方法の1つは、ゼロ状態の入力(レーザーオフなど)を適用して、その変換結果を読み取るというものです。この値をすべての変換結果から減算することになります。
Offset Calレジスタに書き込む値は、希望するカウントを、DS1859のデータシートで提供される式(以下に再掲)に代入することによって計算します。
Offset Calレジスタ = [4000h - (Count/2)] XOR 4000h
例1:MON入力に0Vを印加し、カウントが200 (C8h)であった場合、オフセットレジスタを使用して、A/D変換の結果から、この200 (C8h)を減算することができます。次式を使用すると、レジスタに書き込む値が求まります。
Offset Calレジスタ = [4000h - (C8h/2)] XOR 4000h = 7F9Ch
この場合、減算が行われるということを忘れないでください。そのため、フルスケールのカウント(FFF8h)もC8hだけ減少し、新しいフルスケールのカウントはFF30hになります。
例2:変換結果に200カウントを加算したいとします。この場合、2つの負(式中の負と-C8h)が打ち消し合って第2項が正となり、次式が導かれます。
Offset Calレジスタ = [4000h + (C8h/2)] XOR 4000h = 0064h
新しいフルスケールのカウントを計算するため、普通ならFFF8hにC8hを加算(しようと)するところです。しかし、FFF8hは起こりうる最大のディジタル値であるため、フルスケールのカウントはFFF8hのままになります。
例3:ゼロオフセットに対するOffset Cal値を計算します。
Offset Calレジスタ = [4000h - (0/2)] XOR 4000h = 0000h
これは、Offset Calレジスタの出荷時デフォルトでもあります。
右シフトレジスタ
右シフトレジスタ(テーブル01h、バイト8Eh~8Fh)は、利得やオフセットレジスタよりもはるかに容易に理解することができます。MON1~MON3は最大7回の右シフトを実行することができるため、各MON入力について3ビットが必要です。MON1とMON2の設定はテーブル01h、バイト8Ehに格納され、MON3の設定はテーブル01h、8Fhに格納されます。各ビットの位置については、データシート中のメモリマップを参照してください。これらのEEPROMレジスタの出荷時デフォルトは00hであり、右シフト処理が無効化されています。
右シフト処理の結果をさらに詳しく示すため、結果として生じるMONの値の例をいくつか図3に示します。
図3. MONレジスタの右シフト処理の例
内部キャリブレーションの方法
内部キャリブレーションを実行することができる方法はいくつかありますが、このアプリケーションノートでは、DS1859のデータシート中で示されている(疑似コードを使用した)バイナリサーチによるアプローチを検討します。疑似コードアルゴリズムの出力は、希望の伝達関数、すなわち希望のLSBをもたらす利得とオフセットレジスタの値になります。
疑似コードアルゴリズムを使用するためには、レーザーを2つの異なる強度、たとえば最弱と最強の90%にセットすることができること、および複数回の繰り返しが可能であることが必要です。光以外のアプリケーションの場合は、命令に応じて2つの異なる電圧をMON入力に印加することができなければなりません。データシートで示すアルゴリズムは最大値の90%を使用しているため、上限はクランプされにくくなっています。ただし、希望するフルスケールのパーセンテージを適用するときには、対応するディジタル値のパーセンテージも計算することが大切です。
このアルゴリズムは、オフセットと右シフトレジスタを既知の状態、具体的にはゼロオフセットとゼロ右シフトに設定することから始まります。この例ではどちらのレジスタにもゼロをセットしていますが、適切に補償を行うならば、他の値を使用することも可能です。たとえば、オフセットをプログラムして開始する場合、FFF8hはクランプされたフルスケールのディジタル値ではないかもしれません(「Offset Calレジスタ」の項を参照)。レジスタの初期化の他にも、アルゴリズムの開始時には希望するLSBの関数であるいくつかの重要な定数を計算します。
利得値を求めるバイナリサーチは、Gain Calレジスタにハーフスケールである8000hをセットすることから始まります。次に、最大入力の90%をキャリブレート対象のMONチャネルに印加し、それに対応するディジタル変換結果を読み取ることによって、その利得値をテストします。この値を以後Meas2と呼びます。Meas2がクランプされているか、すなわち(オフセットと右シフトがゼロであるため) FFF8hかどうかチェックします。値がクランプされている場合、変換結果が実際にFFF8hなのかもっと大きいのかは断定することができません(後者の場合もFFF8hになります)。どちらにしても、利得設定が高すぎます。バイナリサーチ式に利得値を半分にして、クランプが生じない利得値が見つかるまでこのプロセスを繰り返します。
クランプの生じないMeas2が見つかると、アルゴリズムは直ちに次に進み、ゼロ入力を印加してそのディジタル変換値を読み取ります。この変換値がMeas1になります。最後に、Meas2とMeas1の差分(デルタ)を計算し、アルゴリズムの最初に計算した定数を使って、希望するデルタ(CNT2-CNT1)との比較を行います。もしMeas2-Meas1がCNT2-CNT1より小さければ、また利得を半分にします。そうではなく、Meas2-Meas1がCNT2-CNT1より大きかった場合は、利得の半分を求め、今度はそれを現在の利得に足すことによって、利得を増大させます。このプロセスが、合計16回になるまで繰り返されます。結果は、望ましい利得(と希望どおりのLSB)をもたらす16ビット値になります。
利得のキャリブレーション手順を具象化する方法は、他にもあります。16ビットのGain CalレジスタのMSB (b15)から始めて、そのビットに1をセットします(他のビットはすべて最初に0をセットします)。MSB = 1の状態で、アナログ入力を印加してディジタル出力を読み取るプロセスが実行されます。変換結果がクランプされていた場合は、利得が高すぎるため、MSBを0に戻します。そうでなければ、MSBは1のままにします。これでMSBが判明したことになります。次に、ビットb14に移ります。b14に1をセットします(b15には、すでに決定した値をセットします)。ビット13からb0までは、まだ0のままです。これで再びプロセスを実行して、まだ利得が高すぎるかどうかを判定します。高すぎる場合、今度はb14が0になります。高すぎなければ1になります。以下、この手順を1ビットごとに行い、16ビットすべてが決まるまで続けます。この場合も結果は16ビットの値になり、その値によって望ましい利得が得られます。
望ましい利得が得られたら、新しいオフセットのキャリブレーションを行うか、または0のまま(オフセットなし)にすることができます。キャリブレーションの方法は、オフセット機能をどのように使用するかによって異なります。データシート中のアルゴリズムに付随する説明では、ユーザーが負のオフセットを適用してディジタル値の基準をゼロに合わせ、アナログのゼロ入力からすべてゼロの出力が得られるようにしたいものと想定しています。これは、単にゼロのアナログ入力を印加して変換結果を読み取ることによって行います。ゼロ入力(たとえばレーザーオフ)から、たとえば20hのようなディジタル出力が得られた場合、すべての変換結果から20hがディジタル的に減算されるようにオフセットをプログラムすることができます。この例で言えば、オフセットの式に20hを代入し、その結果の値を、希望のMONチャネルのOffset Calレジスタにプログラムします。
内部キャリブレーションと右シフト処理の例
次の例は、このアプリケーションノートで説明した概念を分かりやすく示すために用意したものです。
この例では、MON3を使用してRpowerのモニタを行います。入力の最小値である-40dBmを印加したとき、DS1859のMON3端子に10mVの電圧が発生します。この入力に対する望ましいディジタル出力は0000hです。0dBmの入力を印加すると、MON3に300mVが発生します。この場合の望ましいディジタル出力は2710hであり、SFF-8472が規定するLSBを満たすものとして選択されました(RpowerのLSBは0.1µW)。
望ましいディジタル出力の範囲がすでに与えられているため(0000h~2710h)、この例について理想的な右シフト数を判定するのは比較的簡単です。DS1859のデータシートの表9を使用すると、理想的な右シフト数は2になります。右シフト数が2ということが分かれば、2710hが2回の右シフト後の最終的な出力になるためには、300mVの入力に対する右シフト前の変換結果として9C40hが得られる必要があると結論することができます。したがって、内部キャリブレーションを使用して300mVの入力に対する変換結果を9C40hに「増幅」することになります。内部キャリブレーションとオフセットのプログラムが完了したら、2回の右シフトを有効化します。以上の例を、表2にまとめてあります。
表2. 内部キャリブレーションと右シフト処理の例
Customer Signal Rpower (dBm) | Voltage applies to MON3 pin (mV) | Digital outputs during cal. (0 right shifts)(hex) | Final Digital output (2 right shifts)(hex) |
-40 | 10 | 0000 | 0000 |
50 | 0563 | ||
100 | 0C1F | ||
150 | 12DB | ||
200 | 1997 | ||
250 | 2051 | ||
0 | 300 | 9C40 | 2710 |
入力と出力の間の関係が決定したら(表2を参照)、データシートで提供されている内部キャリブレーション用ルーチンを使用してデバイスの内部キャリブレーションを行います。このルーチンは、最初に以下で示す若干の事前計算を実行します。第2のキャリブレーションポイント(300mV = 9C40h)がすでにフルスケール値の90%より小さいため、ここではデータシートのルーチンに示された90%という値を使用していないことに注意してください。したがって、この例で使用した内部キャリブレーション用ルーチンでは、90%という数字をすべて削除しています。
表2から、以下の計算が行われます。
LSB = (0.300V - 0.010V)/(9C40h - 0000h) = 0.290V/40,000 = 7.25µV
フルスケール電圧 = FS = LSB × 65535 = 7.25µV × 65535 = 0.475128V
CNT1 = 0.010/LSB = 1379.3 => 1379 (dec)
CNT2 = 0.300/LSB = 41379.31 => 41379 (dec)
CNT1とCNT2が、2つのキャリブレーションポイントを印加したときに期待される(望ましい)ディジタル出力です。内部キャリブレーションルーチンは繰り返し処理によって、これらの2つの値で決まるスロープにできる限り近いスロープを探します。
ルーチンの繰り返し部分では、バイナリサーチ方式で16回にわたってスロープをプログラムし、それが望ましいスロープと等価かどうかチェックを行います。この例については、内部キャリブレーション手続きを使ってDS1859のキャリブレーションを行っています。16回の繰り返しすべての入力と出力を表3に示します。
表3の最初の列Iterationは、ルーチン内のnに相当します。gain_resultの列は、それぞれの繰り返しにおいて、Gain Calレジスタ(デバイステーブル01h、バイト98~99h)にプログラムされる値です。Meas2とMeas1の列は、それぞれ300mVと10mVを入力に印加したときにデバイスから読み取られたディジタル値です。最後に、Meas2がクランプされなかった回について、Meas2-Meas1とCNT2-CNT1の比較を行います。Meas2-Meas1がCNT2-CNT1よりも大きい場合は、gain_resultが大きすぎたことを示します。その回に相当するGain Calビットはゼロになり、それによって次の回のgain_resultが決まります。16回の繰り返しがすべて完了したところで、Gain Cal値が判明します。この例で使用したデバイスの場合、結果のGain Cal値は5038hになりました。
表3. 実際の内部キャリブレーション値
Iteration | gain_result | Meas2 | Meas1 | Meas2 | Meas1 | Meas2-Meas1 | CNT2-CNT1 | bit result | Gain Cal |
(dec) | (hex) | (hex) | (dec) | (dec) | (dec) | (bin) | (hex) | ||
15 | 8000 | fd58 | 870 | 64856 | 2160 | 62696 | 40000 | 0 | 5 |
14 | 4000 | 82a0 | 450 | 33440 | 1104 | 32336 | 40000 | 1 | |
13 | 6000 | c010 | 658 | 49168 | 1624 | 47544 | 40000 | 0 | |
12 | 5000 | a138 | 558 | 41272 | 1368 | 39904 | 40000 | 1 | |
11 | 5800 | b0b8 | 500 | 45240 | 1280 | 43960 | 40000 | 0 | 0 |
10 | 5400 | a938 | 5a0 | 43320 | 1440 | 41880 | 40000 | 0 | |
9 | 5200 | a530 | 578 | 42288 | 1400 | 40888 | 40000 | 0 | |
8 | 5100 | a328 | 568 | 41768 | 1384 | 40384 | 40000 | 0 | |
7 | 5080 | a238 | 568 | 41528 | 1384 | 40144 | 40000 | 0 | 3 |
6 | 5040 | a1a8 | 560 | 41384 | 1376 | 40008 | 40000 | 0 | |
5 | 5020 | a170 | 558 | 41328 | 1368 | 39960 | 40000 | 1 | |
4 | 5030 | a190 | 558 | 41360 | 1368 | 39992 | 40000 | 1 | |
3 | 5038 | a198 | 558 | 41368 | 1368 | 40000 | 40000 | 1 | 8 |
2 | 503C | a1a0 | 558 | 41376 | 1368 | 40008 | 40000 | 0 | |
1 | 503a | a1a0 | 558 | 41376 | 1368 | 40008 | 40000 | 0 | |
0 | 5039 | a1a0 | 558 | 41376 | 1368 | 40008 | 40000 | 0 |
デバイスに新しいGain Cal値をプログラムした状態で、10mV (変換結果を0000hにしたい電圧)を印加してディジタル変換の結果を読み取ることによって、Offset Calを決定することができます。この例で使用したデバイスの場合、10mVを印加すると0558hという値が出力されました。オフセットの公式を使用して、次のようにOffset Calを計算します。
MON3のOffset Cal = [4000h - 0558h/2] XOR 4000h = 7D54h
最後に、新しいクランプ値は次のように計算することができます。
新しいクランプ値(右シフト前) = FFF8h - 0558h = FAA0h
内部キャリブレーションが完了したところで、テーブル01h、位置8Fhに20hを書き込むことによって2回の右シフトを有効化します。
結論
DS1859の内部キャリブレーションおよび右シフト機能は、最大の柔軟性を提供し、DS1859を幅広いアプリケーションに適合させます。このアプリケーションノートでは、DS1859のデータシートには記載されていない追加情報、具体的には、内部キャリブレーションおよび右シフトが役立つ理由およびそれらの実装方法に関する追加情報を提供しています。それぞれの概念を1つに結び付け、内部キャリブレーションの手順の中でDS1859から読み取られる実際のデータを示すために、「実地」例も用意しました。
このアプリケーションノートに関するご質問/ご意見/ご提案は、次のアドレスまでお送りください(英語のみの対応となります)。
{{modalTitle}}
{{modalDescription}}
{{dropdownTitle}}
- {{defaultSelectedText}} {{#each projectNames}}
- {{name}} {{/each}} {{#if newProjectText}}
-
{{newProjectText}}
{{/if}}
{{newProjectTitle}}
{{projectNameErrorText}}