記事

Raspberry Pi 3 model Bが入手できました (6)

SPIインターフェースのA-Dコンバータでアナログ入力

 アナログ入力処理のサンプル・プログラムとしてTempSensorが用意されています。Raspberry Piにはアナログ入力ポートが用意されていません。そのため、このTempSensorのサンプル・プログラムではSPIインターフェースのA-DコンバータICを外付けして対応することで解決しています。
 この外付けのA-DコンバータとしてMicrochip TechnologyのMCP3002、MCP3008、MCP3208の3種類を対象としています。

型番 分解能(ビット数) チャネル数
MCP3002

10

4
MCP3008 10 8
MCP3208 12 8


 今回は、12ビットの分解能で8チャネル入力のMCP3208を利用します。

 TempSensorのサンプル・プログラムは「IoTへの挑戦 Raspberry PiでWindows 10 IoT Coreを動かす(5)

でダウンロードしたsamples-developのフォルダの中にあります。この中のTempSensor¥CSフォルダ内のTempSensor.slnのプロジェクトファイルを開いてサンプル・プログラムのテストを開始します。

 サンプル・プログラムはMCP3002のA-Dコンバータを対象としています。プログラムは、基本的には3種類のA-Dコンバータに対応できます。
 次に示すように、プログラムの2か所をMCP3002からMCP3208に修正するだけで、対象A-DコンバータがMCP3002からMCP3208に変更できます。

 具体的な変更場所は次のとおりです。
(1) 次のADCChip型のwhichADCChipにmcp3002を設定している次の命令を、

  ADCChip whichADCChip = ADCChip.mcp3002;


 次のように変更します。

  ADCChip whichADCChip = ADCChip.mcp3208;


(2) MainPage()関数のタイマ処理の後の次の命令を、

  whichADCChip = ADCChip.mcp3002;


  次に示すように、mcp3208のチップを利用するように変更します。

  whichADCChip = ADCChip.mcp3208;

テスト・ボード
 MCP3208のA-DコンバータはDIP 16ピンですので、次に示すようにブレッドボードに挿し込んでRaspberry Pi 3とジャンパ線で接続します。

 サンプル・プログラム、A-Dコンバータの入力値をそのまま画面に表示しているだけです。センサの代わりに、次に示すようにボリュームにジャンパ線をはんだ付けし、電源電圧をボリュームで分圧したものをアナログ入力データとします。ボリュームは5kΩ(B)を使いましたが、10kΩでも同じように使えます。


MCP3208のピン配置
 MCP3208のピン配置図を次に示します。13ピンCLK(SPI_CLK)、12ピンDout(SPI_MISO)、11ピン Din(SPI_MOSI)、10 ピン/CS/SHDN(SPI_CE0)とRaspberry PiのSPI通信の端子をジャンパ線で接続します(カッコ内の青い文字はRaspberry PiのGPIO)。

Raspberry Pi 3の40ピンのピンヘッダ
 MCP3208とRaspberry Piの接続は、次に示す40ピンのピンヘッダの必要な機能をピンと接続します。 

MCP3208とRaspberry Piの接続
 具体的なジャンパ線の接続方法を次に示します。

    MCP3208     Rasberry Pi
SPI          
 

13

CLK  --- 23 SPI_CLK
  12 Dout   --- 21 SPI_MISO
  11 Din   --- 19 SPI_MOSI
  10 /CS   --- 24 SPI_CE0_N
電源          
  16 Vdd(3.3V)   --- 17 +3.3V
  9 DGND   --- 25 GND


    
アナログ入力
 MCP3208のチャネル0(CH0)に、電源電圧をボリュームで分圧した電圧を接続します。A-Dコンバータの基準電圧は電源電圧を利用します。また、アナログ入力のGNDとディジタル電源のGNDが、別に設定することもできるようにそれぞれ用意されています。しかしここでは両方のGNDを共通にします。そのための設定は次のようになります。

  ピン番号 名称
アナログ入力 ボリューム中間タップ 1 CH0
+3.3Vのプラス電源 15 Vref
GND  14 AGND


 ボリュームからの電圧出力は、MPC3208の1番端子に接続します。

サンプル・プログラムの実行結果
 サンプル・プログラムを実行すると、次に示すメッセージとA-Dコンバータからの読み取り値が表示されます。
ボリュームを絞った状態

 ボリュームの出力を増大すると、値も大きくなります。

ボリュームを最大近くまで増大したとき
 MCP3208のA-Dコンバータは12ビットなので、最大で4095になります。

 今回、Raspberry Pi 3 model Bで動作が確認できました。次回、Raspberry Pi 2 model Bでの動作の様子、サンプル・プログラムについてなど検討します。

(2016/6/14 V1.0)

<神崎康宏>

連載メニュー Raspberry Pi 3 model Bが入手できました

(1) 性能の向上したモデルPi 3 でIoT

(2) オンボードのWi-Fiによる通信

(3) Visual Studio 2015 Update 2での不具合

(4) プレビュー版は頻繁に更新されている

(5) Powershellのコマンドでディスプレイの解像度を設定

(6) SPIインターフェースのA-Dコンバータでアナログ入力

(7) 温度を測るサンプル・プログラムtempsensor

(8) 温度センサLM35DZはアナログ出力

(9) ビルド・バージョンよってSPIが動かないことへの対応

(10) まとめ