以前、「電圧/電流計」としてUPしていた装置ですが、2010年8月に作り直したので更新します。
ハードウエア、ソフトウエアは作り直しましたが、ケースは流用したので見た目は変わりません。
作り直した理由は回路が気に入らなかった為です。(動作は問題ありませんでした。)
前回、最初1電源で設計しましたが、0V付近の電圧が計れないことが判り、急遽2電源に改造しました。
この為、回路がぐちゃぐちゃで、公開しているのが見苦しいと感じた為です。
今回は最初から 2電源で設計しました。
しかしながら、前回から比べて、素晴らしい回路になったとか、性能が上がったという訳ではありません。
やっと、普通の回路になったと言えます。
試料に加える電圧を少しずつ変化させて流れる電流を計測するような実験を行う事があります。
そのとき、写真の定電圧電源を使うのですが、パネルメーターが一つしか付いていません。
電圧、電流が同時に計れず、スイッチで切り替えて使うのですが、これが非常に煩わしく感じます。
そこで、電源に外付けする電圧/電流計を製作しました。
特に高精度の物を作った訳では無く、簡単で便利なものを目指しました。
測定電圧
0〜30V 1レンジ 分解能30mV
測定電流
0〜99.9mA 100〜999mA 1.00〜10.00A 3レンジ(オートレンジ)
又は、レンジ1固定 0〜100.0mA、レンジ2固定 0〜1000mA、レンジ3固定 0〜10.00A
電源
単3電池2本、 消費電流は電池電圧3Vの時20mA程度(スイッチング電源の為、電圧が下がると電流が増える。)
電圧2V以下で警告表示、1.5V程度まで動作する。
自己保持型押し釦スイッチ(トグル)、30分でオートパワーオフ
回路図をクリックすると拡大表示されます。
拡大図から本文に戻るにはブラウザの←戻る釦を使用してください。
CPUはPIC18F2420を使いました。
秋月で300円(2010年4月現在)で買えるので、同じ28PINの16F876より安く、しかも機能がアップしている
ので、買い得です。
電源は単3電池2本を使用し、HT7750Aで昇圧しています。
HT7750Aはリップルノイズが取りにくいので、最初TL499Aを使った のですが、起動時の突入電流が大きく、特定の
入力電圧範囲で立ち上がれない事があり、やむなくHT7750Aに変更しました。
入り切りは1個のプッシュスイッチで行います。
スイッチはモメンタリーですのでCPUで自己保持させます。
自己保持中に再度押すと自己保持を解除してオフします。
スイッチとは別にタイマーで30分通電後にオフします。
消費電流は電池電圧が3Vの時20mA程度ですので、5V回路の電流は10mA程度のはずです。
スイッチング電源ですので電池電圧が下がれば電流は増加します。
この程度の電流なら9Vの電池を使えば簡単ですが、今回は単三電池2本にこだわりました。
電圧計測は0V〜30Vを1レンジで計っているので、特に低電圧側で精度が落ちます。
この為、1.5V以下ではソフトウエアでゲイン補正をしています。
補正は、マルチメーターと比較しながら合わせ込んだもので、極めて大雑把です。
精度は3V〜30Vでは±2%以内に入っていますが、3V以下では若干、精度が落ちます。
電流計測は1レンジでは無理で、アナログスイッチで3レンジに切り換えています。
各レンジでは±1%程度のゲイン補正をプログラムで行っています。(合わせ込み)
ゲイン1000倍の時はOPアンプの入力オフセット電圧の影響を受けます。
OPA277のオフセット電圧は標準で10uV、最大で100uVと小さいのですが、1000倍に増幅されると
出力に10mV〜100mVとして現れます。
最大の100mVの時、3.3mAの誤差として計測されます。(100mAフルスケールで)
従ってオフセット調整用のVRで0調しますが、一旦、0調しても、オフセットはドリフトします。
現状では、時々、最大で10mV位の電圧が出力される事があり、この値で、0.3mAの誤差となります。
精度は全レンジで±2%以内ですが、小電流レンジではオフセットの誤差が加わります。
尚、この回路では負電圧を計測出来ないので、オフセットをプログラムで補正する事は出来ません。
ファームウエアのダウンロード (ZIP圧縮されています。)
開発環境はMPLAB Ver8.36/C18 Ver3.31(評価版です。)
いずれも、マイクロチップのサイトからダウンロードしたものです。
ソフトウエアは電圧と電流をA/D変換して表示するだけですので、簡単です。
興味のある人はダウンロードしてください。
プロジェクトファイルは含んでいないので、手持ちのC18でプロジェクトを新規作成し、ソースファイルとヘッダファイルを
組み込み、コンパイルしてください。
尚、自作のハードウエアに合わせ込んでゲイン補正しているので、この部分を修正する必要があります。
adconv.c
A/D変換ルーチンです。
組み込み関数は使っていません。
計測は電圧、電流、電池電圧の3CHです。
電流はゲインを3段階に変えて計測するので、合計5点の計測をしています。
リファレンス電圧を3.072Vに合わせ、1bit 3mVで計測します。
電圧はゲインが1/10倍ですので、分解能は30mVになります。
フルスケールは30Vです。
電流はゲインが10倍、100倍、1000倍の3段階に切り換えています。
電流検出抵抗の値が30mΩですので、分解能は10mA、1mA、0.1mAとなります。
フルスケールは10A、1000mA、100mAとなります。
cnf2420.c
PIC18F2420のコンフィギュレーションが書かれています。
デホルトのままで良いところは記述しなくても良いのですが、あえて全項目、記入しています。
PICの場合、コンパイラやアセンブラの予約語は統一されているのですが、コンフィギュレーションのキーワードは
チップ毎に表現が異なるようです。
マイクロチップにチップ毎のコンフィギュレーションを記したPDFファイルがあるので、これのダウンロードは
必須です。
ファイル名はC18_Config_Settings_****.PDF(****はバージョン)です。
2011年2月現在、チップ別のコンフィギュレーションの詳細説明はMPLABの最新版 v8.63 の
ヘルプファイルに組み込まれています。
今まで、コンフィギュレーションを説明していたPDFファイルは廃止されました。
項目の個々の内容はデータシート等で確認します。
display.c
A/D変換結果から電圧、電流、電池電圧の表示データを作成し、表示します。
自作回路に合わせたゲイン補正をしているので、ハードウエアを新規に作成する場合、修正が必要です。
lcdlib4l.c
液晶表示のサブルーチンです。
ストローブパルス(E)は最小パルス幅の規定があります。
CPUクロックの周波数を高くすると、最小値を満足しない可能性があるので、NOPを二つ入れてあります。
それから、PICの特徴として、プログラムメモリとデータメモリのアドレス空間が異なります。
従って、文字列を表示するとき、文字列がROMにあるのかRAMにあるのか分けて考える必要があります。
ROM空間とRAM空間ではポインターに互換性がありません。
今回はROM用の関数とRAM用の関数を2つ作りました。
一旦、RAMにコピーするという方法もあると思います。
ピンアサインはヘッダファイルで記述しています。
main.c
メインルーチンです。
電源釦をオンすることによりスタートします。
初期化、電源出力の自己保持をした後、メインループを回ります。
メインループでは電圧、電流の計測と表示を行います。
電流がオーバーフローした時は「 OFI 」と表示されます。
電圧はレンジ切り替えが無いので、電流計測の、どのレンジでも同じ値が表示されます。
30Vより少し大きな値でオーバーフローし、「 OFV 」と表示されます。
電池電圧が2V程度まで低下すると「 BVL 」の表示が出ます。
表示モードの切り替えはモード切替釦を押す事によりスキャンします。
オート(NOM)→ホールド(HLD)→小電流固定(HC1)→中電流固定(HC2)→大電流固定(HC3)
→オート(NOM)の順にスキャンします。
計測中に再度、電源釦を押すと電源が切れます。
又、通電開始から30分経過すると自動で電源が落ちます。
残り1分になるとモード表示が点滅します。
この30分タイマーはモードをスキャンすると0クリアされ、30分延長します。
timer.c
ソフトウエアタイマーのサービスルーチンです。
CCP割り込みを1mS間隔で発生させタイムベースとしています。
設定時間は1mS単位で、最大1分程度です。
タイマー1個につきRAM4バイトを消費します。
メモリの許す限り、何個でも使用できます。(予め登録しておきます。)
タイマー起動関数に引数として、タイマー番号とタイマー時間を与えて開始させ、他の処理に飛ばします。
タイムアウトはポーリングでチェックします。
global.h
複数のファイルから参照される変数、関数、型の宣言を行っています。
電圧/電流計
装置内部
動作試験中
計測値をホールド
電圧がオーバーフロー
電流がオーバーフロー
電流値を小電流固定に
電池電圧低下
2010年12月13日、回路図とソフトウエアを若干、修正しました。
変更内容は測定対象のノイズに敏感に反応しすぎる為、応答を鈍くしました。
基本的な動作は変わりません。
ソフトウエアはソース一式(C18コンパイラ用)とコンパイル済みのHexファイルです。
プロジェクトファイルは含んでいないので、再コンパイルしたい場合は、新規にプロジェクトを作成し、
ソースファイルを追加してください。