カタログ精度が出ない原因と実装での対策

「12 bitのADCを使っているのに、実測してみると10 bit相当の精度しか出ていない」。組み込み開発の現場で、こうした経験に覚えのあるエンジニアは少なくないはずです。

このようにカタログ精度が出ない原因は一つではなく、ノイズや基準電圧、サンプリング設計など複数の要因が絡み合っています。この記事では、どこから手を付ければいいのか、順を追って整理していきます。

ADCの基本と「スペック通りの精度が出ない」問題

マイコン内蔵ADCのカタログに「12 bit」と書かれていても、実測で12 bit相当の精度が出ることはまずありません。12 bitはアナログ入力を4096 段階に区切れるという量子化ステップ数であって、測定の正確さそのものとは別物と考えた方が良いでしょう。

実際の精度はオフセット誤差やゲイン誤差、基準電圧のふらつき、電源ノイズなど、いくつもの要因で削られていきます。

ただ、単純に「スペックが嘘」という話ではありません。実際、評価ボードで測ったら10bitを少し上回る程度しか出なかった、という場面は珍しくないでしょう。

量子化誤差とENOB|分解能≠精度を理解する

ADCの誤差を理解する上で、最初に押さえておきたいのが量子化誤差と実効分解能(ENOB)の関係です。

この2つを混同したまま設計を進めると、精度が合わない原因が見えにくくなります。

量子化誤差の基本

アナログ値を離散値に変換する以上、±0.5LSBの量子化誤差はどのようなADCでも避けられません。たとえば、12 bit・基準電圧3.3 Vの構成なら1LSBは約0.8 mVです。

ただしこの誤差はランダムな変動なので、オーバーサンプリングと平均化である程度は小さくできます。

ENOB・ノイズフリービット・実効分解能の違い

ENOBはSINADから換算するAC性能の指標で、信号品質を一つの数字で見たいときに使います。一方、組み込みのDC計測で実力を測るなら、見るべきは次の2つです。

  • ノイズフリービット:DC入力でフリッカしないビット数。確実に信頼できる桁数を示す
  • 実効分解能:DC入力のノイズRMSから算出した値。ノイズフリービットより約2.7 bit大きくなる

「12 bit ADCなのに10 bit相当しか出ない」という場面では、これらの3つを区別できていないと原因の切り分けが進みません。

INL・DNL|見落としがちな非直線性誤差

量子化誤差とは別に、ADCの変換特性そのものに歪みがあります。それがDNL(微分非直線性誤差)とINL(積分非直線性誤差)です。

DNLは、隣り合うコード間のステップ幅が理想の1 LSBからどれだけずれているかを示します。かりにDNLが-1 LSBを下回ると、そのコードのステップ幅がゼロ以下になり、出力に表れないコード(ミッシングコード)が生じます。テスト工程で「特定の値だけ飛ぶ」という現象が出たら、まずDNLを疑った方がよいかもしれません。

INLはDNLを積み上げた累積の誤差で、伝達特性が理想の直線からどれだけ曲がっているかを表します。こちらは入力レンジの端に近づくほど大きくなる傾向があり、フルスケール付近の計測で精度が落ちる原因になりやすい部分です。

マイコン内蔵ADCの場合、これらを含めた総合誤差は典型的に±2〜4 LSB程度です。12 bitのうち実質10 bit相当の精度で用途が成り立つなら内蔵ADCで十分ですが、そこを超える精度がいるならΣΔ型などの外付け高精度ADCを検討する段階になります。

ノイズ源の特定と対策

ADCの精度を削る最大の要因はノイズです。対策は「どこで生まれ、どう伝わり、どこで受けるか」の3段階で考えると整理しやすくなります。

逆にいえば、発生源だけ潰しても経路や受け側が甘ければ効果は出にくいです。

電源ノイズとVrefへの回り込み

デジタル領域とアナログ領域の電源・グラウンド分離と、ADC周辺のノイズ対策を示す回路図

電源ラインのスイッチングノイズがVrefに回り込むのは、ADC精度が落ちる典型的なパターンです。デジタル回路の電源変動がアナログ電源に乗ると、変換結果が直接揺さぶられます。

対策としては、アナログ電源をデジタル電源から分離した上で、Vref端子の直近にデカップリングコンデンサを最短配線で置くのが基本です。

基準電圧(Vref)の選定と設計

ADCの精度は基準電圧(Vref)の安定度で決まります。Vrefが揺れれば変換結果もそのまま揺れるため、ここは精度の土台です。

また、マイコン内蔵のVrefはデジタル電源と兼用されていることが多く、CPU動作の影響を受けやすい構造になっています。

内蔵では足りないと判断したら外付けリファレンスICに切り替えるのが定石ですが、どこまで追い込むかは「要求精度±1%以内なら外付けリファレンスICを検討する」という点が一つの目安でしょう。

グラウンド設計とアナログ・デジタル分離

AGNDとDGNDを一点で接地し、アナログ領域とデジタル領域を分離するのがグラウンド設計の基本です。ADC変換中にSPIやPWMなどデジタル系の通信が走ると、GNDを経由してスイッチングノイズが回り込みます。

変換タイミングとデジタル通信をずらすだけでも効果はありますが、根本的にはベタGNDでアナログ領域を囲い、接続点を一箇所に絞る設計が有効です。

ソフトウェア的ノイズ対策:オーバーサンプリングと平均化

N倍のオーバーサンプリングと平均化を組み合わせると、ガウスノイズの場合にノイズを1/√Nまで減らせます。4倍で実効+1 bit、16倍で+2 bit、256倍で+4 bitが目安です。

この対策はハードウェアを変えずにソフトだけで精度を上げられる手軽さがある一方、サンプリング回数に比例して変換時間も伸びます。高速に値を取りたい用途では、どこまで回数を稼げるかが判断のわかれどころです。

サンプリング設計の落とし穴

ADCへの入力信号をどう取り込むかも、変換精度を左右する大きな要因です。ノイズ対策だけでは不十分で、サンプリングの設計にも落とし穴が潜んでいます。

エイリアシングとアンチエイリアシングフィルタ

サンプリング周波数の半分を超える周波数成分が入力に含まれると、折り返しノイズ(エイリアシング)が発生します。これを防ぐため、ADCの前段にアンチエイリアシングフィルタとしてローパスフィルタを置くのが原則です。

見落としやすいのは、信号そのものが低周波でも安心できない点でしょう。温度や圧力センサの出力帯域がkHz以下であっても、電源ノイズやPWMの高調波がアナログ入力に乗っていれば、それがエイリアシングの原因になります。

サンプル&ホールドとソースインピーダンスの影響

ADC内部のサンプル&ホールド回路は、サンプリング時に内部コンデンサを充電して入力電圧を取り込みます。信号源の出力インピーダンスが高いと充電が時間内に終わらず、変換結果が本来より低く出るのが特徴です。

サーミスタや高抵抗の分圧回路を直結しているケースが典型で、手前にバッファを挟むかサンプリング時間を延ばす対応がいります。数kΩを超えたあたりから影響が見えてくるため、ここは接続される回路の出力インピーダンスの数字を意識しておきたいところです。

ADCキャリブレーション(オフセット・ゲイン補正)

オフセット誤差やゲイン誤差のような系統的なずれは、キャリブレーションで除去可能です。

まず入力をGNDに接続して変換し、読み値をオフセット補正量として記録します。次にフルスケール付近の既知電圧を入力し、理想値との比率からゲイン係数を求めます。後は変換結果にこの線形補正をかけるだけです。

補正機能を内蔵しているマイコンもありますが、持っていない品種でもソフトウェアで同じことはできます。

実装チェックリストとデバッグのコツ

実装段階で確認しておきたい点をまとめます。

  • Vref端子の直近にデカップリングコンデンサ(100 nF+10 µF)が配置されているか
  • AVDDとAGNDがデジタル電源から分離されているか
  • ADC変換中にSPIやPWMなどデジタル系の通信が走っていないか
  • サンプリング時間がソースインピーダンスに対して十分か

このあたりを最初に押さえるだけで、原因不明の精度劣化はかなり減ります。デバッグの場面では、まずオシロスコープでVref端子の波形を見るのが近道です。

目視で数mVのリップルが確認できるようなら、ソフト側を積み上げる前に電源経路の見直しから入った方が早い可能性があります。

組み込みソフトの世界 トップへ戻る