4bitの逐次比較型ADC (SAR ADC) を作りました。専用のADCを用いずに標準ロジックICで製作することで、SAR ADCのロジックを理解することが目的です。
完成写真
SAR ADCについて
SAR ADCは、以下のブロック図の構成をしています。
ブロック図
入力信号とDACの出力を比較し、バイナリサーチによって上位ビットから順に変換結果を確定していく動作を行います。
変換の初めには、DACにVref
の半分の電圧を発生させておきます。それ以降の電圧は、次の式で表されます。
DAC電圧式
この式をもとに設計したADCのタイミングチャートと、Simulinkのブロック図です。
タイミングチャート
Simulinkブロック図
今回はコンパレータの出力に応じて足し引きする数値を変えることで逐次比較のロジックを実現しました。
回路
Simulink上で設計したブロック図を基に、回路を起こしました。
回路図
JKフリップフロップの74HC73 で同期カウンタを構成し、その出力をもとに各ブロックのタイミングを生成しています。非同期カウンタにするとカウンタ出力のビットごとの遅れにより、意図しないタイミングでハザードが発生する原因になります。
Simulinkのブロック図上でROMと記載されていたブロックは、74HC238とその周辺のANDとORによって実現しています。今回の回路ではロジックIC 数削減のため、ダイオードによるワイヤードORを使用しています。
74HC86と、74HC283で4bit全加算 / 減算器を構成しています。全加算器の片方の入力をEXORでビット反転し、1を加えてから加算を行うことで減算を実現します。
逐次比較レジスタ (SAR Reg) であるU11の74HC173は、変換動作の初めに0b1000 にリセットする必要がありますが、レジスタの中身をリセットするのではなく出力を置き換える形にしています。こうすることで必要な論理回路の規模を小さくすることができます。
DACにはR-2Rのラダーを用いたものを組みました。量子化誤差を ±0.5LSBの範囲に収めるには、DACの出力範囲を +0.5LSB
分オフセットする必要がありますが、今回はDACではなく入力電圧のオフセットを調整する形にしました。このオフセットはU16A
のオペアンプとその周辺回路で調節します。単電源で動作できるようにしたかったのですが、前述のオフセットを調節するために加算回路を用いようとするとどうしても負電源が必要になってしまうので、チャージポンプ電源を組み込みました。
……この記事をここまで書いた時に、オフセット調整回路を無駄に大規模にしてしまったことに気づきました。トランジスタ1石か
2石でも要件を満たすオフセット調整回路を組めますね。負電源もいりませんでしたorz
サンプルホールド回路には、アナログスイッチを並列に用いることでON抵抗を低くすることを狙いました。また、U14A、U14Bそれぞれの両端にかかる電圧差をなくすことでスイッチOFF 時のコンデンサからの漏れ電流を抑え、ホールド時の電圧誤差を減らす工夫をしています。
性能測定
入出力特性、DNL、INLは以下のようになりました。
入出力特性グラフ
DNLグラフ
INLグラフ
これらの誤差の原因のうち最も影響力があるのはDACの精度です。今回はDACのR-2Rラダーに1% 精度の金属皮膜抵抗を用いたのですが、さらに精度を上げるにはここの抵抗の相対精度を上げる必要がありそうです。
サンプリングレートは50kHz程度まで上げることができました。これ以上上げるにはDACの応答を速くする必要がありますが、安定性とのトレードオフになります。市販の8bit DAC IC を使えば、精度と速度を楽に改善できそうです。
バイナリサーチ
最後に、サイン波を入力したときにサンプリングされた電圧とDACの出力波形を示します。SAR ADCの肝であるバイナリサーチの様子がよくわかります。
バイナリサーチの様子