USB接続のディジタルマルチメータ(ソフトウェア編)
マイクロチップ社の二重積分型のA/Dコンバータを使って
4-1/2桁のディジタルマルチメータを作ってみました。
PICのプログラムはPICROSでマルチタスク化しました。
【概要】
マイクロチップ社がPIC以外に力を入れているアナログ系のICの中から、
二重積分型のA/Dコンバータで、4-1/2桁のBCD出力のものがありましたので
試作してみました。
制御用にはPIC16F877を使い、USBN9603のUSBコントローラでパソコンとフル
スピードのUSB接続が出来ますので、データ収集やグラフ作成には便利に使えます。
PICのプログラムには「PIC用リアルタイムOSのPICROS」を使ってマルチタスク化
しましたので、意外に簡単にマルチメータが出来ました。
【機能仕様】
今回のディジタルマルチメータの機能仕様は下表のようになっています。これをPICと
A/DコンバータとUSBコントローラで実現しています。
項 目 機能仕様 備 考 測定項目と分解能 電圧 3レンジ構成のオートレンジ切替え
2Vレンジ 1.9999V 100μV分解能
20Vレンジ 19.999V 1mV分解能
200Vレンジ 199.99V 10mV分解能
電流 1レンジ構成
2Aレンジ 1999.9mA 100μA分解能
その他(直接入力)
2Vレンジ 1.9999V 100μV分解能入力インピーダンス
100MΩ以上
1MΩ
1MΩ
入力インピーダンス
1Ω
入力インピーダンス
100MΩ以上校正用出力 校正用の高精度基準電圧
10.000V 精度±0.1%以下
1.000V 精度±0.5%(約)
TYP±0.03%
校正可能表示 16桁2行の液晶表示器 外部出力 USB Ver1.1 フルスピード
セルフ電源
コマンドにより電圧、電流の測定可能コントローラは
USBN9603電源 外部より安定化されたDC電源供給
+12V〜+15V 最大100mA
【PIC側プログラム】
PICのプログラムは。自作リアルタイムOSである「PICROS」を使ってマルチタスク化
しましたので意外と簡単に出来ました。すべてCCS社のC言語で作っています。
全体のソフトウェア構成は下図のようになっていて、新規に作成した部分は、図中
色のついているタスク群とA/Dコンバータの割込み処理部だけとなっています。
このタスクや割込み処理の全体の流れは下図のようになっています。
つまり全体が大きく2つの流れになっていて、ひとつは機器単体で計測を
繰り返し液晶表示器に表示する流れで、下図の青い矢印の流れになります。
この単体動作は、まず、初期起動でkicktskが一度起動されると、あとはkicktskで
A/D変換を起動します。変換終了割込みを5回受け付けデータを入力したら
mesureタスクを起動します。このmesureタスクの中で液晶表示器に表示します。
mesureの最後の時点でResume_Task関数を実行して待ち合わせているタスクが
あれば再起動させた後、再度kicktskを起動し最初に戻ります。
これで永久に計測し液晶表示器に表示するという動作を繰り返します。
2つめはUSB経由パソコンから計測要求された場合で、赤い矢印の動作になり
ます。
まずUSB受信サブルーチンdo_rx1で計測指令を認識したら、usbrcvタスクを起動し
ます。usbrcvタスクでは最初にGet_Trigger関数で起動条件を判定し、Trigger関数
による起動だと判定したら、kicktskをRequest_Task関数で起動したあと、A/D変換
終了をmesureタスクに対しSuspend_Task関数で待ちあわせます。
変換が完了するとmesureタスクからresumeされるのでusbrcvタスクが再起動します。
usbrcvタスクではGet_Trigger関数で起動条件を判定し、resumeによる起動だと判定
したら、今度はデータをUSBに送信してからExit_Task関数で完了し一巡の動作が終了
します。
usbrcvタスクでは、Get_Triggerサービス関数により、起動条件を判定している
ところと、mesureのタスク完了をSuspend_Task関数で待合せているのが特徴です。
(1) ユーザー設定ファイル usrconf.h
これが全体構成を決める定義ファイルで、ここでタスク構成などを指定します。
ここでの内容は下記のようになっています。
まずPIC種別、クロック周波数、コンフィギュレーションビット、ポートモード
などを設定したあと、デバッグモードはOFFとしておきます。
いまのところUSBとUSARTを同時に使うデバッグは出来ません。
その後で、タスクの呼称設定とプロトタイプを設定しています。
共通変数を定義してその後は液晶表示器用ライブラリとUSBライブラリの
リンクを指定するためのヘッダーファイルをリンクしています。
下記がPIC側のプログラムのC言語のソースファイル一式です。
CCS社のPCMコンパイラを統合したMPLABでコンパイルして下さい。
プロジェクト名は「dmm01」として下さい。
★USB接続ディジタルマルチメータ PICプログラム一式
(浮動小数点数扱いのためサイズ大)
★USB接続ディジタルマルチメータ PICプログラム一式
(浮動小数点数扱いを中止 サイズ小さい)
★USB接続ディジタルマルチメータ PICプログラム一式 (3/3)
(電圧計測時にレンジ変更中は表示、USB送信なし)(1/22)
(SPI動作安定化のためクロックエッジ変更) (2/14)
(TX_2()のエラー処理 T1SIZE → T2SIZEに修正) (3/3)
【パソコン側プログラム】
今回のパソコン側のプログラムはテスト用のレベルですので、単純に計測したデータ
を本体側と同じような数値表示のみとなっています。これを一定時間間隔で繰り返し
計測し表示するようになっています。
レンジや電圧電流の区別は全て本体側から送られて来ますので、これを区別して
表示するだけとなっています。
フォームは下図のようになっていて、下記のような機能を持っています。
(1) USB接続
指定したベンダーIDとプロダクトIDでUSBの接続を開始します。
正常に接続できない場合にはエラーメッセージを表示してプログラムは終了します。
正常に接続された場合にはIDの窓が緑からオレンジに変わります。
(2) 計測開始
計測開始ボタンを押すと一定時間間隔で、本体に計測開始コマンドを出力し
折り返しのデータを数字にて表示します。このとき、折り返しのデータに含まれて
いる内容に基づき、電流、電圧の区別やレンジによる値の変換を行います。
表示内容は下図のように、オーバーフロー表示、極性表示、値、単位となっています。
(3) グラフ作成、保存機能は未作成です。
下記がパソコン側のVisual Basibのプログラムソースの1式です。
VBでお使い下さい。
★USB接続ディジタルマルチメータ パソコンプログラム一式
★PIC側に合わせて改版(浮動集数点数を中止したものに合わせた)
【パソコン側プログラムVer2】
パソコン側のプログラムとしてトレンドグラフが出来るようにバージョンアップしました。
基本フォームは下図のようにしました。下図はフォームデザインの図で、タイマと
コマンドダイアログが隠しコンポーネントとしてあります。
トレンドを色々な時間で取れるように時間間隔を設定できるようにしました。
これでかなりの長時間のトレンドが記録可能です。
グラフ作成によりトレンドグラフを表示し、描いたグラフを保存することが出来ます。
また保存してあるグラフデータを読み出して再描画することも出来ます。
下図が動作中の基本フォームで、USBの窓が緑からオレンジに変わっています。
さらに実際に計測したデータが値の窓に表示されています。
単位などは、自動的に機器がわに合わせて表示されます。
下図がトレンドグラフを表示した結果です。縦軸のスケールは電圧値に合わせて
3段階で自動的に修正されます。また途中でスケールが変更になった場合にも
自動的に縦軸が変更されて再表示されます。
横軸の時間軸も、設定された時間間隔に合わせて自動表示されます。
下記から上記パソコン側のプログラムがダウロードできます。Visual Basicで
お使い下さい。
★パソコン側プログラム 一式 (12/22)