ADS1015をArduinoで使う - ②負の電圧を計測する

ADS1015で負の電圧を計測する方法

前回の記事
ty-note.hatenablog.com
で説明した通り、今回ADS1015を使う目的はCTの出力を計測するためです。
CTは”トランス”の名の通り交流電流を計測し交流の出力となるため、A/Dコンバータで読み取るには負電圧の入力を処理する必要があります。

巷にある制作例だと、電源電圧(主に5V)を抵抗で分圧して2.5Vを作りだし、CTの電圧をオフセットさせる例が多いようです。これは方法としては単純でいいのですが、以下の問題があります。

  • 分圧する電圧の精度が計測値に直接影響する(基準電圧ICを使ったり、ソフトでキャリブレーションするなど手はあると思いますが)
  • オフセットしてしまっているので、せっかく内蔵されているPGAのゲインを上げられない。変位量が微小なのでこれは辛い
  • 12bit ADCなのに、実質11bitしか使えない*1

日本語版データシートの概要欄に以下記載があるため、まるでそのまま交流信号を入れていいように記載している解説を何例か見たのですが、シングルエンドモードでは無理です。

PGAは入力電圧範囲が± 256mV~±6.144Vで、振幅の小さな信号から大きな信号まで高精度に測定できます。

ダメなことは、データシートの 9.1.2 Single-ended Inputs にもはっきり記載があります。

The single-ended signal ranges from 0V up to positive supply or +FS, whichever slower. Negative voltages cannot be applied to these devices because the ADS101x can only accept positive voltages with respect to ground.
シングルエンド入力の信号レンジは0Vから電源電圧または+FSのどちらか低いほうまでです。ADS101xはGNDに対して正の電圧しか許容しないため、負の電圧を入力することはできません。

詳しくはデータシートのFigure.10を見るとわかります。各入力のすぐ後ろにダイオードでVDDとGNDにクランプされているので、負電圧を入れてもほぼGND電位になってしまいます。

最大絶対定格もAnalog input voltage (MIN.) が GND-0.3V と表記されています。

ではなぜ最大で±6.144Vの入力範囲だとデータシートに記載されているのか?それは差動入力モードを使うからです。

シングルエンドモードと差動入力モード

シングルエンドは通常のマイコン内蔵ADCでお使いの方も多いと思いますが、GNDという基準に対する電位差を計測するものです。入力する線が1本で済みますが(もう片側はGNDで共通のため)、外部からのノイズに弱く、今回のケースでは負の電圧も測れません。(シングルエンド入力で負電圧測れるADCってあるのでしょうか?)
シングルエンド入力に設定されると、ADC前段にあるマルチプレクサの回路が閉じ、 AIN_{N} はGNDに接続されます。

差動入力モードはその名の通り2つの入力間の差を読み取る方法です。外部からノイズが入っても、(信号P+ノイズ)ー(信号N+ノイズ)で計算されノイズが打ち消されることから、ノイズに強い計測方法だと言われます*2。このデバイスの場合、差動入力時のAD変換値 V_{IN}は、 AIN_{P} - AIN_{N}で計算されます。
難点としては2つの入力を使って差分を取るため、実質的に入力チャネルが半減してしまうことですね。

余談

なぜ差動入力だと負の電圧が計測できるのか、私もうまく電気的に説明が出来ない(理解していない)のですが、マイナスの電位というのはあくまでGND基準であるというところがキモなのだと思います。差動入力に接続されている電圧源はGNDに対して浮いているので、GNDに対する電位差は不定(何らかの内部回路や特性によってバランスが取れるところ)というのが真実なのではないでしょうか?

試しに以下回路の波形をオシロスコープで観測してみた結果は以下です。

Ch.1、Ch.2ともに、CTからの入力信号(60Hz)に同期した動きはしているものの、電圧もデタラメで波形も不思議な形をしています。
しかし、Ch.1と2の差分を取ると、CT単体の入力をオシロで観測したときの波形そのままが現れました。安物のスイッチング電源を接続しているため力率の悪い波形をしていますが・・・。

差動入力信号について解説している様々な資料を当たってみましたが、まだここについてしっくりくる解説に出会えていません。

*1:12bit ADCですが、最上位1bitは符号です。シングルエンドモードで使うと0V~VCCまでの計測になるため、分解能が落ちます

*2:差動信号で有名?なCAN信号も、CAN-HとCAN-Lの波形をそれぞれ独立で見るとノイズまみれですが、差動電圧波形はきれいです