質問: 電子工作 a/d変換について 課題でa/d変換回路について実験中で、一応arduinoを使って適当なアナログ値からデジタル値を得ることは出来ました。(量子化誤差の関係で値が少しずれていますが、、)ただ、以下の写真の回路がどのように動いてデジタル値を得るかが分かりません。 そこで分かる方に教えてほしいです。 使ってる部品は、r-2r集合抵抗器。オペアンプはnjm2904, トランジスタは2sc1815です。
回答: こんにちは。一生懸命お勉強のようですね。 他の方から「逐次近似/比較」の用語のアドバイスがあり、それをヒントに検索したならすでに解決しているかもしれませんので、 おせっかいかもしれませんが、追加の説明をしてみましょう。 ポイントは、「ad変換のために何とda変換する。そしてアナログ入力と比較してみる」 アナログをデジタルに変換するad変換の方法はいろいろありますが、一般的に、アナログをデジタルに変換するのはけっこうむずかしく、 大きな誤差が出たり雑音に弱くなったりします。 そこで、比較的容易な、デジタルをアナログに変換するda変換を行ってアナログ信号を作り、目的の入力信号と比較することで 入力信号を推定するのが「近似法」(人によってda比較法、逆近似法・・などとも呼ぶ)です。 提示された回路は、この近似法用の回路ですね。 図面の文字がよく読めないのですが、抵抗列は「ラダー型da変換器」と呼ばれており、この構造の理解自体がオームの法則のちょっとしたゲーム になっている、巧妙な仕組みです。 例えばardinoの4ビットの出力portは、それぞれ5vを出力するとしたら、 一番上のビットが1なら、オペアンプの入力端子には1/2×5vすなわち2.5vが入力されますが、一番下のビットが1なら、1/16×5vすなわち0.3vしか 出力されません。また、それぞれのビット出力は加算になっていて16段階の疑似アナログ信号が作れるようになっており、すべてのビットが1ならば、15/16×5vすなわち4.7vが出力されます。 右側のオペアンプは比較器になっており、アナログ入力とda変換器で作成した疑似アナログ信号と比較して、疑似アナログ信号のほうが少しでも大きければ出力電圧が出る(小さければ0のまま)ので 1815トランジスタで安定化させて「大きい・小さい」を0/1としてardinoに伝えるようになっています。 もう基本はわかりましたね。 ご提示のプログラムを私ががちゃんと理解できていないのですがad変換をしたいとき、最も単純には、da変換装置で「0,1,2,3・・・」という数値に相当する電圧を順番に出力してみて、たとえば「9」になった瞬間に比較出力が「0」 すなわち、「9では目的のアナログ値より大きいよ」とわかるので、目的のアナログ値はきっと8(から9の間)だろうとわかり、ad変換ができたことになります。 これが「近似法」です。 さてさて、いかがでしょうか。 次に、さらにちょっと工夫した「逐次近似法」の補足を。 先ほどの比較では、数字を順番に出力していくので、例えば目的のアナログ値が12.5ならば、13回のステップが必要ですね。 これを合理化するため、次のような方法をとります。 まず、中央に当たる8を出力して比較します。目的の値がこれより大きくて比較信号の0が戻ってこないなら、 さらに4を足した12を出力して比較します。それでも0が戻って来ないならこんどは2を足して14を出力。すると比較信号が戻ってきて大きすぎることがわかるので、1を引いた13を出力。 それでも大きすぎるとの比較信号が戻ってきた。すなわち12より大きく13より小さいことが4回のステップでわかります。 この方法は毎回4回のステップが必要なため、例えばアナログ値が2.5でも4回必要な点では順番に出力した場合より時間がかかりますが平均では圧倒的に有利。 大きな数値でまず比較し、徐々に小さな差で修正しながら比較をするので「逐次近似」と呼ばれている単純ながらおもしろい工夫ですのでご参考ください。 さて、質問の趣旨に合っていたでしょうか。 お役に立てば幸いです。頑張ってくださいね。