トップページ     電子回路のページのトップ

 電圧記録計

 画像をクリックすると拡大表示されます。
 拡大画像からはブラウザの「←戻る」ボタンで戻ってください。


製作した動機

 ニッケル水素電池の放電器を製作した時、動作状態を確認するのに定期的に電池の電圧を測定する必要がありました。
 時々、テスターで電圧を記録するのは面倒な作業です。
 電圧を記録するデータロガーがあれば便利だと思いました。


仕様

入力抵抗2MΩ
CH数2CH
レンジ±2.5V、±6V、±12.5V、±25V(4レンジ)
分解能±2.5Vのとき5mV、±25Vのとき50mV
ゲイン補正CH毎、レンジ毎に0.90倍〜1.10倍に補正可能(デホルト1.00)
計測誤差±1%
計測件数500件、1000件、2000件、4000件、8000件(強制終了可能)
インターバル20mS、0.1秒、1秒、10秒、1分
最大計測時間1分間隔で8000件を記録した時に5日と13時間
データ読出液晶画面に全データを表示可能、又はデータをパソコンに送信
消費電流計測時に12mA、データ送信時に15mA

 入力抵抗は、もう少し高くしたいところですが、アナログ回路に一般的な部品を使ったので、これ位が限度です。
 アナログスイッチのリーク電流とOPアンプの入力バイアス電流が問題になります。

 レンジはオートレンジではなく、設定したレンジに固定されます。
 オーバーフローした場合、表示器には”OVF”と表示され、データは上限値、下限値が、そのまま記録されます。

 CPUにはPIC16F877を使用しました。
 使用部品の精度により、計測誤差が1%以上になった場合、CH毎、レンジ毎にゲイン補正係数を書き込めます。
 他のパラメータ(件数、インターバル、計測レンジ)同様に液晶画面で編集され、EEPORMに書き込まれます。
 パラメータはPIC内蔵のEEPROMに書かれ、計測データは外付けの24LC256に書き込まれます。

 データの読み出しは、表示位置をプッシュスイッチでスキャンしながら表示します。
 スキャンスピードは3段変速で、8000件を30秒でスキャン出来ます。
 しかしながら、8000件を読み出すのは大変です。
 そこで、パソコンに全データと計測パラメータを送信出来るようになっています。
 送信後の処理は、パソコン側のソフトに依存します。


負電圧も計測したい

 PIC16F877内蔵のA/Dコンバータは、そのままでは、正の電圧しか入力出来ません。
 負の電圧を測定するには
 1 バイポーラ入力のA/Dコンバータを外付けする。
 2 負電圧を正電圧にレベルシフトする。
 上記、2つの方法があると思います。
 精度を追求するには、1の方法が良いと思いますが、今回は簡易型という事で、2の方法を採用しました。

 まず、レンジ切り換えで、入力を−1.28V〜+1.28Vにします。
 次に、レベルシフト回路で、入力を0〜+2.56Vに変換します。
 あとは通常通りにA/D変換して、ソフトで極性及びレンジを再現します。
 これで内蔵のA/D変換器が使える事になりますが、10BITしかない分解能が、さらに1/2になってしまいました。
 しかし、9BITの分解能があれば、通常の計測には十分、使用出来ます。

 回路は複雑ではありませんが、抵抗は1%誤差の金属皮膜抵抗を選別します。
 抵抗を購入すると、一般的に値は−気味で、1%誤差の物は−0.3%〜−0.5%程度の物が多いです。
 この中から、絶対誤差が小さくて相対的な誤差が揃ったペアを選別します。
 又、レベルシフト回路とA/D変換器には基準電圧源が必要ですが、これらは電圧を微調整出来るようにしておきます。


装置の製作

入力部基板 CPU基板 装置外観 装置内部 計測表示
入力部基板CPU基板装置外観装置内部計測表示

入力部基板  回路はユニバーサル基板で製作しましたが、都合により入力部とCPU部に分けて製作しました。
 入力部基板にはレンジ切り換えの為のアナログスイッチ、レベルシフトの為のOPアンプ等が載っています。
 負電圧はチャージポンプICで作っています。

CPU基板
 CPUにはPIC16F877を使用しました。
 その他、RS232Cのレベルコンバータ、256KBITのEEPROM等が載っています。

装置外観
 ケースはタカチのプラスチックケースを」使用しました。
 加工が楽で、防水構造になっているので最近、よく使用します。
 不器用な為、液晶の角穴が綺麗に開けられません。

装置内部
 装置内部と結線状態を示します。

計測中の表示
 表示器は秋月で販売している20字×4行のものを使用しました。
 写真は332件目を計測したところです。


トラブル

メモリ不足
 PIC16F877はメモリが少なく、Cコンパイラ(CCSC)でソフトを組むと、よくメモリ不足になります。
 特に浮動小数点を使ったりするとメモリを多く消費します。
 今回は1000行程度でメモリ不足になってしまいました。
 プログラムメモリが4バンクに分割されているので、Cで組むと、メモリが余っていても入らない場合があります。
 この場合は、プログラムの全体構造を変更すると入る場合があります。
 今回も、内容を削り、全体の構造を変更して、やっと納める事が出来ました。
 スタックも8レベルしかないのでギリギリです。
 これらの問題はPIC18Fシリーズを使えば改善されると思いますが、そこまで投資出来ません。

液晶表示でハマる
 PICに関してはデバッガを持っていません。
 構造の簡単なPICでは、それほど複雑な処理はしないし、組み込み関数の多いCCSCでは記述が簡単で済む為です。
 液晶表示器があれば、表示状態でミスが判るし、仮に変数の内容を表示する事も可能です。
 今回は、その液晶表示で2日近くハマりました。
 表示位置が変だし、2行目と4行目が表示されません。
 原因は、ある箇所で文字列を表示する関数を間違えて、コマンドを送る関数を使ってしまった事にありました。
 CCSCは特殊なコンパイラでintが8BITであり、文字列定数にポインタが使えません。
 これを補う為、引数がintの関数に”*****”と文字列を送るとコンパイラが繰り返し処理を展開します。
 これは便利ですが、引数がintの関数に文字列を送ってもエラーにならない事を意味します。
 つまり、液晶に変なコマンドを繰り返し、送ってしまった為、以後の動作が不安定になってしまったのです。

型変換
 今回、電圧を記録するのに実際の値の100倍の符号付き整数で保存しました。
 EEPROMはIICバスですので8ビットに分解して保存しなければなりません。
 読み取る時は8ビットを16ビットの符号付きに復元します。
 この過程で、よく間違いを発生します。
 Cの教科書で型変換の規則を読み直せば、どうという事は無いのですが、他の原因を疑うと長引きます。
 この例ではデバッガが有れば簡単に発見できると思います。


パソコン側ソフト

画面表示 印字サンプル
画面表示印字サンプル

 この装置は単独で使用でき、計測データは全点を読み出して液晶画面に表示可能です。
 しかし、8000点を読み出すのは容易ではありません。
 そこでパソコンにデータを送信し、グラフ表示し、ファイルとして保存出来るようにしました。

 ソフトはビジュアルC++6.0のSDKで作成しました。
 Windows98SE、Me、XP(SP2)で動作を確認しています。
 PC9821のWindows95ではファイルの読み書きやグラフ表示は出来るのですが、通信が出来ませんでした。

 表示画面はウインドウではなく、ダイアログです。
 VBのピクチャーボックスのような便利なコントロールが無いので、ダイアログにウインドウを貼り付けています。
 メインのダイアログは寸法が大きいのでリソースエディタでは綺麗にコントロールを配置出来ません。
 まず、大雑把に配置し、各コントロールのIDから、ハンドルを取得し、プログラムで位置と大きさを数値で 微調整しています。
 スタティックエディットのような簡単なものまで全て位置合わせするので、結構面倒です。
 XPのタイトルバーは98やMeのタイトルバーより、高さが高いのでダイアログの全体の寸法は若干、大きくなります。
 98やMeで作成した場合、丁度良い寸法で製作すると、XPで動作させた時、画面の下部が切れてしまいます。

 最初、ダイアログにメニューを付ける方法が分からず、悩みましたが、リソースのプロパティーシートで作成済みのメニュー の名称を選定するだけで付きました。
 メニューの下の境界線を引く方法が分からなかったので、ピクチャーコントロールの高さを1にしたもの を貼り付けました。

 まず、本体からRS232Cで計測パラメータと計測データを読み込みます。
 COMポートは起動時にはCOM1になっていますので(レジストリに書き込んでいません。)設定用のダイアログで COM1〜COM9の中から選択します。
 読み込み時間は8000件サンプリングした場合、20秒近く、かかります。
 この間、タイトルバーの表示が一時的に、「通信中」に変更されます。
 計測パラメータの一部はエディットボックスに表示したり、グラフを描くために使用します。
 数値を表示する一部のエディットコントロールには、起動時にメッセージを送って、フォントを変更しています。
 デフォルトのシステムフォントでは小数点が非常に見にくい為です。

 データの受信終了で、グラフが描かれます。
 表示モードは3種類を選択出来ます。
 例えば8000件の計測をしても、グラフの横軸は500ドットです。
 *重ねモードの場合、横軸1ドットに16点が重ね描きされ、場合により、線が太く見えます。
 *平均モードの場合、16点毎の平均が500ドット、描画されます。
 *拡大モードの場合、下部の頁送り釦が有効になり、500件×16頁が表示されます。

 表示レンジは2.5V〜25Vの4レンジあり、変更するとグラフが描き変わります。
 計測レンジと表示レンジは連動していません。(2CHある為です。)
 手動で、任意のレンジに変更します。
 当然ながら、10Vのデータを2.5Vのレンジで表示させるとスケールオーバーします。

 計測データはダイアログで数値表示することが可能です。
 ダイアログには−1000、−100、...+1、...+1000の8個の位置送り釦が付いています。
 任意の位置を比較的簡単に選定出来ます。

 読み込んだデータには、説明用のテキストを付加して保存出来ます。
 テキストはメニューからテキスト入力用のダイアログを出して書き込みます。

 ファイル→名前を付けて保存で、ファイル保存用のダイアログが出ます。
 ファイル名を入力すると拡張子.vldを付けて保存されます。
 照合用の文字列、説明用のテキスト、計測パラメータ、計測データの順に保存されます。
 テキスト形式ですのでエディタに送れば内容の確認は出来ますが、手で修正すると、次回に読み込んだ時、実行エラー が発生します。
 読み込みは拡張子が.vldのものだけが選別されます。
 拡張子が一致しても照合用の文字列が一致しなければエラーとなります。

 印刷は現在、表示されている表示モードや頁位置、表示レンジのグラフが印刷されます。
 問題は印字のスケールです。
 プリンタドライバより、フォントの大きさを読み出し、これを基準にしています。
 自分のプリンタでテストしただけなので、他のプリンタでグラフが大きくなったり、小さくなったりしないか心配です。
 印刷を実行すると、プリンタ固有のダイアログが出ますので、OK釦を押せば印刷が開始されます。

 サンプルは1000UFの電解コンデンサーを約10Vで充電し、220KΩの抵抗で放電した時の端子電圧を 計測したものです。
 電気回路の教科書に出ているような綺麗な曲線が描かれています。
 パソコン画面が、古いウインドウズクラシックですが、XPの画面は角が丸くて切り取りにくいので、 こちらを使いました。
 それに、我が家では、未だにWindows95,98SE、Me等のパソコンが現役です。
 仕事で使う場合、シンプルな古いOSで十分です。
 XPのパソコンは、ほぼインターネット専用になっています。

 電圧記録計その後

 2020年11月 追補 

 上記の記事は14年前にUPされました。
 最近はツールとして、あまり使用していませんでしたが久々に活躍の場がありました。
 その時、アップした記事を見たのですが回路図が載っていないことに気が付きました。
 私の使っている回路図エディタは回路図を画像ファイル(jpgやgif)として出力しません。
 回路図をUPする方法として最初の頃は印字した回路図をスキャナーで読み込んで画像ファイルを作成していました。
 この方法は汚い割にはファイル容量が大きいので、その後、画面コピーに変更しました。
 ただ、サイズの大きい回路はエディタの1画面に収まりません。
 エディタで画面サイズは縮小出来るのですが文字や細部が見えないと意味が無いので限度があります。
 対策として
1 回路図を書くとき出来るだけ詰めて書き、最後に寸法が最小になるように清書する。
2 ライブラリーを自作し、小型化する。(今回はCPU、その他)
3 システムフォントをMSゴシックに変更すると縮小したとき視認性が良くなる。
 これでも1画面に収まらない時は
4 回路をブロック分けして複数の図面にする。
 又は
5 エディタ画面を分割してコピーし、大きい白紙上でつなぎ合わせる。
 今回、上記の項目1〜項目4を使ってUPする回路図を作成しました。
 回路は14年前から変わっていませんが長い年月が経過しているので再現性に問題があるかもしれません。
 14年前は面倒で先送りしたと思われます。


回路図(入力部)

 回路図をクリックすると拡大表示されます。
 拡大図から本文に戻るにはブラウザの←戻る釦を使用してください。

入力回路図

 このブロックは入力電圧の分圧とレベルシフトを行います。
 入力電圧は±1.28Vに分圧されます。
 分圧はアナログマルチプレクサを使い、CPUで分圧比を切り換えます。
 CPU内蔵のAD変換器は負の電圧を計測出来ないので±1.28Vを0〜2.56Vにレベルシフトします。
 回路はゲイン1の差動増幅器ですが反転入力に常に−1.28Vが入力されているので1.28Vが常に加算されます。
 回路図中のVRは20回転の半固定です。


回路図(CPU周辺)

 回路図をクリックすると拡大表示されます。
 拡大図から本文に戻るにはブラウザの←戻る釦を使用してください。

CPU回路図

 CPUは当時、主流のPIC16F876を使いましたが、現在ならPIC18F等、もっと使い易いCPUがあり、 メモリやスタックの不足に悩まされる事も無いと思います。


ファームウエア

 PICを使い始めた頃、私はCCSCを使用していました。
 このファームウエアもCCSCで書かれています。
 その後、PIC18FをC18でコンパイルするようになりました。
 現在、私にはCCSCを使う環境がありません。
 ここでダウンロード出来るプロジェクトは、そのままでは使えませんが必要があればソースを他の環境に移植することに なります。
 全く同じ物ならコンパイル済みの実行ファイルを焼けば動作するはずです。
 ファームウエアのダウンロード


ウインドウズアプリ

 このプロジェクトはVC6のSDKで作成されています。
 現在、VC6は何台かあるXPのPCにインストールされていて、現在でもビルド可能です。
 ビルドされた実行ファイルはWindows98SE以降のPCで動作するはずです。
 Windows10pro64bitのPCで動作を確認しています。
 VC6はWindows10にはインストール出来ません。
 アプリのダウンロード

トップページ  「電子回路」のトップ