UDP通信によるデジタルマルチメータの製作


【概要】

 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使用デジタルマルチメータ プロジェクトファイル




        目次に戻る