ラズパイとADコンバータでI2C通信【Raspberry Pi/MCP3425】



ラズパイとADコンバータでI2C通信


Raspberry Pi(以下ラズパイ)とADコンバータを使ってI2C接続を試してみた。

ラズパイはRaspberry Pi zero、ADコンバータは秋月電子で購入できるMCP3425を使用した。
ちなみに秋月のMCP3425モジュールは、基板にはパッケージ名のSOT23-6が書かれているので注意。







配線




MCP3425役割接続先Piフィジカル番号
1Vin+(センサーへ)--
2VssGND06
3SCLGPIO305
4SDAGPIO203
5Vdd+3.3V01
6Vin-(センサーへ)--

Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス

Amazon




I2Cのライブラリインストール


ラズパイでI2Cを使えるようにするには、i2c-tools というライブラリをインストールする。

$ sudo apt-get update
$ sudo apt-get install i2c-tools


インストールが終わったら、次にラズパイ側の設定を行う。

$ sudo raspi-config で設定画面を開き、 5.Interfacing OptionP5 I2CYes を選択して設定終了する。


I2Cデバイスが接続されている状態で $ sudo i2cdetect -r -y 1 を実行すると、次のようにI2Cデバイスのアドレスが表示される。

$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --      


ただしMCP3425では、Vin+とVin-にセンサーなどがつながれてないと通信エラーになってしまう。MCP3425でセンサーを付けずにI2Cデバイスとして認識させるには、MCP3425の1、6番PinをそれぞれラズパイのGNDに接続してから上記コマンドで確認するとデバイスが認識される。

次にPythonでもI2Cを使えるように次のように、 python-smbus というライブラリをインストールしておこう。このライブラリはPython2でないと動かないので注意。

$ sudo apt-get install python-smbus






MCP3425初期設定


データシートによれば MCP3425 は、ゲインなどの初期値をプログラミングから変更できる。
その設定はコンフィギュレーションレジスタに、8bitのデータを送り込むことで可能だ。

Configuration Register
次の表はコンフィギュレーションレジスタのフォーマットだ。

bit0/1 bit2/3 bit4 bit5/6 bit7
PGA サンプルレート 変換モード 未使用 RDY


Programmable Gain Amplifier (PGA)
レジスタのbit0とbit1によって、4種類の入力ゲインの倍率を設定できる。

bit0/1 GAIN
00 1倍
01 2倍
10 4倍
11 8倍


Sampling (signal processing)
レジスタのbit2とbit3によって、ビットレートとサンプリングレートを変更できる。

bit2/3 Number of Bits Data Rate
10 16bit 15 SPS
01 14bit 60 SPS
00 12bit 240 SPS





Pythonで動作確認 


MCP3425 の入力に電池をつけてPythonで電圧を読み取ってみたいと思う。
プログラムはこちらの記事を参考にさせてもらった。



MCP3425GNDを基準にプラスマイナス約2Vの範囲でアナログ電圧を読み取れるようになっている。なので次のように抵抗で分圧を作って動作確認してみた。


分圧抵抗に接続されているアースは、 ラズパイとMCP3425に共通のGNDに接続する。

5Vを抵抗で5等分したのでそれぞれの抵抗の電位差は1Vとなるはずだ。
実行結果は2Vを示しているので、計算通りの結果となった。

2.0031
2.0037
2.0037
2.0031
2.0037
2.0036
2.0037
2.0031
2.0036
2.0036
2.0031
2.0037



詳解 確率ロボティクス Pythonによる基礎アルゴリズムの実装

Sebastian Thrunらの名著『確率ロボティクス』の翻訳者であり、同分野の第一人者でもある、上田隆一氏が書き下ろす至極の入門書!理論→実装という一貫した流れで、丁寧に解説。まさにバイブル!

KindleAmazon




参考


How to Use MCP3425 ADC 16-Bit Mode with Raspberry Pi (Python)
MCP3425データシート
Raspberry Pi Zeroのピン番号
5ドル!ラズパイ・ゼロ(Raspberry pi Zero)でIoT (7) A-Dコンバータの利用4 MCP3425
PythonでI2Cを使う際のコマンドをまとめた


あなたにおすすめ