PR

12bitのADCなのに実力は10bit?分解能・精度・ENOBの違いとデータシートの読み方

ソフトウェア

ADC(A/Dコンバータ)を選ぶとき、まず目に入るのは「12bit」「16bit」といった分解能の数字です。しかしデータシートを読み進めると、INL、DNL、ENOB、ノイズフリー分解能と、似たような項目が次々に出てきます。

  • 分解能が高いADCを選べば、それだけ正確に測れるのか?
  • INL、DNL、ENOB、ノイズフリー分解能は何が違うのか?
  • 自分のマイコンのADCの実力は、どうやって確かめるのか?

この記事では、これらの疑問をQ&A形式で整理します。

先に結論

  • 分解能は「目盛りの細かさ」、精度は「本当の値への近さ」です。別々の性能で、片方が良くてももう片方が良いとは限りません。
  • 精度は、オフセット誤差、ゲイン誤差、INL、そして基準電圧で決まります。
  • ノイズを含めた実質的な分解能は、交流ならENOB、直流ならノイズフリー分解能で見ます。
  • bit数は上限であって、実力はデータシートのその下の項目に書いてあります。

Q1. 分解能と精度は何が違うのか?

A. 分解能は「どれだけ細かく刻めるか」、精度は「測った値が本当の値にどれだけ近いか」です。

体重計で考えると分かりやすくなります。表示が0.01kg単位の体重計は分解能が高いと言えます。しかしその体重計が実際の重さより常に0.5kg多く表示するなら、精度は良くありません。細かく表示できることと、正しく表示できることは別の話です。

ADCでも同じことが起きます。3.3Vを12bitで変換すると、1LSB(最小の刻み)は約0.806mVです。ところが基準電圧が1%ずれていると、フルスケール付近では約33mVの誤差になります。これは約41LSB分です。目盛りは0.8mV刻みなのに、値そのものは33mVずれているという状態です。

用語について

計測の分野では、本当の値への近さを「確度」、ばらつきの小ささを「精度」と呼び分けることがあります。この記事では、日常的な使い方に合わせて、本当の値への近さを「精度」と書いています。

Q2. 精度を決めるのは、データシートのどの項目か?

A. 主にオフセット誤差、ゲイン誤差、INL、DNLの4つと、ADCの外にある基準電圧です。

項目何のずれか校正で消せるか
オフセット誤差 ゼロ点のずれ。変換結果の全体が上下に平行移動する。 消せる(1点の校正)
ゲイン誤差 傾きのずれ。入力が大きいほど誤差も大きくなる。 消せる(2点の校正)
INL(積分非直線性) 入出力の関係が、理想の直線からどれだけ曲がっているか。 難しい(補正テーブルが必要)
DNL(微分非直線性) 1コードの幅が、理想の1LSBからどれだけずれているか。 消せない
基準電圧の誤差 ものさしそのものの長さのずれ。ゲイン誤差と同じ形で現れる。 初期値は消せる。温度による変化は残る。

オフセット誤差とゲイン誤差は、既知の電圧を入れて補正係数を求めれば取り除けます。一方、INLは入力電圧によって誤差の出方が変わるため、簡単には補正できません。校正できる機器では、最後に残る誤差はINLと温度ドリフトになることが多いです。

DNLが−1LSBに達すると、あるコードの幅がゼロになり、そのコードが決して出力されなくなります。これをミッシングコードと呼びます。

例:Arduino Unoのマイコン(ATmega328P)

ATmega328Pの内蔵ADCは10bitで、INLは0.5LSB、絶対精度は±2LSBとされています。5V基準なら1LSBは約4.88mVなので、±2LSBは約±10mVです。

つまり、4.88mV刻みで値は変わるものの、絶対値として期待できるのは±10mV程度ということです。しかもこの数字には基準電圧の誤差は含まれていません。USBの5Vをそのまま基準にしていれば、誤差はさらに大きくなります。

Q3. ENOB(有効ビット数)とは何か?

A. ノイズと歪みを含めた実測の性能を、「理想的なADCなら何bit相当か」に換算した値です。

理想的なNbitのADCに正弦波を入れたときのSN比は「6.02 × N + 1.76 dB」です。ENOBはこの式を逆向きに使います。

ENOB =(SINAD − 1.76)÷ 6.02

SINADは、信号と「ノイズ+歪み」の比です。実際に正弦波を入力して測定します。

SINADENOB
74dB12.0bit(理想的な12bit ADC)
68dB約11.0bit
62dB約10.0bit

12bitのADCでSINADが62dBなら、実力は10bit相当です。下位2bitはノイズと歪みに埋もれていることになります。

注意点が2つあります。ENOBは交流信号での性能なので、入力周波数が高くなると下がるのが普通です。また、オフセット誤差やゲイン誤差はENOBには現れません。ENOBが高くても、絶対値が正確とは限りません。

Q4. ノイズフリー分解能と実効分解能とは何か?

A. 直流を測るときに、ノイズで値がどれだけばらつくかを示す指標です。重量計や温度計のような用途では、ENOBよりこちらを見ます。

入力に一定の電圧を加えても、ADCの出力はノイズで数コードの範囲をふらつきます。このふらつきの大きさから、次の2つを計算します。

  • 実効分解能 = log2(フルスケール範囲 ÷ ノイズの実効値)
  • ノイズフリー分解能 = log2(フルスケール範囲 ÷ ノイズのピークtoピーク値)

ノイズのピークtoピーク値は、実効値の約6.6倍と見積もるのが一般的です。そのため、ノイズフリー分解能は実効分解能より約2.7bit小さくなります。

たとえばフルスケール5Vで、ノイズの実効値が1µVのADCなら、実効分解能は約22.3bit、ノイズフリー分解能は約19.5bitです。表示がちらつかない桁数に対応するのはノイズフリー分解能のほうです。

メーカーによって呼び方が違う

ここで「実効分解能」と呼んだ値を、データシートによっては「ENOB」と表記していることがあります。名前だけで判断せず、どういう条件で、どの式で計算した値かを確認してください。データレートやゲインの設定によっても大きく変わります。

Q5. 自分のマイコンのADCの実力は、どう確かめるのか?

A. 一定の電圧を入れて繰り返し測り、値のばらつきを見るのが手軽です。

  1. 安定した電圧を入力する
    乾電池や基準電圧ICなど、ノイズの少ない電圧源をつなぎます。GNDに直結すると、マイナス側のばらつきが0で切られて見えなくなるので、レンジの中ほどの電圧が適しています。
  2. 1000回以上、連続して測る
  3. 最大値と最小値の差、標準偏差を求める
  4. bit数に換算する
    実効分解能 = ADCのbit数 − log2(標準偏差[LSB])
    ノイズフリー分解能 = ADCのbit数 − log2(最大値 − 最小値[LSB])

たとえば12bitのADCで標準偏差が2LSB、最大と最小の差が13LSBだったとします。実効分解能は11bit、ノイズフリー分解能は約8.3bitです。1回の測定でちらつかないのは、上位8bit程度ということになります。

なお、標準偏差が0.5LSBより小さい場合、この換算は意味を持ちません。ばらつきがADCの刻みより小さく、ノイズを正しく測れていないためです。

この方法で分かるのはノイズだけです。INLやゲイン誤差を調べるには、正確な電圧を何点か入力して、測定値と比べる必要があります。

Q6. 用途別に、どの項目を見ればよいか?

A. 直流を正確に測りたいのか、交流の波形を取りたいのかで、見る項目が変わります。

用途重視する項目
電圧、温度、重量などの直流計測 オフセット誤差、ゲイン誤差、INL、ノイズフリー分解能、基準電圧の温度ドリフト
音声、振動などの交流計測 SINAD、ENOB、THD(歪み率)、サンプリング速度
変化の検出(絶対値は不要) ノイズ、DNL
校正できない量産品 総合誤差(TUE)や絶対精度の最大値、基準電圧の初期誤差

まとめ

  • 分解能は目盛りの細かさ、精度は本当の値への近さ。bit数が多くても正確とは限らない。
  • オフセット誤差とゲイン誤差は校正で消せる。INLと温度ドリフトは残る。
  • ENOBは交流でのノイズと歪みを含めた実力。直流ではノイズフリー分解能を見る。
  • 手元のADCのノイズは、一定電圧を繰り返し測って標準偏差を見れば確かめられる。
  • 基準電圧の誤差はADCの仕様に含まれない。高精度を狙うなら、基準電圧ICの選定も同じくらい重要。

参考資料

コメント

タイトルとURLをコピーしました