急速充電器
![]()
まだケースを作っていません。とても小さい基板です。
■製作のきっかけ
私は、NiCd電池の急速充電器を持ってなく、いつも丸1日かかる充電器で充電していました。
いざ電池を使おうと思ったときに限って、充電されていなかったりして、使えませんでした。
急速充電器のキットもあるのですが、6本から8本まとめて充電するようになっています。 急に電池が必要になったときには、大体2本か4本のことが多く、6本もいっぺんに急速充電する必要はほとんどありません。 まだ電気が残っている電池を充電すると、放電特性が悪くなってしまいます。
売っていないものは、作るしかありません。1本の電池でも急速充電ができ、しかも電池を痛めることなく、確実に充電できる充電器を製作することにしました。
■充電のしくみ
過充電を防止するためには、確実に充電終了を検知する必要があります。 電池の温度上昇を計る方式、充電末期の電圧低下を検知する方式(-ΔV方式)が一般的です。
温度上昇を検出して充電を停止する急速充電方式は、ノートパソコンのNiCdバッテリー、 コードレスドライバーのバッテリーなどによく採用されているようです。 電池に+,-の端子だけでなく、温度検出用のサーミスターから引き出した端子もあります。 電池の内部にサーミスターがあるため、温度検出が正確にできるようになっています。
電池を充電していくと、次第に電圧が上がっていき、満タンになる前に急激に電圧が上がります。 満タンになった後は、充電電流は熱に変わるため、電池が発熱します。 発熱によって電池自身の温度が上がるため、電圧が低下し始めます。
温度上昇を検知する方式は、温度センサーを内蔵した電池でないとうまく行きそうになかったので、-ΔV方式を採用することにしました。
電池を直列につないで充電すると、全ての電池の充電が終わるまで充電を続けなければなりません。 すでに充電が終わった電池にも充電電流が流れてしまうため、過充電になってしまうおそれがあります。
そこで、4本の電池を独立に充電することにしました。
充電終了を検出できなかった場合に備え、一定時間が経つと充電を停止するようにしました。また、充電中に電池を追加しても、正常に充電します。
■回路
ワンチップマイコンPIC16F84を採用しました。4本の電池の電圧を独立に検出する必要があります。
電圧の検出は、コンデンサに充電していき、その電圧と電池の電圧をコンパレータで比較することによって行っています。コンデンサの充電は100[kOhm]の抵抗を通して行い、放電は200[Ohm]の抵抗で行います。200[Ohm]の抵抗は、オープンドレインのRA4ポートに接続してあるので、コンデンサーを充電するときには電流が流れません。
定電流で充電できるよう、トランジスタで充電電流を制御しています。電池には常に1.2Aの充電電流が流れるようになっています。LEDは充電中を示すランプであるとともに、基準電圧も作っています。
とても単純な回路になりました。
■プログラム
プログラムソース まだテスト中ですが、とりあえず公開します。
パララックスのアセンブラ(PASMX)でアセンブルしました。
■失敗談
- 誤ってPICに15Vをかけてしまいました。即死でした。ショックでした。
- コンパレータからの出力がLレベルでも3.5Vになってしまっていました。Hレベルが4.5V程度なので、どうしてLレベルで0Vまで下がらないのか不思議でした。これでは、PICがコンパレータの出力がLレベルになったことを検出できません。ブレットボードでコンパレータを試してみても、Lレベルではきちんと0Vまで下がったのに、製作中の基板で試すとLレベルでも3.5Vまでしか下がりません。こんな簡単な回路なのに、どうして動作しないのだろうと悩みました。試しにPICを抜いて実験してみると、うまく動きました。 しばらく考えて、PICとコンパレータの出力が衝突していることがわかりました。コンパレータから入力するポートを入力ポートとして設定したら、正常に動作するようになりました。 以前もこのような失敗をしたことがあったのですが、原因がわかるまでに少し時間がかかりました。 でも、原因がわかったときは、とても嬉しいものです。
- 電池の電圧が低下するのを検知して、充電を停止するようにプログラムを作ればいいところまで行きました。前に計ったときの電圧と、今計ったときの電圧の大小を比較すればいいだけのことなのですが、どうしてもこれがうまくいきませんでした。電圧が上がってきているのに、間違って下がっていると判断し、充電を停止してしまうのです。PICのEEP-ROM(データ領域)に計った電圧を記録してみましたが、正確に測定できています。結局、条件判断部分が間違えていることがわかりました。以前にの電圧と今計った電圧の引き算をして、Borrowがあったかどうかを見ることによって大小を判断しようとしていたのですが、STATUSレジスタのC (Carry)ビットはBorrowの時にはLレベルになると言うことが問題でした。BorrowがあったときにHレベルになると思ってプログラムを組んでしまったのでした。PICのデータシートでSTATUSレジスターの説明をみて初めてわかりました。Borrowの上にきちんと反転のバーが付いていました。(注意書きまで付いていました) トラ技の説明ではBorrowの上にバーが付いていなかったので、間違えてしまいました。
- 1つの電池だけを充電して実験していたのですが、完成も間近になったので、残りの3つのトランジスタにも配線し、同時に4本の電池を充電できるようにしました。しかし、この時点でPICにプログラムを書き込んだり、読み出したりすることができなくなってしまいました。プログラムの読み書きに使用するRB6,RB7のポートに接続してある回路に問題があり、ISPができなくなってしまいました。
■注意点
電池の電圧を正確に検出しなければならないので、充電器の電源として、安定化電源を使用しなければなりません。私は、5V10Aのスイッチング電源を使用しています。
4本同時に充電した場合、5A程度の電流を食うので、余裕のある電源を用意しなければなりません。
急速充電に対応していない電池もあります。このような電池は充電しない方が安全です。
電圧を測定するために使用しているコンデンサーを電池を並列になるようにした方が、電源電圧の変動にも対応できると思います。コンデンサーの電圧と、電池の電圧を直接比較した方が正確に電池の電圧を測定できるでしょう。今は、(電源電圧)-(1Ohmの抵抗の電圧降下)-(トランジスタにかかる電圧)=(電池の電圧) ということで、電池の電圧を測っています。コンデンサーの電圧と、(1Ohmの抵抗の電圧降下)+(トランジスタにかかる電圧)を比較しています。今のままでも、問題が起こっていなく、直すのも面倒なのでそのまま使っています。コンデンサーの位置をかえると、プログラムの変更も必要になります。
■今後の計画
- アクリル板でケースを作る計画です。
- 電池をさらにいたわるため、放電機能も付けようかと考えています。電池の電圧を測る機能はあるので、簡単に実現できると思います
- 急速充電に対応していない電池も充電できるよう、低速充電モードも付けようと思います。充電電流をPWM制御しようと考えています。
- 充電終了の検知の信頼性を試すため、いくつかの種類の電池を電圧を測定しながら充電してみようと思います。
- 室温が高い場合、電池の温度変化、電圧変化が少なくなってしまうので、充電終了を正確に検出できるか心配です。夏の暑い部屋で実験してみようと思います。
(c) 1999 Ishijima Seiichiro