Howto

SPI 接続の ADC を使用する方法 (Armadillo-IoT ゲートウェイ G4/X2)

この Howto では、Armadillo-IoT G4 に SPI 接続の ADC を接続し、電圧を取得する方法をご紹介します。

Armadillo-IoT G4をベースにした内容になっていますが、Armadillo-X2でも動作確認しています。 Armadillo-X2はArmadillo-IoT G4の機能を一部減らして小型にした製品で、基本的には同じソフトウェアで動作します。 また、拡張インターフェース(CON11)の仕様も同じですので、CON11用に作った拡張ボードは両方の製品で動作します。

使用する ADC

この HowTo で使用した SPI 接続の ADC を以下に示します。

  • Microchip MCP3204

この ADC は 4 入力 12 ビットの逐次比較式 ADC です。
出力される値は 0 から 4095 までで、 4096 × VIN / VREF です。
疑似差動モードを使用する場合、 -100mV < VIN- < 100mVとなるようにしなければいけないなど、入力電圧範囲に注意が必要です。

接続方法

Armadillo-IoT ゲートウェイ G4 で SPI バスを使用する方法 を参照ください。
この ADC では、SPI はモード 0 か 3 、周波数は 50kHz から 1MHz まで( 5V では 2MHz まで)にしてください。
また、この ADC は 2.7 ~ 5.5V で動作するデバイスなので、レベル変換回路が必要です。
この後のサンプルプログラムでは /dev/spidev0.0 にセンサーを接続しています。

サンプルプログラム

約 1 秒周期で ADC の値を取得して表示する、 C 言語のサンプルプログラムを用意しました (こちら)。
サンプルプログラムの動かし方を以下に示します。

コンテナの起動

Debian の場合

[armadillo ~]# podman run -it --rm --device=/dev/spidev0.0 docker.io/debian /bin/bash
(省略)

Alpine の場合

[armadillo ~]# podman run -it --rm --device=/dev/spidev0.0 docker.io/alpine /bin/sh
(省略)

必要なパッケージのインストール

Debian の場合

[container /]# apt update && apt upgrade -y && apt install -y gcc wget spi-tools
(省略)
done.

Alpine の場合

[container /]# apk update && apk upgrade && apk add gcc wget spi-tools musl-dev linux-headers
(省略)
OK: 125 MiB in 31 packages

デバイスとの接続確認

MCP3204 は レジスタなどを持たないため、確認できません。
後述のサンプルプログラムの表示値と、実際の入力電圧が一致しているかどうかで確認してください。

サンプルプログラムのダウンロード・解凍

[container /]# cd
[container ~]# wget https://armadillo.atmark-techno.com/system/files/blog/howto_g4_spi_adc_mcp3204.tar.gz
(省略)
2022-05-06 02:01:56 (7.67 MB/s) - 'howto_g4_spi_adc_mcp3204.tar.gz' saved [1057/1057]
[container ~]# tar zxvf howto_g4_spi_adc_mcp3204.tar.gz
howto_g4_spi_adc_mcp3204/
howto_g4_spi_adc_mcp3204/spi_mcp3204.c
howto_g4_spi_adc_mcp3204/test.c
howto_g4_spi_adc_mcp3204/spi_mcp3204.h
[container ~]# cd howto_g4_spi_adc_mcp3204/

サンプルプログラムのコンパイル・実行

[container ~/howto_g4_spi_adc_mcp3204]# gcc test.c spi_mcp3204.c -o test
[container ~/howto_g4_spi_adc_mcp3204]# ./test
ch0:  761  ch1:  103  ch2: 2108  ch3: 2107  diff(ch0-ch1):  659
ch0:  760  ch1:  102  ch2: 2107  ch3: 2108  diff(ch0-ch1):  659
ch0:  761  ch1:  102  ch2: 2107  ch3: 2108  diff(ch0-ch1):  660
ch0:  761  ch1:  103  ch2: 2107  ch3: 2106  diff(ch0-ch1):  659
ch0:  761  ch1:  102  ch2: 2107  ch3: 2105  diff(ch0-ch1):  659
(無限ループ)

サンプルプログラムについて

サンプルプログラムは test.cmain 関数があります。
同様に spi_mcp3204.h をインクルードすることで、ADC を使用したプログラムを作成できます。
MCP3204 のデータシートも参考にしてください。