2017年6月11日日曜日

SPI ADCのMCP3008をNucleo(mbed)で使ってみる。

MicroChipのADCの10bitバージョンのMCP3008をNucelo F401REで使ってみた。MCP3008はMCP3208より解像度は低いが、SPIの最大クロック数が3.6MHzまで対応している。

mbedのライブラリ


MCP3208用のライブラリをMCP3008用に書き換えてみた。

mbed repository:
Library:
https://developer.mbed.org/users/ryood/code/mcp3008/

Test Program:
https://developer.mbed.org/users/ryood/code/Nucleo_MCP3008_Test/

ライブラリのA/Dコンバーターの差動入力はテストしていないのでコメントアウトしている。

ブレッドボード配線図


MCP3008に送る電源は5Vでも3.3Vでもよい。

5V電源のほうがSPIのクロックを上げられるが、Nucleoに載っているMPUが3.3V駆動なので、Nucleo→MCP3008のSPI信号が3.3Vになり、一応はMCP3008の仕様外になる。Nucleoの方は3.3V駆動だが、5VトレラントなのでMCP3008→Nucleoの信号レベルが5Vでも問題はない。

3.3V電源だとSPIのクロックの最大値が低くなる(1.35MHz@2.7V)が、3.3V系同士なので信号レベル的には安心。

UART出力


ダンピング抵抗を入れてみる。


出力の近くにダンピング抵抗を入れるとオーバーシュートや振動が抑えられるので入れてみた。

mbed repository:
https://developer.mbed.org/users/ryood/code/Nucleo_MCP3008_Ticker_Test/

配線図


NucleoにArduino互換のシールドを載せている。(参考:「ベースマシン UI Controller ダンピング抵抗用シールドの製作」)シールド上でピンソケットを使ってダンピング抵抗を入れられるようにしている。SCK、MOSI、CSに33Ωの抵抗を挿入、MISOはジャンパでショート。

また、SPI通信用のケーブルは、30cm程度のものを2本コネクタでつないでわざと状態を悪くしている。


ダンピング抵抗なし

MOSI

ch1:MOSI ch2:SCK

MISO

ch1:MISO ch2:SCK

SCK、MOSIはNucleoが出力している信号で、オーバーシュートや振動がかなり出ている。MOSIはMCP3008が出力している信号で立ち上がり/立ち下がりが遅い。

33Ωダンピング抵抗あり


MOSI

ch1:MOSI ch2:SCK

MISO

ch1:MISO ch2:SCK

33Ωだと多少整形されている感じ。ようすを見ながら差し替えられるようにしておいた方が良さそう。