ラズパイでアナログ電圧を扱う (2) MCP3208②
●12ビットA-DコンバータMCP3208のおもなスペック
こちらから日本語のデータシートが読めます。
- 分解能 12ビット
- 積分非直線性(INL) ±1LSB
- 微分非直線性(DNL) ±1LSB
- 入力数 シングルエンド;8チャネル、疑似差動;4チャネル
- 動作電圧 2.7~5.5V
- サンプリング速度 100ksps(Vdd=5V時)、50ksps(Vdd=2.7V時)
- クロック 最大2MHz(Vdd=5V)、最大1MHz(Vdd=2.7V)
- 変換方式 逐次変換SAR(Successive Approximation Register)
- 動作時の電流 400uA(5V時)
- 動作温度範囲 -40~85℃
- インターフェース SPI
- パッケージ DIP、SOIC、TSSOP
基準電圧Vref入力、アナログ・グラウンドAGNDとディジタル・グラウンドDGNDが独立した端子で用意されています。
●疑似差動入力
MCP3xxxシリーズの差動入力IN+ IN-は、疑似差動入力(pseudo-differential mode)です。これは、回路図中のグラウンドから浮いた電圧を測るような用途には適していません。グラウンド・ループやノイズ耐性を上げるために用意されています。したがって、マイナスの電圧が測れるわけではありません。
IN+入力は、IN-から(VREF + IN-)まで変動できます。IN-入力は、Vssレール±100mV に限定されます。具体的には、入力は-0.1~3.40Vの範囲で、最大100mVの同相(コモン・モード)ノイズが入っても除去されるということだと解釈できます。
参考;http://digital.ni.com/public.nsf/allkb/649202233E3EF06286257408002FDDBD
http://www.tij.co.jp/lsds/ti_ja/general/maruwakari/16_sar_adc.page
●基準電圧
Vref端子にA-D変換のかなめとなる基準電圧を入力します。基準電圧は0.25V~Vddの範囲です。このとき、A-Dコンバータの入力電圧は、0V~基準電圧の範囲になります。
電源電圧Vddを5.0Vとすれば、Doutなどの出力端子のHIGHレベルVohは4.0V以上になるため、ラズパイのGPIO入力電圧の上限を超えます。Vdd=3.3Vのときのスペックがデータシートにないのですが、0.7Vddとすれば、2.31Vです。ラズパイの入力端子のHIGHレベルを満足しています。
(※)インターネットを検索すると、ラズパイのHIGHレベルVohは1.34~3.30V、LOWレベルVolは0~1.19Vが多いようです。これは新しいラズパイ4に当てはまるかは不明です。
電源電圧を3.30Vとした場合、Vrefは3.30V以下を選ぶことになりますが、データシートから、2.5V以上ないと、有効ビットENOB、利得誤差、オフセット誤差が大きく劣化し、1V以下だと積分非直線性 (INL)も劣化します。したがって、2.5~3.30Vを選択します。
●二通りの基準電圧を用意できる
3.3VはラズパイのGPIO端子から得られます。これをVref端子につなぎます。動作確認するには手軽な方法です。3.3Vはラズパイのボード上の電源ICがUSBの5Vから作成します。スイッチング電源なので、それなりにノイズがあります。マイコンが動けば、この電圧は変動します。変動もパルス的に電流が変化するので、ノイズ源になります。
この3.3Vは電源インピーダンスが低いので、電解コンデンサを入れただけでは、ノイズは減少しません。LCフィルタであれば、いくらかのノイズが減る可能性がありますが、その違いを測定するのは大変です。
A-Dコンバータに基準電源用ICを利用すれば、安定な電圧が得られます。例えば、一番安価なTL431でも、常温付近の温度であれば、電圧変動はとても小さいです。
最後に示した記事によると、12ビットA-Dコンバータであれば、
>TL431の室温での利用時に、1LSB以下の温度変化しかしない
とのことなので、TL431を利用することにします。
●入力用アンチエリアシング・フィルタ
A-Dコンバータの入り口にはサンプル&ホールド回路が入っています。A-D変換するには時間がかかるので、その変換時間の間、一時的に入力電圧を保持するためのコンデンサとスイッチの組み合わせで構成されています。データシートにも書かれていますが、信号源、つまりセンサの出力インピーダンスが高いときには、サンプル&ホールドの時間に影響が出ます。対策としては、バッファを入れます。
データ入力部分に高い周波数のノイズが混入するとき、サンプリングの周波数によっては、折り返し雑音が生じます。本当の信号と折り返し雑音とでデータがパラパラと変化してしまうことがあります。そのために、データシートには2次のローパス・フィルタを入れて高い周波数のノイズを除去するようにあります。
電子工作では、部品点数が増えるのを嫌がり、バッファやフィルタは省略する場合があります。
●入力のチャネル
MCP3208はシングルエンド入力では8チャネルあります。MCP3204は、MCP3208とSPIは同じタイミングで読み書きが同じで、入力チャネルは半分です。MCP3202は入力は2チャネルですが、SPIのタイミングは異なります。MCP3201は入力は差動1チャネルですが、SPIのタイミングは異なり、書き込みは行わず読み出しだけです。
MCP3208の疑似差動入力の設定は、CH0=IN+ / CH1=IN、CH0=IN- / CH1=IN+、CH2=IN+ / CH3=IN、CH2=IN- / CH3=IN+、CH4=IN+ / CH5=IN、CH4=IN- / CH5=IN+、CH6=IN+ / CH7=IN、CH6=IN- / CH7=IN+ の8通りの組み合わせがあり、チャネル数は四つです。
●マイコンとのやり取り
SPIのタイミングは、プログラムの作成のところで説明する予定です。