ADS1015をArduinoで使う - ③差動入力チャネル数の謎を解く

差動入力時の入力チャネル数の謎

以前の記事で、ADS1015はシングルエンドであれば4ch、差動入力であれば2chの入力が可能と書きました。
ty-note.hatenablog.com

実際、ADS1015のデータシートには

4つのシングルエンド入力または2つの差動入力(ADS1015)

との記載があります。

ところが、データシートにはまた

The ADS1015 contains an input multiplexer (MUX), as shown in Figure 10. Either four single-ended or two differential signals can be measured. Additionally, AIN0 and AIN1 may be measured differentially to AIN3.

とも書いてあり、後半の一文「加えて、AIN0 と AIN1 は、 AIN3 と差動で測定できます」の意味がよく分かりません。

Configuration registerで指定する入力マルチプレクサの設定を見ると、差動入力の入力ピン設定(片側がGNDではない)は

  • AIN_0AIN_1
  • AIN_0AIN_3
  • AIN_1AIN_3
  • AIN_2AIN_3

の4つとなっています。普通に考えれば、AIN_0AIN_1で1ch、AIN_2AIN_3で1chの計2chが無難に感じますが、ではこの真ん中二つは一体・・?


あえて図に上記4通りの組み合わせをすべて記入すると以下になります。(ここで[CT]とはカレントトランス、つまり電圧発生源としてください)

これでは、たとえばAIN_0AIN_3の電位差を測定しようとしたとき、0~1と1~3間に接続されている別のCTと並列接続になるため正しい値は得られません。


ですが、一か所あきらめて以下とすると、少なくとも電位差を測定するときに他のCTが悪影響を及ぼすようには見えません。

それぞれ電気的に独立した回路として測定を行う場合は2chなものの、AIN_3をCommonとして使ってよいのなら3chの差動測定が可能なのではないでしょうか?

実験してみる

上記回路の通り、AIN_3をCommonとして3つのCTを接続します。
Configuration registerのMUXフィールドを

  • 001
  • 010
  • 011

で変化させ、それぞれのチャネルの電力を計測します。
具体的なデータ収集方法と計算方法は、以下の記事のままです。


結果とまとめ

結論から書きますと、正しく測定できました。計測の都合上3つのCTは同一の回路にクランプしているため、それぞれ個別につけ外しすることで値の変化を確認しましたが、お互いに測定値に影響を及ぼすことなく個々の測定が行えている様子です。

ADS1015はアドレスピンの接続先を変えることでI2Cアドレスを4種類に変更することができるので、この結果より1デバイスあたり3ch×4=12chの差動測定が一つのI2Cバスでできることになります。「いやそんなにいらないでしょ」と思う方もいらっしゃるかと思いますが、CTを分電盤の系統それぞれに付けて部屋や機器ごとの電力をモニタするHEMS製作を考えているため、チャネル数は稼げたほうが良いのです。

データシートの日本語抄訳はありがたいですが、きちんと使いこなしたかったら真面目に原文を読む必要がありますね。