ちょっと Tea Time!? 安いADCボードはどうかな?(ADC1115) 2024.11.16
夜な夜な寝床でALIを眺めていたら、安いADCボードが目にとまりました。
ADS1115というICをつかったADCです。
主な仕様は 4ch入力で16Bit分解能。ΔΣでサンプリング周期は最大で900Hz程度。
最初にこの仕様だけをみても、琴線に触れませんでした。というのも、PICですら現在はAD入力は
ほぼ全端子で可能だし、サンプリング周期も実力で100kHz以上がでます。PICではADCの
分解能は12Bitですが、それだけあれば十分です。16Bitあってもノイズに埋もれるだけだろうな〜。
しかし、ただ1つ琴線に触れました。
1個200円で送料無料!
これは、ポチらずには居られません。
寝落ちするまえに購入ボタンをポチ!です。
とりあえず買ってみましょう!
ブツ到着!
注文してから4日後にとど行きました。こりゃDIGIKEYも真っ青です。
ちなみにDIGIKEYだとほぼ3日後に到着します。月曜日中に注文すれば、
木曜日には到着する感じです。
ALIにしては比較的早く到着しました。
中身はこんな感じです。
ADS1115って、案外使えるかも?
あたらめてADS115のデータシートを眺めてみました。
ads1115.pdf
どうやら、正負電圧が入力できそうです。
こんな特長があるようです。
PICの場合だと、正電圧入力しかできませんので、負電圧を測定しようとすれば
外部に付属回路が必要です。単電源で動作するADCで負電圧が測定できるのは
便利で、そういえば以前にADS8685なるADCをつかったことがありました。
ADS8685は16Bit分解能で正負電圧入力、かつ高速ですが、流石に1個1000円を
超えるので、手軽には使えないです。
どうやって動かすかな?
インターフェイスはI2Cで動かすようです。
そして、そのアドレスですが、ADRSピンの接続で変更できます。
ADRSをGNDに接続すれば、I2Cアドレスは0x90になります。
クロック速度は3.4MHzまでいけそうですので、かなり高速で通信できます。
といっても、サンプル速度が遅いのであまりメリットはないのですが、
周辺のI2Cデバイス速度が早くても、ついていけるのはいいことですね。
I2Cデータは16Bit
いつも使うI2Cデバイスは8ビットデータですが、ADS1115では16Bitで扱うようです。
すなわち、I2Cの並びは下記のようになります。
書き込み時
I2Cアドレス(7Bit+"0")+レジスタ(8ビット)+データWRITE(16Bit:8bitx2)
読み出し時
I2Cアドレス(7Bit+"0")+レジスタ(8ビット)+I2Cアドレス(7Bit+"1")+データREAD(16Bit:8bitx2)
レジスタは
00:データ(AD変換値)
01:AD設定
10:L閾値
11:H閾値
となりますが、コンパレータ機能はあまりつかうことはないでしょうから、10および11は無視です。
重要なのは「01:AD設定」ですが、ほとんどデフォルトでいけそうなので、とりあえずそれで動かせば
いいでしょう。デフォルトではAN0、AN1の差動入力、±2.048Vレンジ、サンプル周期128Hzです。
唯一デフォルトのままでは問題と思われるのはMODE(Bit8)です。
デフォルトだとパワーダウンモードになるので、”0”に変更して、連続変換モードにしておく必要がありそうです。
あるじゃん!
データシートをめくっていくと、Quickstart Guideがありました。
まずは使ってみるための、手引きがあるじゃん!
これがあると、初めて使う分には便利ですね!
で、これを読み解くと、レジスタ1のAD設定(Config Reg)は
1000 0100 1000 0011
です。デフォルトでない部分は赤字になっています。デフォルトでないのでは、MODEだけで、
ここを連続変換である”0”に変更しておくようです。この場合の入力はAIN0が+、AIN1が−
の差動入力になっていますので、シングルエンドにするために、.AD設定は
1100 0100 1000 0011
にしておきます。
動かしてみましょう!
使い方がわかったところで、早速動かしてみましょう。
I2Cのコントローラには現在デバッグ中の基板をつかって、その基板の動作確認も兼ねます。
ADC基板のADRSはGNDに接続しているので、アドレスは0x90です。
入力には±6.3mVで1Hzの信号を加えています。かなり小さいです。
というのも16Bit分解能の実力を見るためです。
QVGAの表示は1Bitが1pixeになるような分解能で表示させました。
QVGAの表示上(±100)では±6.25mVのレンジになります。
ADRSはGNDに接続しているので、ADRS=0x90になります。
I2Cコントローラと接続して動作させています。
そして、ソフトを組んで動作させてみます。
生信号をオシロでみると、かなりノイズが入っていますが、このADCのサンプリング周波数が低いこともあり、
かなり平滑化が効いているようです。
12BitADCなら、±2.048Vの入力レンジでは分解能は1mVにしかなりませんが、
フルスケール±6.25mVの信号振幅で正弦波らしい信号が観察されていますから、
16Bitは伊達ではないようです。
±6.3mVで1Hzの信号を入れて計測しています。
結論
安価なAD1115をつかったADCボードを試してみました。サンプル速度はそれほど高くありませんが、
4ch入力でもあり、正負入力ができるので案外つかいやすいかもしれません。
備考(個人的な備忘録)
I2Cでのデータやり取りはデータが16Bitになるので、.従来のサブルーチンはやや修正必要。
データ読み取り時はNACKになり、マスタ側からSDA=Lを送信する必要もあります。
(おしまい)