マイコン時代の電子回路入門 その4 アナログ入力

概要

前回はデジタル出力を行いました。今回はアナログ入力ですが、前回までのことの延長になります。

アナログ入力とは?

概念図としては上記のように3.3Vの波形を入力するような回路です。

波形はもちろんきれいな3.3Vまでのサイン波です。とはいえここまで簡略化して考えることはできません。

ESP32のADCの場合

ちなみにアナログ入力のことをADCと呼びます。Analog to Digital Converterの略で、AD変換などとも言います。逆にアナログ出力のことをDA変換やDACと呼んだりします。

ADCの性能としては分解能とサンプリングレート、そして正確性があります。分解能は電圧を何段階で取得できるかでESP32は12ビットなので4096段階で取得可能です。高性能なものは16ビット以上の分解能があります。

サンプリングレートは秒間何回電圧を測定できるかになります。ESP32は最大83,333回と内臓にしては多いですね。とはいえ、100Kはないのでオシロスコープ的な利用方法には物足りないです。入門用のオシロスコープなどでは解像度が8ビットで荒いのですが、サンプリングレートを高くしたADCを使っているなどの使い分けをしています。

  • MCP3425(16Bit ADC I2C 基準電圧内蔵)搭載モジュール(秋月電子)

逆に上記の製品は解像度が16ビットと高いですが、秒間16回しか測定することができません。精度をあげると測定頻度が下がるトレードオフになりやすいです。

精度はパッと見ではわからないのですが、ESP32内蔵のADCだと電圧があがってくると誤差が大きくなるような特性があります。

さて、ESP32は1.1Vの基準電圧を利用したADCを内蔵しています。基本的には0Vから1.1Vまでの電圧しか測定することができません。そのため、減衰器というものが内蔵されていて、電圧を下げてから測定をしています。(実際には精度が悪く0.1Vから0.68Vぐらいの間だけ正式サポートしています)

分圧回路

本当はもう少しちゃんとした減衰器を使っていますが、概念を把握するために一番単純な分圧回路を紹介します。ちゃんとした回路としては今後に取り上げたいと思いますので、今回は雰囲気だけつかんで貰えればと思います。今回は計算しやすいように5Vのサイン波を電源に利用しています。

結果です。回路の一番右から見ていくとグランドがあるのでそこは0Vです。その左のOUT_1/5はオレンジ色のグラフでピークが1Vの電圧になっています。その左が2Vとどんどん電圧が上がってきます。一番左のOUT_5/5は電源に直接接続されているのでピークが5Vの波形ですね。

これからわかることは、同じ値の抵抗を複数つなげた場合に途中で電圧測定をするとその比に比例した電圧を取り出すことができます。1Vまでの波形にするのにはOUT_1/5のところから取り出せばいいですね。

今度は3.3Vで考えてみます。抵抗は4つにしました。これで25%単位で電圧を取り出せるはずです。

分析結果です。4等分した電圧が取り出せましたね。一番下の電圧は3.3/4なので0.825Vピークになります。これで1Vを下回ったことになります。

さて、先程の回路ですが上記のように整理することができます。全体として40kΩの抵抗で、GNDから10kΩのところで取り出すので1/4の電圧が取り出せます。これが分圧回路の基本的な考え方です。とはいえESP32にはもう少しちゃんとした回路が入って3.3V入力を0.9Vぐらいに減衰して測定をしています。

分圧抵抗の抵抗値について

実際の回路の場合には上記のように信号発生源側に電流制限が発生します。この場合には約40mAまでの出力となります。

この場合はあまり抵抗が入った影響がないように思えます。

さて、分圧抵抗の比はそのままで値だけ減らしてみました。

先程0.8Vぐらいあったアナログ入力の電圧が0.3Vぐらいまで下がってしまいました。これはどういうことかというと、分圧抵抗の一番右側にグランドがあります。つまり分圧回路はプルダウン回路でもあるのです。プルダウンされている分の電圧は下がってしまうので、入力側の抵抗値は大きい方が好ましいことがわかります。

測定とは?

たとえばオシロスコープで測定する場合には上記のような感じになります。実際にはキャパシタとかコイル成分がありますがここでは抵抗のみで説明したいと思います。

多くのオシロスコープは1MΩぐらいのプルダウン抵抗に流れる電流値を測定して電圧を計測しています。この場合実際の波形よりもプルダウンされているので若干電圧は下がります。ただし出力側の82.5Ωと比べると1MΩは非常に大きいのであまり波形には影響がありません。

とある廉価版のロジックアナライザを見たところ220kΩでした。抵抗値は価格に比例するので、安いロジックアナライザはもう少し小さい値になりますし、高級品は高い抵抗値です。あとシールドされていないケーブルなどにキャパシタやコイル成分などがかなり乗ってきますので接続すると通信が失敗したり、キャパシタ不足で動かないはずの回路がケーブルのキャパシタ成分で動くようになったりします。。。

信号を拡大してみたところ、若干電圧低下していますがほぼ問題にならない範囲だと思います。

さて、このとき出力側が小さいセンサーで、抵抗値が大きい場合にはどうなるでしょう。出力側抵抗を50kΩに増やしてみました。

信号がかなり小さくなってしまいました。このように出力側の性能と、入力側の性能により測定できるデータが変わってしまいます。本当は抵抗の他にキャパシタやコイル成分も含めてインピーダンスと表現をします。出力側を出力インピーダンス、入力側を入力インピーダンスといいます。出力側はより電流を流せるほうが強い出力になるので出力インピーダンスは低いほうがいいです。入力側は少ない電流で測定できるよう入力インピーダンスは大きいほうがいいです。

どんなときに問題になるの?

私が使ったことがあるなかで問題が発生したのが上記のセンサーでした。これは普通に接続する分には問題がないのですが、IoT系でどのピンでも電源やGNDになることができるタイプのボードでは正しく読み取ることができませんでした。

そのボードは中で配線を動的に変更するマルチプレクサという回路を使っていたのですが、そこでの抵抗が大きかったようです。

上記のように入力側にR2があるように見えても、プルダウンされているR3から見るとR1とR2の合計である150kΩが出力インピーダンスに見えます。つまり途中経路の配線などの抵抗はすべて出力インピーダンスになります。

その結果入力された値はどんどん低くなってしまいます。

インピーダンスの改善方法

一気に難しくなりましたがオペアンプを使ったボルテージフォロワ回路です。この回路を理解する必要はありません。気になった人は回路名で検索してみてください。

この回路では1ピンの入力したのと同じ電圧を5ピンから出力します。その時電流は3.3Vの電源から供給されます。そのため500MΩと極端に大きい出力インピーダンスで微弱な電流しな流せないはずのものを、きれいな3.3V電源から大電流を流すことが可能な回路です。

どういうことかというと、オペアンプの入力インピーダンスは無限に近いです。そのため微弱な出力でも入力することができます。そして外部電源に接続されているので、出力インピーダンスが低くて比較的大量の電流を流すことが可能です。いいこと尽くめに思えるのですが、欠点もあります。

使うオペアンプ次第ではあるのですが、上記のように赤いグラフの形がおかしいです。

赤だけにしてみました。どうやら上は3.3Vまで上がりきらずに、下も0.1Vぐらいで平らになっています。もう少しきれいな波形になるオペアンプもあると思いますが完全にきれいな波形を再現できるとは限りません。

あとは拡大してみるとオペアンプを通したことによって遅延が発生します。とはいえ上下を使わない中間部分だけ使う分には便利そうな回路ですね。

ただし、個人の電子工作ではあまり使われていません!

KKHMF 2個 ADS1115 16Bit ADC 4チャンネル I2C IIC 互換 A/Dコンバータ 可変ゲインアンプ付き PGA ADCモジュール Arduino用 Raspberry Pi用
KKHMF
¥1,499(2025/02/18 17:05時点)
ゲイン設定可能なアンプが付いた16ビットのADコンバータです。高精度、低消費電力、I2C接続です。

多くの場合マイコンに内蔵している安いADCで問題が発生した場合にボルテージフォロワ回路などでインピーダンスを改善するのではなく、I2C接続などの性能がよいADCを利用します。圧倒的に電圧測定の精度が違うので、マイコン内蔵のADCを無理やり使うよりは外付けを選択することが多いように思えます。

まとめ

かなり横道にそれましたが、インピーダンスという概念を説明してみました。本来は交流でキャパシタとコイル成分も含めて考える必要があります。ただ、入力インピーダンスと出力インピーダンスの考え方は抵抗のみで理解したほうがわかりやすいと思います。

この記事では正確性よりも理解のしやすさを優先しています。概念を理解してから、興味がある人は教科書的な書籍で勉強ができるところぐらいをゴールに設定しています。

続編

コメント