アプリケーションノート 5321

光マイクロコントローラDS4830のADC内部オフセットの較正

筆者: Sanjay Jaroli

要約: 光マイクロコントローラのDS4830のアナログ-デジタルコンバータ(ADC)は、温度および利得の選択によってオフセットが変化する可能性があります。しかし、DS4830はユーザーによるADC内部オフセットの測定が可能です。測定したADCオフセットをADC Offsetレジスタに加算して、オフセット誤差を相殺します。このアプリケーションノートは、アプリケーションプログラムでのDS4830のADC内部オフセット較正の具体例を示します。

はじめに

アナログ-デジタルコンバータ(ADC)は、入力電圧を対応するデジタルコードに変換します。理想的なADCはコードスペース全体にわたってこの動作を行います。図1は、2Vのリファレンスによる3ビットADCの伝達関数を示します。
図1. 1/2 LSB補正された理想的3ビットADC
図1. 1/2 LSB補正された理想的3ビットADC
しかし、すべてのアーキテクチャで理想的なADCの特性に適合するADCを設計するのは困難です。さまざまな設計上の制限や制約により、積分非直線性(INL)、微分非直線性(DNL)、利得、およびオフセットなど、ADCの出力にはさまざまな誤差が含まれます。
オフセット誤差は、ADCの最も一般的な誤差です。ゼロ電圧入力(ADCの入力をグランドに接続した状態)に対するADCのデジタルコード出力を、ADCオフセットと呼びます。図2は、オフセットのある3ビットADCの伝達関数を示します。
図2. オフセットのある1/2 LSB補正された3ビットADC
図2. オフセットのある1/2 LSB補正された3ビットADC

DS4830のADC内部オフセット

光マイクロコントローラのDS4830は、13ビットのADCと、ADC内部オフセットを較正するためのADC Offsetレジスタ(ADVOFF)を備えています。個々のDS4830について、室温でADCの利得がADCG1 (1.216Vフルスケール)になるように出荷時にオフセットが較正されます。しかし、DS4830のADC内部オフセットは、温度および利得の選択によって変化する可能性があります。
DS4830は、利用可能な任意のADC利得設定について、ADC内部オフセットを測定することができます。その後、この測定値を使用してADVOFFレジスタを較正することが可能です。ADC内部オフセットを測定する場合、ADCコントローラは内部グランドをADC入力に接続し、ADC上で変換を開始します。ADCコントローラは、ADC内部オフセットの測定をADCコントローラに指示する専用のチャネル選択を位置25に備えています。ADCコントローラは、ADC内部オフセットの変換結果を格納するための専用のデータバッファを備えていません。内部オフセットの変換結果にアクセスするためには、ADCコントローラの位置オーバーライドオプションを使用する必要があります。

ADC内部オフセットの位置オーバーライドオプション

デフォルトでは、ADCの変換結果はチャネル番号に対応するADCのバッファ位置に格納されます。ADCコントローラは「位置オーバーライド」オプションを備えています。このオプションによって、ADCの変換結果をデータバッファの任意の位置(0~24のデータバッファ位置)に格納することができます。ADC Controlレジスタ(ADCN)内に、位置オーバーライドのLOC_OVRビットがあります。このビットに1を設定することで、ADCの変換結果を格納するための代替位置をユーザーが選択することができます。代替位置は、ADC Statusレジスタ(ADST)内のADC Conversion Configurationレジスタ選択ビット(ADCFG)に1が設定されている場合に、ADDATA[12:8]ビット(ALT_LOC[4:0])によって定義されます。

内部オフセット測定のためのADCの設定手順

以下の各ステップで、ADCの内部オフセットを測定するためのDS4830のADC Data and Configurationレジスタ(ADDATA)の設定を説明します。
  1. ADCNおよびADSTレジスタ内の以下のビットに、それぞれの値を設定します。
    1. 位置オーバーライドビット(ADCN.LOC_OVR)に1
    2. ADC設定選択ビット(ADST.ADCFG)に1
    3. ADCレジスタインデックスビット(ADST.ADIDX[4:0])に0
  2. ADDATAレジスタ(ADDATA)に対する書込みを行ってください。ADDATA[4:0]ビットに位置するADCチャネル選択ビットADCH[4:0]は25にしてください。さらに、ADDATAレジスタの代替位置ビットALT_LOC[4:0]に対する書込み(0~24の任意の値)を行ってください。ADC内部オフセットの変換結果は、その設定の代替位置ビットが示すデータバッファ位置に格納されます。たとえば、
    1. ADDATA = 0x0039の場合、ADCの設定は、内部オフセット測定、差動モード、代替位置0、利得1、およびADC右揃えになります。
    2. ADDATA = 0x4139の場合、ADCの設定は、内部オフセット測定、差動モード、代替位置1、利得3、およびADC右揃えになります。
    3. ADDATA = 0x6439の場合、ADCの設定は、内部オフセット測定、差動モード、代替位置4、利得4、およびADC右揃えになります。
  3. ADC設定選択(ADST.ADCFG)に0を設定し、ADCレジスタインデックスビット(ADST.ADIDX[4:0])に0を設定してください。

ADC内部オフセットの測定と較正

ADCを内部オフセット測定用に設定したあと、ADCNレジスタのADC変換開始ビット(ADCONV)に1を設定してADC変換を開始します。ADCコントローラは内部グランドをADC入力に接続してADC内部オフセットを測定し、ADCでの変換を開始します。変換結果は、ADC内部オフセットの測定値です。これは、ADCの設定中に設定されるALT_LOC[4:0]ビットによって示されるデータバッファ位置から読み取ることができます。
ADC内部オフセットを較正するには、ADC内部オフセット測定値の負の数(2の補数)をADVOFFレジスタに設定してください。ADC内部オフセット測定値に基づくADVOFFの値の例をいくつか表1に示します。これらのADVOFFの値は、出荷時較正されたADVOFFの値が0であると想定しています。通常のADC動作中、最終結果がデータバッファに格納される前にADVOFFの値が変換結果に加算されます。
表1. ADC内部オフセットに対するADVOFFレジスタの値
Measured ADC Internal Offset ADVOFF Register (in Hex)
(in Decimal) (in Hex)
-2 FFFEh 0002h
-1 FFFFh 0001h
0 0000h 0000h
1 0001h FFFFh
2 0002h FFFEh
:パワーオンリセット(POR)時には、較正済みの値が出荷時デフォルト値で上書きされます。

サンプルコード

main.c のコードは、ADC内部オフセットの較正手順を示します。

フローチャート

フローチャート