ADC の較正を、どの段で止めるか ―― オフセット・ゲイン・非線形・温度と、0–55℃で 1mV の落としどころ
- 電子回路
- 組み込み
- アナログ
- spice
- 計測
センサをアンプで受けて ADC に入れ、マイコンで読む。この経路の読み値は、そのままでは合いません。較正のときは、センサの代わりに精度の高い電圧源をつなぎ、その正しい電圧とマイコンのデジタル値を突き合わせて、ズレを直す係数を求めます。こうして係数を決めるのが較正、決めた係数で日々の読み値を直すのが補正です。厄介なのは、較正にいくつも段があって、上に行くほど精度は上がる代わりに、部品も工場の手間もファームの処理も増えることです。
この記事では、どこまで登るのが得か、を考えます。前段のアンプは SPICE で解いて誤差を出し、制御盤を想定した 0〜55℃・1mV という具体的な目標で落としどころを探しました。実機の実測ではなく、モデルと代表値の話です。
読み値の誤差は三つに分かれる
「合わない」の中身は、性質の違う三つが混ざっています。分けて見ると、後の対処がはっきりします。
一つ目はオフセットで、伝達全体が一定量だけ平行にずれる誤差です。オペアンプの入力オフセット電圧や、ADC 自身のオフセットが効きます。信号が小さいほど相対誤差が大きく見えるので、低電圧が悪く見える主因はたいていこれですが、曲がりではありません。
二つ目はゲインで、傾きのズレです。増幅段の抵抗比の許容差、基準電圧の許容差、ADC 自身のゲイン誤差が乗ります。
三つ目が非線形、伝達の曲がりです。ここは出どころが二つあります。単電源のアンプは出力を電源やグランドの近くまで振れないので、低電圧で伝達が曲がります。前段のアンプを SPICE で組んで、入力を掃引してみました。

出力が 0V まで届かず、下端で約 50mV に張り付いて、0 へ向かう理想の直線から離れるのが見えます。もう一つの曲がりは ADC 自身の非直線性(INL)で、前段の振れ切りとは別の出どころです。こちらは低電圧に固まらず、変換範囲の全域に現れます。形は ADC の方式によりますが、ここでは代表的な弓なりを与えました。「低電圧が曲がる」の多くは前段アンプの振れ切りで、ADC の非直線性とは切り分けて考えます。
個体差があるから、一枚ずつ較正する
もし全基板が同じ誤差なら、ファームに定数を一つ焼けば済みます。一枚ずつ較正するのは、誤差が基板ごとに違うからです。オペアンプの Vos(入力オフセット電圧)は部品ごとに符号も大きさもばらつき、抵抗や基準電圧にも許容差があります。だからオフセットとゲインは基板ごとに測って、その基板の不揮発メモリに保存します。Vos と帰還抵抗を振って、複数の基板を作ってみました。

生の誤差は基板ごとにばらつきますが、オフセットとゲインを個体ごとに較正すると、残るのは弓なりです。この図では全基板に同じ INL を与えているのできれいに重なりますが、実際の INL は部品ごとにばらつきます。その個体差が小さいと確かめられれば、代表機で一度測って全機共通で焼く割り切りもできますが、共通化できるかはロットで確かめてからです。
較正のはしご
較正を、下から順に段で見ていきます。一段ごとに残差がどう減るかを、オフセット・ゲイン誤差・曲がりを併せ持つ一枚で追いました。

使用レンジの下端(アンプが振れ切る最下部は範囲から外してあります)の一点でオフセットを引くと、直線のズレは消えますが傾きが残ります。二点で一次式を当ててゲインまで合わせると、この例で残差は約 0.95mV、ちょうど 1mV の目標線すれすれまで来ます。ここで当てる二点をどこに取るかで、残差の配り方は変わります。全レンジを張ると端が、動作点の近くに寄せると動作点付近が、それぞれ有利になります。残っているのが曲がり(INL の弓なり)で、二次多項式まで当てると約 0.12mV に落ちて、目標に余裕ができます。
段を上げるときの注意が二つあります。多項式は高次にすれば当たりが良くなるとは限りません。較正点が足りなかったり範囲に偏りがあると、点と点のあいだや端で波打ちます。四次あたりからは、単調性(入力が増えれば補正後の値も必ず増えること)が崩れていないか確認が要ります。ここが崩れると、補正が読み値を取り違えます。多項式の代わりに、較正点を結ぶ折れ線(テーブル引きと線形補間)にすると、波打たず、マイコンでも軽く済みます。毎サンプルの多項式計算とテーブル引きの、処理コストの差もここで効いてきます。
もう一つ、大事なのは登りすぎないことです。上の例では一次でおよそ 1mV、目標が 1mV なら際どく、二次で余裕が出ました。でも ADC の曲がりがもっと小さければ、一次で足りて多項式は要りません。残差が目標を下回っているなら、そこで止めるのが得です。
温度で動く残りと、ハードで避ける手
室温で個体ごとに較正しても、オフセット・ゲイン・基準電圧は温度と経年でドリフトします。とくに効くのが基準電圧の温度係数で、これはゲイン方向に、フルスケールで最悪になります。0〜55℃で、温度係数の異なる基準を比べてみました。

5ppm/℃ の基準なら、室温一点で較正したまま 0〜55℃で 0.35mV ほどに収まります。50ppm/℃ の基準だと 3.5mV まで広がり、目標を超えます(いずれも 25℃で較正し、使用レンジと ±30℃ で見た入力換算の値で、フルスケールの取り方や較正温度で数字は動きます)。
基準の温度係数がここまで効くなら、そもそも消せないかを先に考えます。センサの励起と ADC の基準を同じ電圧源から取れれば、抵抗ブリッジや比例出力のセンサのように、基準のドリフトは分子と分母で相殺されて、いちばん効いていたこの誤差が丸ごと消えます。レシオメトリック計測と呼ばれる作法で、使えるならこれが一番効きます。
使えないときは、低温度係数の基準を選ぶか、基板に温度センサを載せて補正する段に進みます。ただし図の温度補正は、入力点ごとに温度で戻すもので、実質は入力と温度の二次元の補正です。単純な一次の補正より効きます。温度センサは自分の温度しか測れず、熱の勾配や過渡ではずれます。熱ヒステリシスは温度の一価関数では表せないので、現実にはこのあたりが温度補正の頭打ちになります。オフセットのドリフトそのものをハードで消すなら、ゼロドリフト(チョッパー/オートゼロ)のオペアンプという手もあります。これは内部でオフセットを絶えず測って打ち消し続ける方式で、オフセットのドリフトを桁違いに小さくできます。ただしゲインや基準電圧のドリフトには効かないので、そちらは低温度係数の基準か温度較正になります。
どの段で止めるか
制御盤の 0〜55℃で 1mV クラスを狙う、と決めたとします。1mV を刻むには、量子化の段がそれより十分細かくないといけません。この回路は前段ゲインが 2 なので、14bit・5V 基準だと入力換算(アンプのゲインで割って入力側の電圧に直した値)の 1LSB は約 0.15mV と余裕があります。12bit だと入力換算で約 0.6mV になり、1mV に対して刻みが粗く、余裕がありません。だから 14bit 級にしました。分解能とあわせて、ノイズ対策も要ります。較正で消せるのは系統的な誤差だけなので、ADC やアンプや基準のランダムなノイズの床を、平均やフィルタで目標より下に落としておかないと、いくら較正しても 1mV には入りません。無相関なノイズなら N 回平均で実効値が 1/√N になるので、狙いの分解能から必要な平均回数を見積もっておきます。
そのうえで、私なりの落としどころはこうです。まず、オフセットとゲインを基板ごとに室温で較正して不揮発メモリに保存します。基準電圧は 5〜10ppm/℃ 級を選びます。ここを妥協すると温度で崩れます。センサをレシオメトリックに組めるなら、そちらを先に検討します。オペアンプは精密品を、ゲインが高ければゼロドリフト品を、ゲイン抵抗は相対誤差のそろったものを選びます。曲がりは、一次較正後の残差が目標を超えるなら多項式か折れ線で取り、超えていなければ足しません。基板の温度センサによる温度補正は、この仕様なら要りません。それが要るのは、1mV より一段厳しいときか、温度係数の大きい基準をソフトで救ってコストを詰めたいときです。
部品の選び方でも段を省けます。PGA と基準を内蔵した高分解能の ADC を使えば、はしごの下のいくつかは部品側が吸収してくれます。判断の軸は、自分の精度仕様に対してどの段で止めるのが得か、です。段を上げるほど、部品も工場のテスト時間もファームの処理も増えます。過剰な較正はムダになります。
おわりに
ここで使った DC 特性値や温度係数、INL はどれも代表値で、傾向を見るためのものです。SPICE の前段も、値そのものでなく曲がりの出どころを見るためのモデルで、実機の実測ではありません。実際に設計するときは、使う型番のデータシートを引いてください。
較正のコードと SPICE のネットリストは GitHub に置きました(logicia32/adc-cal-lab)。ngspice があれば、この記事と同じ図が出ます。
この記事は Zenn に初出したものを加筆・補足したものです ── Zenn の元記事を見る