【概要】
PIC18F67J60を使ったLANに接続可能な5桁表示のデジタルマルチメータを
作ってみます。
A/Dコンバータにマイクロチップ社の「22ビット デルタシグマA/Dコンバータ
MCP3350-50」を使いましたので、前段のアナログアンプ等は全く必要なく
できます。さらにリファレンス電圧用に、アナログデバイス社の「高精度リファ
レンスIC REF198ESZ」を使って0.05%の電圧精度を無調整で実現しています。
高精度のデルタシグマA/Dコンバータのお陰で、電圧を100μVの単位で表示
してもノイズの影響をほとんど受けず安定な表示をします。
全体の外観は下図のようになります。小型アルミケースに実装して携帯が
できるようにしました。
UDP通信で直接PCから制御可能とし、PC側はVisual Basic.netでアプリケーション
を製作します。これでPCから下記の機能が実現できます。
単体機能 液晶表示器に各値を表示
・電圧測定 0V 〜 4096.0mV 精度±0.05%
0V 〜 40960mV 精度±0.5%(分圧抵抗誤差)
・電流測定 0mA 〜 409.6mA
・抵抗測定 1Ω 〜 100000Ω
PC側機能
・UDP接続
・測定
単体での測定値をそのまま表示
このデジタルマルチメータ用のプログラムは、マイクロチップ社のTCP/IP
スタックのデモプログラムをベースにしてUDPアプリケーション部を追加して
製作します。
UDP通信機能だけに限定したことにより、全体サイズが7kワード以下と
非常に小さくなっています。
【内部構成】
デジタルマルチメータの全体構成をブロック図で表すと下図のようになります。
基板で電圧を計測するようにし、各種測定切替は外付けのロータリースイッチ部
で行っています。
【デルタシグマA/Dコンバータの使い方】
マイクロチップ社の22ビット分解能の超高精度デルタシグマA/Dコンバータ
を使いました。これには日本語のデータシートもありますので使いやすいでしょう。
これで、前段に増幅アンプを挿入せずに、μVまでの計測も可能になります。
しかし、この精度を活かすには、パターンや部品配置、さらに
リファレンス電圧精度などに十分配慮することが必要になります。
このデルタシグマA/Dコンバータの内部構成は下図のようになっています。
差動の入力を直接A/D変換していますが、内部でオフセットやゲインの補正
を自動的に行っていますので、アナログ信号の誤差は外部のパターンや
リファレンスの精度だけに依存することになります。
マイコンとのインターフェースはSPIとなっていますが、SDO出力がReday信号
も兼用していますので、マイコンのSPIモジュールで接続するより、プログラム
I/OでSPIを実現した方がやりやすいと思います。
このSPIインターフェースのタイミングは単発変換として下図のようになっています。
まずCSをLowにするとA/D変換が開始されます。このA/D変換にはMCP3550-50
の場合は約80mescかかります。この間でCSをLowにするとビジーという状態で
SDO出力がHighとなりますので、この間は変換結果の通信はできません。
そこで、今回の使い方は100msec周期で変換開始、データ入力を交互に繰り返す
ようにして変換完了を待つことは避けるようにしました。
データ入力のときのタイミングは下図のように標準的なSPI通信と同じです。
全体が24ビットで構成されていて
さらに読み込んだ24ビットのデータフォーマットは下図のようになっていて、下位の
22ビットが符号付の変換結果のデータとなっています。
今回の使い方では、リファレンス電圧を4.096Vとしましたから、フルスケールで
4096mVということになります。
したがって電圧測定が0V〜4096.0mVのときは、実質16ビット精度で済みますから、
21ビットの内の下位5ビットは使いません。
さらに10倍のレンジでも内部測定範囲は0V〜4096.0mVとなり、実質約16ビット精度
で済みますから、やはり21ビットの内の下位5ビットは使いません。
【回路図】
このデジタルマルチメータの全体回路は下図となっています。この回路図はフリーの
EDAツールである「Eagle」で作成しました。
基板の入力は0V 〜 4.096Vの電圧入力となっていますので、これにあわせるようにして
外部で切り替えます。
測定端子のVIN-は、抵抗測定の場合のみ回路のGNDに接続しています。
次が基板内の回路図です。LAN関連は汎用I/Oと全く同じ構成にしています。
電源はPICが3.3Vですので3端子レギュレータには3.3V出力を使い、入力に
5VのACアダプタを使って、アナログ系には5Vを供給しています。
アナログ系は22ビットという特に高精度になっていますので、電源、グランド
配線ともデジタル系とは完全に分離する必要があります。
また5V電源には十分のフィルタを挿入してから供給します。グランド側もRFコイル
でデジタルグランドと1ヶ所で接続しています。
デルタシグマA/D変換ICへの電源はリファレンスICの出力を使って
電圧精度の確保と変動が無いようにしておきます。
電圧レギュレータの出力にも十分のフィルタを挿入して、このノイズの影響
が出ないようにしています。
これで、電圧は4095.9mVという100μVの単位の表示までしていますが、
最下位が±1カウント程度の振れで十分安定しています。
(2006/11/19 アナログ回路のフィルタを追加)
《ファイル》
下記で本デジタルマルチメータの回路図とパターン図のEagle用のファイルが
ダウンロードできます。
★ デジタルマルチメータ回路図
★ デジタルマルチメータパターン図
【外観】
作成した回路図からEagleを使ってパターン図を作成します。パターンは片面
基板で、サンハヤトの10k基板サイズ(75×100mm)以下に納まるようにしました。
完成したデジタルマルチメータの基板部の外観は下記の写真のようになります。
アナログ部ははんだ面の表面実装
なので、部品面はすっきりしています。
LANの部分もコネクタ以外は数個の
抵抗とコンデンサだけです。
はんだ面です。
アナログ回路は大部分表面実装なので
こちら側に部品実装されています。
アナログ系のパターンはノイズ対策のため
デジタル系と完全分離しています。
さらに5V電源、リファレンス電源
には十分のフィルタを挿入しています。
コンデンサはチップ型のセラミックコンデンサ
を使っています。
この基板を小型アルミケースに実装します。液晶表示器の窓と、LANと
ICSP用コネクタの窓がちょっと面倒な工作ですが、ハンドニブラとヤスリで
仕上げました。
ロータリスイッチ周りの配線がこみいって
いますが、あとは簡単な配線です。
【PIC側プログラムの製作】
汎用I/OユニットのプログラムはTCP/IPのデモプログラムVer3.75を元にし、
UDP通信機能だけに限定して余計な機能は全て削除しています。
これUDP通信のアプリケーション部を追加してマルチメータの表示をしています。
追加したUDP通信処理部は下記ファイルのようになります。
★ UDP DMMの追加ファイル
★★★ UDP DMMのプロジェクトファイル一式
【PC側プログラムの製作】
PC側のUDP通信を使ったアプリケーションを製作します。
ベースはVisual Basicですが、Visual Studio.NET 2003を使います。
Visual Basicで「Socketクラス」の中の「UDPClientクラス」を使うことで
至極簡単にUDP通信のアプリケーションを作ることができます。
基本の流れは下記のようになります。
インスタンス生成
↓
Connect UDPで相手のポート接続を確認をする
↓
--→Send データを送信する
| ↓
| Receive 折り返し送られて来るデータを受信する
| ↓
| データ処理 受信したデータ内容に基づいた処理を実行
|_____|
↓
Close 通信を閉じる
今回作成したアプリケーションの基本フォームは下図のようになって
います。この各ボタン押下により対応する機能が実行されます。
「接続」
UDPで相手のポートとの接続をします。
IPアドレスとポート番号は固定となっています
「計測」または「停止」
デジタルマルチメータの現在表示中の内容と同じ表示をします。
計測を押すと0.1秒周期で計測を繰り返し、停止を押すと
計測機能を停止させます。
「LCD」
下の欄のメッセージを液晶表示器への表示メッセージとして
送信します。同時に計測を停止させます。
「消去」
液晶表示器の全消去を指示します。さらに計測を再開します。
「終了」
全機能を停止、LAN接続を終了しダイアログを消去する。
下記がプロジェクトのファイル一式です。
Visual Studio.NET2003のVisual Basic.net用のファイルとなっています。
★ UDP使用デジタルマルチメータ プロジェクトファイル