Help us understand the problem. What is going on with this article?

SPIを用いたラズベリーパイ用高精度A/D変換モジュール「ADPi Pro」のセットアップ

More than 1 year has passed since last update.

Raspberry Pi 3を使って、アナログ信号をデジタル変換して入力してみます。Raspberry Pi 3ではアナログ信号を処理するためにA/D変換モジュールが別途必要で、このために、研究開発・ビジネス用途向けに開発されたメカトラックス社のラズベリーパイ用高精度A/D変換モジュール「ADPi Pro」を今回使用します。
ADPi Proは、SPI デバイスとIIO サブシステムの二つのインタフェースを使って、アナログ電圧を入力してA/D変換できます。今回はADPi ProをSPIデバイスとして動作させ、5Vを5つの抵抗で分圧してADPi Proのターミナルブロックに接続し、メカトラックス社から提供されているPython言語で作成したサンプルスクリプトを実行して、ADPi Proに接続したアナログ電圧のA/D変換値を確認します。なお、IIO サブシステムを使用する場合のセットアップについては、IIOサブシステムを用いたラズベリーパイ用高精度A/D変換モジュール「ADPi Pro」のセットアップに示します。また、ADPi Pro の資料は、ADPi Pro(ラズベリーパイ用高精度 A/D 変換モジュール)で公開されています。

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のデータシートを参照してください。また、ADPi Proのハードウェアに関しては、ADPi Proのハードウェアを参照してください。

実際にADPi Proに分圧した1Vのアナログ電圧を入力して、Raspberry Pi 3でA/D変換値を取得する動作環境の様子を次に示します。

ADPi Proの動作環境の構築

ADPi Proの40ピンコネクタCN3と、Raspberry Pi 3の40ピンコネクタJ8を重ね合わせるように接合します。これにより、Raspberry Pi 3から5Vを給電し、 SPI と I2Cの各インタフェースを使用します。ADPi Pro基板上のジャンパおよびディップスイッチJ1、J2、J3、DIPSW1は初期状態のままです。また、ADPi Proのターミナルブロック4個の差動電圧入力「Vin+」「Vin-」のそれぞれに、5Vを5個の抵抗で分圧した「1V」を次の図のように接続します。なお、抵抗は金属皮膜抵抗器、162Ω、誤差±0.1%を使用しました。

ADPi Proのセットアップ

今回使用するraspbian「2018-04-18-raspbian-stretch」は、ラズベリーパイ公式サイトからダウンロードしました。ADPi ProをPython言語でアクセスできるSPIデバイスとするために、このraspbianに、次の手順に従いADPi Proをセットアップします。なお、SPIデバイスとしてアクセスするADPi Proのセットアップは、ADPi Proのセットアップを参照してください。

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エキスパンダの I2Cアドレスを、次のコマンドで確認します。EEPROMのI2Cアドレスが「57」、GPIOエキスパンダのI2Cアドレスが「27」になっていることを確認します(初期設定の場合)。なお、各I2Cアドレスは、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. 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を参照してください。

$ python3 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py device=adpipro spi0.0 1-0x57 1-0x27  get voltage 1
1002.578618640
$ python3 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py device=adpipro spi0.0 1-0x57 1-0x27  get voltage 2
1002.551796840
$ python3 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py device=adpipro spi0.0 1-0x57 1-0x27  get voltage 3
1002.848028720
$ python3 /usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py device=adpipro spi0.0 1-0x57 1-0x27  get voltage 4
1002.341394720

次に「adpi-utils-backend-spidev.py」の実行時に与えるパラメータについて説明します。

  • 「device=adpipro」:デバイスの名称を与えており、固定になります。
  • 「spi0.0」:「.0」はCS番号を示します。「spi0」はSPIのBus番号で、固定となります。
  • 「1-0x57」:「0x57」はEEPROMのI2Cアドレスを示します。「1」はEEPROMのBus番号で、固定となります。
  • 「1-0x27」:「0x27」はGPIOエキスパンダのI2Cアドレスを示します。「1」はGPIOエキスパンダのBus番号で、固定となります。
  • 「get voltage 1」:アナログ電圧を入力してデジタル値に変換します。最後の数値はチャンネル番号で「1」-「4」を指定します。なお「adpi-utils-backend-spidev.py」は、パラメータ「get」以外にも「set」「reset」が指定でき、設定されている電圧レンジに対応した分解能の表示/設定や、設定されている電圧レンジに対応したゲイン倍率の表示/設定などが可能です。

この他、ADPi Proのパッケージでは、SPI デバイスとIIO サブシステムの二つのインタフェースを同じパラメータで操作できる「adpictlコマンド」が提供されています。adpictl コマンドは 「/etc/adpi.conf 」の設定を元に、「/usr/lib/adpi-utils/adpi-utils-backend」に引数を付けて実行します。「adpi-utils-backend 」は、「adpi-utils-backend-spi 」をインストールした場合、「/usr/lib/adpi-utils-backend-spidev/adpi-utils-backend-spidev.py」 が使用されます。接続先チャンネルで測定した電圧を表示するには「get voltage x」を使用します。「x」はチャンネル番号「1」-「4」です。この「adpictlコマンド」を使用して、チャンネル1からチャンネル4までに接続されたアナログ電圧をデジタル変換してみます。なお、「adpictlコマンド」のほうが、与えるパラメータが少なく使いやすいのでお勧めです。

$ adpictl get voltage 1
1002.683521680
$ adpictl get voltage 2
1002.496365120
$ adpictl get voltage 3
1002.834915840
$ adpictl get voltage 4
1002.356891760

「adpictlコマンド」の詳細なパラメータの説明については、ADPi を操作するためのツール類を参照してください。

ADPi Proに関連する記事

1. IIOサブシステムを用いたラズベリーパイ用高精度A/D変換モジュール「ADPi Pro」のセットアップ
ADPi ProをIIOサブシステムとして動作させ、作成されたサンプルシェルスクリプトを実行して、ADPi Proに接続したアナログ電圧のA/D変換値を確認します。
2. SPI /IIOサブシステムを用いたラズベリーパイ用高精度A/D変換モジュール「ADPi Pro」による計測方法
ADPi ProをSPIインタフェースやIIOサブシステムでアクセスして、接続されたアナログ電圧をA/D変換するサンプルスクリプトを作成します。

TomoSoft
始めまして。私は、制御系のソフトウェアエンジニアです。近年、センサー系の制御システムをネットワークに接続されるようになり、特に私は、クラウドにセンサーを接続し、情報の提供や機器の監視を行うシステムに関心を持っています。作業のご依頼がございましたら、ご連絡ください。宜しくお願いします。
https://tomosoft.jp/design/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした