1. TomoSoft

    Posted

    TomoSoft
Changes in title
+SPIを用いたラズベリーパイ用高精度A/D変換モジュール「ADPi Pro」のセットアップ
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,110 @@
+
+Raspberry Pi 3を使って、アナログ信号をデジタル変換して入力してみます。Raspberry Pi 3ではアナログ信号を処理するためにA/D変換モジュールが別途必要で、このために、研究開発・ビジネス用途向けに開発されたメカトラックス社の[ラズベリーパイ用高精度A/D変換モジュール「ADPi Pro」](https://mechatrax.com/products/adpi/)を今回使用します。
+ADPi Proは、SPI デバイスとIIO サブシステムの二つのインタフェースを使って、アナログ電圧を入力してA/D変換できます。今回はADPi ProをSPIデバイスとして動作させ、5Vを5つの抵抗で分圧してADPi Proのターミナルブロックに接続し、メカトラックス社から提供されているPython言語で作成したサンプルスクリプトを実行して、ADPi Proに接続したアナログ電圧のA/D変換値を確認します。なお、ADPi Pro の資料は、[ADPi Pro(ラズベリーパイ用高精度 A/D 変換モジュール)](https://github.com/mechatrax/adpipro?_ga=2.190419565.739881186.1531101539-1744061270.1449811405)で公開されています。
+
+#_ADPi Proについて_
+ADPi Proは、24bit分解能のAnalog Devices社「AD7794」をA/D変換器を使用し、温度特性に配慮した外部基準電圧発生ICの搭載し、出荷時校正データを格納した「EEPROM」により、A/D変換したデータを補正します。
+
+- 入力電圧:0 ~ 5Vの差動入力。リファレンス電圧は基準電圧発生回路を通じて5Vを生成します。
+- 分解能 :24ビットの∑∆(シグマ・デルタ)A/Dコンバータ
+- 更新レート:4 ~ 470Hz
+- 出力電圧:12V、各チャンネルの最大電流50mA。ラズベリーパイ電源用5Vから12Vに昇圧し、センサ用電源としてチャンネル1-4の各ターミナルブロックに割り当てます。
+
+>出力電圧「12V」は、ターミナルブロック「Vout」と「GND」間に出力されます。GPIO エキスパンダにより、チャンネル1からチャンネル4までの出力電圧のON/OFFを制御します。
+
+なお搭載されているAnalog Devices社の「AD7794」の詳細については、[AD7794のデータシート](http://www.analog.com/media/jp/technical-documentation/data-sheets/AD7794_JP.pdf)を参照してください。また、ADPi Proのハードウェアに関しては、[ADPi Proのハードウェア](https://github.com/mechatrax/adpipro/wiki/%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2)を参照してください。
+
+実際にADPi Proに分圧した1Vのアナログ電圧を入力して、Raspberry Pi 3でA/D変換値を取得する動作環境の様子を次に示します。
+<div align="center" "><img src="https://qiita-image-store.s3.amazonaws.com/0/124811/4ae96d49-44db-d78b-284b-93d018ffd7fc.jpeg"></div>
+
+
+##_ADPi Proの動作環境の構築_
+ADPi Proの40ピンコネクタCN3と、Raspberry Pi 3の40ピンコネクタJ8を重ね合わせるように接合します。これにより、Raspberry Pi 3から5Vを給電し、 SPI と I<Sup>2</Sup>Cの各インタフェースを使用します。ADPi Pro基板上のジャンパおよびディップスイッチJ1、J2、J3、DIPSW1は初期状態のままです。また、ADPi Proのターミナルブロック4個の差動電圧入力「Vin+」「Vin-」のそれぞれに、5Vを5個の抵抗で分圧した「1V」を次の図のように接続します。なお、抵抗は金属皮膜抵抗器、162Ω、誤差±0.1%を使用しました。
+
+<div align="center" "><img src="https://qiita-image-store.s3.amazonaws.com/0/124811/90f309ed-1b45-fe3f-4359-2f742d7b4883.jpeg"></div>
+
+
+#_ADPi Proのセットアップ_
+今回使用するraspbian「2018-04-18-raspbian-stretch」は、[ラズベリパイ公式サイト](https://www.raspberrypi.org/downloads/)からダウンロードしました。ADPi ProをPython言語でアクセスできるSPIデバイスとするために、このraspbianに、次の手順に従いADPi Proをセットアップします。なお、SPIデバイスとしてアクセスするADPi Proのセットアップは、[ADPi Proのセットアップ](https://github.com/mechatrax/adpipro/wiki/%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97)を参照してください。
+
+1. 次のコマンドでraspbianにリポジトリを追加します。
+
+```
+$ sudo bash -c 'echo "deb http://mechatrax.github.io/raspbian/ stretch main contrib non-free" > /etc/apt/sources.list.d/mechatrax.list'
+$ wget http://mechatrax.github.io/raspbian/pool/main/m/mechatrax-archive-keyring/mechatrax-archive-keyring_2016.12.19.1_all.deb
+$ sudo dpkg -i mechatrax-archive-keyring_2016.12.19.1_all.deb
+```
+
+2. 次のコマンドでADPi Pro用のSPIデバイスのパッケージをインストールします。
+
+```
+$ sudo apt update
+$ sudo apt install python3-adpi adpi-utils-backend-spidev adpi-utils
+```
+
+3. パッケージのインストール後はデバイスの初期化を行うため、次のコマンドでRaspberry Pi 3を再起動します。
+
+```
+$ sudo shutdown -r now
+```
+
+#_ADPi Proのセットアップ確認_
+次の手順に従って、ADPi Proのセットアップが正常に完了したことを確認します。
+
+1. SPIデバイスとして使用するために、spidevが有効になっているか次のコマンドで確認します。
+
+```
+$ ls -la /dev/spidev*
+crw-rw---- 1 root spi 153, 0 7月 29 12:12 /dev/spidev0.0
+crw-rw---- 1 root spi 153, 1 7月 29 12:12 /dev/spidev0.1
+```
+
+2. ADPi ProのEEPROMとGPIOエキスパンダの I<Sup>2</Sup>Cアドレスを、次のコマンドで確認します。EEPROMのI<Sup>2</Sup>Cアドレスが「57」、GPIOエキスパンダのI<Sup>2</Sup>Cアドレスが「27」になっていることを確認します(初期設定の場合)。なお、各I<Sup>2</Sup>Cアドレスは、ADPi Proの基板上のDIPSW1により変更可能です。
+
+```
+$ i2cdetect -y 1
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f
+00: -- -- -- -- -- -- -- -- -- -- -- -- --
+10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
+30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
+60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+70: -- -- -- -- -- -- -- --
+
+```
+
+3. 使用するインタフェースが有効であることを確認します。Raspberry Pi 3のデスクトップ画面から、メインメニューの「設定」→「Raspberry Pi の設定」の「インターフェイス」タブで、「I2C:有効」「SPI:有効」になっていることを確認します。表示されたデスクトップ上のインタフェース画面を次に示します。
+
+<div align="center" "><img src="https://qiita-image-store.s3.amazonaws.com/0/124811/2eae578a-2f57-ab62-6966-7834ab7bfcd7.jpeg"></div>
+
+4. SPI を利用してADPi の操作を行うスクリプトファイル「adpi-utils-backend-spidev.py」が、正しくセットアップされているかを次のコマンドで確認します。
+
+```
+$ ls -la /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py
+-rwxr-xr-x 1 root root 3950 7月 5 12:51 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py
+```
+
+#_ADPi Proのサンプルスクリプトを用いたアナログ電圧の入力_
+ADPi Proをセットアップすると、Python言語のサンプルスクリプト「adpi-utils-backend-spidev.py」がインストールされます。動作確認のために、サンプルスクリプト「adpi-utils-backend-spidev.py」を用いて、チャンネル1からチャンネル4までに接続されたアナログ電圧をデジタル変換してみます。表示される電圧の単位は「mv」で、各チャンネルには「1V」のアナログ電圧を接続しており、それぞれ次にように表示されます。なお、Python言語のサンプルスクリプト「adpi-utils-backend-spidev.py」については、[adpi-utils-backend-spidev](https://github.com/mechatrax/adpi-utils-backend-spidev)を参照してください。
+
+```
+$ python3 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py device=adpipro spi0.0 1-0x57 1-0x27 get voltage 1
+1001.099843400
+$ python3 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py device=adpipro spi0.0 1-0x57 1-0x27 get voltage 2
+1002.879618840
+$ python3 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py device=adpipro spi0.0 1-0x57 1-0x27 get voltage 3
+1003.277177520
+$ python3 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py device=adpipro spi0.0 1-0x57 1-0x27 get voltage 4
+1002.632262240
+```
+
+次に「adpi-utils-backend-spidev.py」の実行時に与えるパラメータについて説明します。
+
+- 「device=adpipro」:デバイスの名称を与えており、固定になります。
+- 「spi0.0」:「.0」はCS番号を示します。「spi0」はSPIのBus番号で、固定となります。
+- 「1-0x57」:「0x57」はEEPROMのI<Sup>2</Sup>Cアドレスを示します。「1」はEEPROMのBus番号で、固定となります。
+- 「1-0x27」:「0x27」はGPIOエキスパンダのI<Sup>2</Sup>Cアドレスを示します。「1」はGPIOエキスパンダのBus番号で、固定となります。
+- 「get voltage 1」:アナログ電圧を入力してデジタル値に変換します。最後の数値はチャンネル番号で「1」-「4」を指定します。なお「adpi-utils-backend-spidev.py」は、パラメータ「get」以外にも「set」「reset」が指定でき、スケーリングの設定/読出しや、ゲインの設定/読出しなどが可能です。
+