3:MCP3901の概要と使い方

ここで、今回使用したMCP3901の使い方を説明します。これまでのMicrochipのΔΣコンバータは、高分解能なのですが変換速度が数10spsと遅いものが多く、パルス状の信号の測定には向いていませんでした。

しかし今回使用したMCP3901は16または24ビットの精度を持ちながら、最高32kspsという高速で動作します。この速度があればダイナミックに変化する微小電流をリアルタイムで計測することができます。

もともとMCP3901はスマートメータ用として電力測定に使用する目的で開発されたもので、内部構成とピン配置は図2、仕様は表2と表3のようになっています。

図2:MCP3901の内部構成

表2:MCP3901の基本仕様

表3:オーバーサンプリング比(OSR)とサンプリング速度

図2に示したように、電力測定のため電流と電圧を同期して変換できるように独立に2チャネル内蔵しており、同期タイミングも位相制御でずらすことができるようになっています。両方のチャネルに最大32倍まで増幅可能な可変ゲインアンプも内蔵しています。

クロック発振回路を内蔵していますので、外付けにクリスタル発振子を接続すればクロック信号を生成できます。2段階のクロック周波数になっていて通常は最高5MHzまでなのですが、BOOST機能をオンにすると最高8.192MHzのクロックで動作させることができます。

電源とグランドはアナログ用とデジタル用で分離されており、電圧も異なっています。アナログ側は5Vが標準となっていますが、デジタル側は2.7Vから5.5Vの範囲となっていますので、マイコンに合わせて3.3Vか5Vとすることができます。

内蔵リファレンスとして2.37Vで12ppm/℃の定電圧源も内蔵していますので、アナログ関連の外付け部品は必要としません。

表4から、最高の有効分解能(ENOB)が得られるのはオーバーサンプリング比が256の場合で、このときのサンプリング速度はクロックを8MHzとすれば7.8kspsということになります。今回はこの設定で使うことにしました。

例えば16ビット分解能でPGAを32倍とすれば、2.37V÷65536÷32=1.1μVですから1μV単位の計測が十分可能となります。

MCP3901の外部インタフェースはSPI接続となっており、最高20MHzのシリアル通信でPICマイコンと通信できます。MCP3901の制御は、このSPIインタフェースで内部レジスタを設定することで行うようになっています。このときのSPIの送受信フォーマットは図3のようになっています。

図3:SPIインタフェース

PICマイコン側がマスタとなり、最初の送信バイトをコマンドとして、デバイスアドレス(デフォルトは00)とレジスタのアドレス、Read/Writeの区別ビットをまとめて送信します。

Writeの場合には、コマンドに続いてレジスタに書き込むデータを送信します。1バイト送信するごとにMCP3901の内部でレジスタアドレスが自動的に+1されますので、データだけを連続して出力すれば、レジスタに順番に書き込むことができます。

Readの場合には、レディーピン(DR)がLowになるのを待ってから入力を開始します。この場合にも連続して読み込みが可能で、アドレスは自動カウントアップします。 MCP3901のレジスタには、表4のようにアドレス0x00から0x0Bまでの種類があります。GROUPとTYPE、ALL(全部一括)に区分けされていて、連続書き込み、連続読み出しが可能な範囲を示しています。つまり、自動的に行われるアドレスカウントアップは、GROUPとTYPEとALLで3つに分割されていて、表4で指定された範囲内でループしてカウントアップが行われます(デフォルトはGROUPとなっています)。

表4:レジスタ一覧表

動作設定をするためのレジスタの内容詳細は図4となっています。

MCP3901を使う場合には、最初にRESETコマンドを実行します。CONFIG1レジスタのRESETビットを1にして1バイトだけ送信すれば受信完了後内部をリセット状態とします。

この後リセット動作完了を待つための遅延を入れてから初期設定を開始します。初期設定は、STATUSレジスタのREADビットでTypeを指定して、PHASEレジスタからCONFIG2レジスタまで連続して一気に設定してしまいます。MODレジスタは使いませんので設定不要です。1バイト書き込むと自動的にレジスタアドレスが+1されますので、順番にデータを出力すればよいことになります。

今回の使い方では、CONFIG1レジスタの設定は、PRESCALEは1/1、OSRは256、WIDTHは24ビット、MODOUTはなしとして設定します。

CONFIG2レジスタの設定では、RESET、SHUTDOWNはなし、DITHERはあり、内蔵リファレンス、発振子で発振を選択します。

GAINレジスタは、チャネル0を32倍、チャネル1を4倍、BOOSTは両方ともオンで設定しています。

変換結果の読み出しは、変換が終了するとDRピンがLowになりますので、それを待ってから、両方のチャネルを連続して一気に読み出します。データが3バイトか2バイトかは、CONFIG1レジスタのWIDTHビットで決まります。

この場合にも最初に0x00のレジスタアドレスを指定すれば、1バイト読み出すごとにアドレスが+1されますから連続して読み出すことが可能です。

図4:レジスタ詳細

4:回路設計と製作

図1の全体構成図から作成した回路図は図5となります。

図5:全体回路図

MCP3901の電源には5Vが必要ですが、5VのACアダプタを使う前提で直接供給します。しかしそのままではノイズの影響が出ますので、フィルタを通して供給しています。またノイズ対策のため、アナログ系のグランドとデジタル系のグランドを完全に分離し、L2を経由して1カ所で接続するようにします。

MCP3901とPICマイコンとはSPIモジュールで接続したかったのですが、あいにく液晶表示器にピン配置ができるピンを全部使ってしまいましたので、プログラムI/OでSPI通信をすることにしました。また、変換状態を示すデータレディー信号(DR)を直接dsPICのRB4(RP4)ピンに接続して変換完了がチェックできるようにしています。この出力はオープンドレインになっていますので抵抗でプルアップが必要です。

液晶表示器のタッチスクリーンは、PICマイコンのアナログ入力ピンに接続しますが、タッチしていないとき0V入力となるよう10kΩの抵抗アレイでプルダウンしています。

この回路図からパターン図を作成しプリント基板としました。微少な電流を扱いますので基板のリークを考え絶縁度の高いガラスエポキシ基板としました。

組み立てが完了した基板の部品面が写真2ではんだ面が写真3となります。

写真2:組み立て完了した基板の部品面

入力には端子台を使って測定対象との接続が簡単にできるようにしました。

写真3:はんだ面

MCP3901はSSOPパッケージタイプしかありませんので、はんだ面側の実装となります。この周囲のグランドパターンがアナログ系のグランドとなります。

液晶表示器はサブ基板に組み立て、2つのピンヘッダコネクタで接続します。液晶表示器のサブ基板を実装して完成した状態が写真4となります。

写真4:完成状態

この液晶表示器は、もともと16ビットパラレルのインタフェースとなっていて、8ビットパラレルインタフェースにするためには、写真5のようにフラットケーブルに実装されているチップ抵抗を1個付け替える必要がありました。液晶表示器の選択には、このような8ビット化の改造が可能なものを選択する必要があります。

写真5:液晶表示器の8ビット化