画像をクリックすると拡大表示されます。
拡大画像からはブラウザの「←戻る」ボタンで戻ってください。
デジタルカメラ、自作の機器等でニッケル水素単三電池は沢山、使用しています。
当然、充電器は必要になるので、最初、市販の充電器を使用していました。
これは電池1本〜4本を充電するもので、結構、使い易いものですが、若干、問題がありました。
4本同時に充電した時、充電完了は4本同時になります。
充電された4本の電池の電圧を測定すると1〜2本の電池が殆ど充電されていない場合があります。
その場合、充電未完の電池のみ、再度、充電していました。
それで、1本毎に停止のタイミングを判別出来る充電器が欲しいと思いました。
それから、自作の機器では電池6本を使用するものがあるので、電池1〜6本まで、同時に充電したいと思いました。
秋月で、電池6本〜8本を直列に充電する充電器のキットが販売されていたので、購入しました。
これを、6本直列に設定すれば6本同時に充電出来ます。
ところが、1本だけ充電しようとしても出来ません。
わかりきったことですが、6本直列でないと充電出来ないという事が、最大の弱点です。
6本、同時に充電する機会は少ないので、殆ど、活躍する機会が無くなりました。
これ以来、充電器の製作は、ずっとテーマであった訳ですが、6本並列に充電するのは、結構、面倒で、なかなか、手が
出ませんでした。
今回、やっと、着手することが出来ました。
充電器外観 | 充電器内部 | 回路図 |
電源スイッチは背面に付いています。
前面にはスタートスイッチと電源表示灯(赤)、充電表示灯(緑)が6個あります。
充電表示灯は充電中は点滅し、充電が完了すると連続点灯となります。
充電は電池毎に独立して行われ、電池が未実装の位置は充電表示灯は消えています。
RS232Cコネクタは使用しなくても構いません。
必要なら電源投入時に前回の充電状態をターミナルに送ることが出来ます。(たれ流し)
最初、自作のスイッチング電源を使用する予定でしたが、スペースと安全を考え、メーカー製の電源に
変更しました。
デンセイラムダの3.3V 5Aのものです。
今回は、電池6本を並列に充電するため、充電電圧が1.5V程度と低いので電源電圧を低くしないと電圧の利用効率
が悪くなります。
ただし、回路中のロス分もあり、FETのゲートON電圧の問題もあるので、3.3V程度は必要です。
充電電流は電池1本あたり約650mAです。
2000mAHの電池を4時間程度で充電する予定です。
欲を言えば、1A程度の充電電流で、2時間半程度で終了したいところですが、電源の容量、出力素子の放熱を考え、
650mA程度に抑えています。
6本分の充電電流と回路電流で4A必要ですが、少し余裕を見て3.3V 5Aのスイッチング電源を使っています。
冬になると気温が下がるので定電流回路の電流検出感度が下がり、650mAが700mA位になることも予想します。
CPUはPIC18LF4550を使用しています。
回路を簡単にするため、充電完了後のトリクル充電は省略しています。
前回の充電の状況をパソコンに送るため、RS232Cの送信部だけ実装しています。
ただし、電源電圧が3.3Vで、これをそのまま送信電圧としているので、ギリギリです。
最近はPIC18Fシリーズを使っていますが、PIC18Fは電源電圧が4.2V〜5.5Vであり、3.3Vでは
使えません。
在庫に16F877があり、こちらは3.3Vでも使えるのですが、18Fを使い始めてから、16Fを使う気にならなく
なりました。
それで、最初はCPU部分だけ5Vにする事を考えました。
回路中でポートが直接、FETのゲートに接続されず、間にトランジスタアレー(オープンコレクタ)が入っているのは
このときの名残です。
(CPUが5Vの時でも直結して問題無いかもしれませんが、出力ポートがOFF(5V)の時、
出力ポート→抵抗→トランジスタ2SA1015のコレクタ→ベース→0.9Ω→3.3V電源の経路で
僅かな電流が流れ出し、気持ち悪かったので、間にオープンコレクタを入れました。)
PICには低電圧で動作する18LFシリーズがありますが、扱っているところが、あまり、ありません。
たまたま、マイクロファンというところで、18LF4550を扱っていたので購入しました。
税込み単価840で、納得できる金額でした。
ただし、40PIN DIPの18LFは、これ1種類だけでした。
USB機能などは不要ですので、オーバースペックです。
PIC18LFは2Vから使用可能ですが、低電圧専用という訳ではありません。
低電圧では遅いですが、5Vで使用したときの動作速度は18Fと同じです。
18Fは18LFの使用範囲の一部に含まれてしまうので、全部LFになってくれると有難いですが。
コンパイラは期限切れのC18評価版を相変わらず使用していますが、特に問題無いようです。
拡張命令を使用したライブラリーは使用出来ませんが、標準命令を使ったライブラリーで十分?です。
使用した16LF4550はUSBモジュールが内蔵されている為、クロック発生回路が複雑で、コンフィギュレーション
の設定がわかりにくいです。
3,3V動作ですのでクロックを16MHzとしましたが、発振モードをPLL無しのHSにして、分周無しに設定すれば
良いと思います。
18Fと18LFでソフトウエアの違いはありませんが、低電圧ではCPUクロック周波数を下げなければならない事(USBを使う場合、USBクロックは低電圧でも同じ周波数)、ブラウンアウト電圧も低く設定しなければなりません。
従って、コンフィギュレーションが若干異なる場合があります。
ソフトウエアは以前、製作した006P充電器の考え方を流用したので、比較的、短時間で出来ました。
やはり、1秒間に1回、80mS程度、充電を止めて、電池電圧を計測しています。
ただし、電池1本毎の制御ブロックが並行して動作する形になりますので、結構、面倒になります。
ブロックの内部を細切れにして、ある動作を起動したら、結果を待たずに次のブロックに処理を渡し、次のループ
や、タイムアップ後のループで結果を確認します。
プロジェクトで、charger1.cからcharger6.cが電池1〜電池6までの制御ブロックに対応しています。
これらはエディタで丸々コピーして作成し、スタティックな変数や関数は全て同じ名称になっています。
しかし、他から参照されるものは固有の名称に修正しなければなりません。
この修正ミスが結構ありました。
今回、EEPROMの書き込みに関し、ブロック間の排他処理を忘れた為、初期電圧の書き込みが複数のブロック
から、同時に呼ばれ、正しい値が書き込めなかったという事がありました。
マルチタスク風にプログラムを作っても、EEPROMやAD変換器は1個しかないので、注意が必要です。
PIC18Fはメモリが多いので助かります。
使用メモリは現時点で6422ワード(13Kバイト弱)RAMは620バイトです。
PIC16Fを使った場合、メモリ効率が落ちるので、最大サイズの8Kワードに収まらない可能性があります。
RAMは完全にオーバーしています。
RAMの使用先は、ソフトウエアスタックに256バイト(システムが割り付け)
電池毎に直近の1分間隔の電圧値10個を保存しているので、合計120バイト。
ソフトウエアタイマは1個当たり、4バイトのバッファを使用しているので、16個で64バイト。
その他....で、結構、多くなってしまいました。
デバッグは沢山の変数を監視する必要があるので、ICD2が非常に役立ちました。
ただ、ICD2は実機でクロックが正常に供給されていないとデバッグ出来ません。
最初はプログラマモードで、まず、プログラムを書き込み、クロックが供給されるようにしてから、デバッガに切り換え
るようにしないと、まずいようです。
デバッグ作業そのものは容易ですが、充電電流を絞った為、充電完了までに時間が掛かるのが大変です。
今回も、初期電圧、最大電圧、終了電圧、充電時間の値をEEPROMに記録し、次回の電源投入時にターミナルに送る
ようにしたので、充電の状態が、よく判ります。
電源電圧3,3VをそのままRS232Cの送信電圧にしているので、心配しましたが、一応受信出来るようです。
パラメータの送信は、たれ流しですので、使用しなくても問題ありません。
画像はターミナルに送られた2300mAHの電池6本分のパラメータです。
充電には5時間近く掛かっています。
最大電圧は1.5Vを越えていますが、電池の種類により1.5V以下の場合もあり、かなりバラツキます。
一応、充電器として実用に耐えると思いますが、若干、問題点や検討事項があります。
まず、電池の特性のバラツキが大きいという事があります。
別メーカーの電池の充電特性
上の画像は別のメーカーの2300mAHの電池の充電結果です。
データが0の場所は電池が未実装で、2番と5番の位置に2本の電池が実装されています。
最初のデータに比べ、充電電圧が低く、充電時間も3時間40分少々で、短くなっています。
このソフトでは、充電完了の判断をしましたが、やや充電が浅い可能性があります。
そのまま、再充電
試しに、充電完了した電池を、そのまま、再充電してみました。
充電完了の判断に若干時間が掛かるので、即停止という訳にはいきませんが、21分という比較的短い時間で充電を
停止しています。
このソフトなりに、充電完了を確信しているようですが、電池の多様性に対応しきれていない可能性は、あります。
尚、充電停止は、電圧の絶対値では無く、電圧変化の傾向で判断しています。
よく、メーカー製の充電器で「当社製の電池以外は使用しないでください。」と表示しているのは、電池特性の多様性
に配慮しているためではないかと思われます。
さらに別の電池
今度は1500mAHと容量の少ない4本組の電池を充電してみました。
容量が少ない分、充電時間は少なく、約2時間半で完了しています。
比例配分で考えると、最初の6本組より充電が浅い気がしますが、これでも、充電直後の電圧は、市販の充電器で充電
したときより上がっています。
今回、電池6本を並列に充電するため、1本あたりの充電電流を650mA(×デューティー92%)に抑えました。
出来れば1A程度にして、充電時間を減らしたいところです。
電流が増えれば、もう少し、充電完了のタイミングも捕まえやすくなると思います。
ただし、電源の容量も増え、放熱も配慮が必要になってきます。
電池の本数を4本に減らせば、この電源のままで、1A/本の充電が可能になります。
時間があったら、電池4本で電流1Aのものも製作してみたいと思います。
今回の電源は市販の充電器程度には使えると思いますが、もう少しデータを取って、ソフトを改良したいと思います。
充電結果をターミナルに表示する機能は、かなり役立つと思います。