PIC16F88 を使った簡易電流・電圧計の製作 (2008/11/22-2009/01/05)

(Last update:09/02/06)


まずはブレッドボードで動作確認 10秒毎に電圧表示に切り替わる。
真中のバーで何%まで充電されたか
表示する。(赤=0%、緑=100%)
基板表 基板裏。
右上の黒いのが
電流検出用の微小抵抗
実運用時は MPPT充電基板(左)と連携させる。
MPPT基板にはリセットIC (4.6V) を搭載。
回路図

製作の経緯:

 18V・500mA の太陽電池を使い、MPPT 制御で 12V の鉛電池を充電する際の充電電流監視、鉛電池電圧を監視するために製作。


設計コンセプト等:

 リアルタイムで電流をバー表示するだけならレベルメーター用 IC でこと足りるが、間欠的にでも電池電圧はモニタしたいので PIC を使用することに。LED スタティック点灯のレベルメーター IC よりも PIC でダイナミック点灯した方が効率もいいし。

 回路は簡素化のため、電流検出抵抗に発生する電圧をオペアンプで増幅するオーソドックスな回路とする。なお PIC にはオペアンプ内蔵品もラインアップされているが、入力オフセット電圧が大きいため今回は使用しない(詳細は次項参照)。


工作のポイント:

 今回の設計ポイントはいかに微小電圧を精度良く検出するか、という点。

 電流を計測する場合、抵抗器に電流を流して抵抗器の両端に発生する電圧を計測するのが一番簡単。ただ抵抗器に電流を流せばそのぶん抵抗器内でエネルギーをロスするわけで、抵抗値はなるべく小さい方が望ましい。

 しかし抵抗値を小さくすればするほど微小電圧を検出せねばならなくなる。例えば今回使用した電流検出抵抗は 40mΩ なので、1A 電流を流しても 40mV しか電圧が発生せず、PIC で直接 A/D 変換するには微小すぎる。

 そこでオペアンプを使って PIC の A/D 変換リファレンス電圧付近まで電圧を増幅してやるわけだが、ここで問題となるのがオペアンプの入力オフセット電圧(無入力でも発生してしまう電圧。つまり誤差)。汎用単電源オペアンプ LM358 では入力オフセットが 3mV もあり、電圧検出抵抗が 40mΩ なら 100mA 弱も誤差が発生することになる。これじゃぁ使いモノにならん ^^;

 そこで今回は単電源かつ低入力電圧オフセットなオペアンプ NJM2119D を使用。入力オフセット電圧は 90μV と LM358 に比べて二桁も低く、電圧検出抵抗 40mΩ なら誤差は 2.5mA 程度にまで抑えられる。ただし NJM2119D は電源 5V 時の最大出力が 4V 程度(=フルスイングではない)なのでそのへんは PIC 側で吸収してやる方向で。ここらへんの細かい計算は回路図に記載しておいたのでご参考に。

 ちなみに回路図を見ると、RB6, RB7 に LED を繋いだ方がソフトが楽なのに、と思うかもしれない。ところがこれが今回の PIC の罠で、PIC16F88 ではタイマー1使用時、RB6, RB7 は TRISB レジスタの設定に関わらず強制的に入力ポートにされてしまうために使いたくても使えなかったのだ(汗)。この仕様はデータシートのタイマー1のセクションに書いてあるのだが、当然気づかず、だいぶ悩んだ(爆) 各ポートや TRISB レジスタ解説のところにも注意を書いておいてくれればいいのに。

 なお実運用にあたっては MPPT 充電基板から、電源、電池電圧、を取得する。また MPPT 基板も含めて電源を太陽電池で賄うため、太陽電池電圧が低下した場合に確実に動作が停止するよう、リセット信号を MPPT 基板から取ってくる。


ソフトウエア:

 消費電力のことも考え、LED はダイナミック点灯とする。
 PIC クロックは 8MHz。電流表示はポーリング処理でオペアンプからの出力を読み出してリアルタイムに表示する。
 一方、240ms 毎に割り込みを発生させ、割り込み処理内部で割り込み回数をカウントアップし、約10秒毎に電池電圧を測定して簡易表示(ダイナミック点灯)する。

プログラム(改変自由)
ソース (.asm) HEXファイル (.HEX)

問題点:

 この回路では電池のマイナスが回路グラウンドから「浮く」ことになるので配線には十分注意したい。電流を磁気で検出する電流センサー(こんなのこんなの)を使うとか、ハイサイドでも測定可能な電流検出 IC を使えばもっと応用が効くのだが・・・。

 なおダイナミック点灯させているとはいえ 20mA ほど電気を食うので、小出力太陽電池の充電電流監視には向きません(爆)


改良案:

 割り込み処理を潰せば汎用電流計になる。上記の通り、グラウンドが「浮く」ことさえ注意すればいろいろと使いまわしができるだろう。
 TMR1 を殺すとポートが3つ空くので、アイデア次第でいくらでも改良可能といったところか。


今回学んだこと:

 ・微小電圧の増幅と電流検出法
 ・LED のダイナミック点灯


 [電子工作のページへ]