電子工作46 – 1.2V単3ニッケル水素電池の充電器の試作

 

概要

   広く出回っている1.2Vの単3ニッケル水素電池(主としてeneloop 2000mAh)の充電器を製作してみることにした。

 

   製作時に考えていたことなど;

1) 1.2Vのニッケル水素電池をどうやって充電するのかもっと知りたい。

2)     なぜか市販の充電器では1本だけ充電できるものが少ない。

3)     差し当たって電池1本を2時間以内で急速充電出来るものを目指す。

4)     全体のコントロールに12F683を使う。勿論、プログラムはPICBasic Proで作成する。

5)     トリクル充電モード(2次電池の自然放電を防ぐ目的の細流充電:20mA位)を備えること。

6)     一定時間が経過したら強制的にプログラムを終了させる安全タイマを備えること。

7)     充電中の電池が異常過熱したら強制的にプログラムを終了させる温度センサを備えること。

 

回路

  下に回路図を示す。回路を簡素化するため電源に5V、2.3AのACアダプタを使い12F683の駆動と電池の充電の両方に使った。電池への電流供給をON/OFFする目的には電流量が大きいのでパワートタンジスタ2SC3422を用いた。電流量はトランジスタのベースに流す電流でコントロールされる。VR=500Wを調整することによって最大で1.7A位まで流せることが分かった。熱くなるのでヒートシンクが必要である。また、逆流防止のダイオードの容量(2A)も注意が必要である。トランジスタがONの充電時には12F683の電源ピンの電圧Vddが5.11Vより4.76Vに低下しプログラムが誤動作することが分かった。Vdd-GNDの間のコンデンサを0.1mFより0.67mFと大きくしたらVddが4.90Vに上昇し正常に戻った。温度センサは電池ケースの下に組み込んであり、その上に乗せた充電池が過熱するとその温度を検知して予め設定した温度(50°C)以上になると充電を強制終了させる。安全タイマは12F683のピン6に接続されたスイッチで3時間と5時間のいずれかが選択でき、充電中に選択した時間を超えるとプログラムは強制終了する。合計3つのLEDを使っていて電源ONで小さいLED(R)、充電用(トリクル充電を含め)の電流が流れていることを示すLED(R)、さらに12F683のピン2にはプログラムが終了していること(正常に充電終了、異常過熱強制終了、時間超過強制終了を含む)を示すLED(G)装着してある。

 

                            充電器と電源: 2個のスイッチの内右が電源SWで左が安全タイマの時間選択SW。下方黒いのがヒートシンク付きトランジスタ

電池ケースの底部に組込まれた温度センサ。電池側面との接触重要。

簡易放電器: 豆電球(2.5V 0.5A)とセメント抵抗(1W 5W)を電池に並列接続

フル充電のeneloop電池(2000mA)を約1時間半で放電(電球点灯停止)

 

 

充電のプロセス

1)     NiMH充電池を電池ケースに挿入する。その際電池側面が底部の温度センサにしっかり接触するようにする。

2)     安全タイマの時間選択スイッチを差し当たって3時間にする。 勿論5時間も選択できる。

3)     電源スイッチを入れる。電源ONを示す小さいLED(R)が点灯し、充電中を示すLED(R)が点灯する。後者は130秒間点灯し(充電中)10秒間消灯する(電池電圧測定中)サイクルを繰り返す。

4)     この繰り返しサイクル中に電池電圧が設定値1.47Vを超えたら、フル充電に達したとしてトリクル充電に移る。

5)     トリクル充電は約30分間続いて全充電プロセスを終了する。トリクル充電中は充電中を示すLED(R)が点滅する(点灯:消灯の比率=1:9位)。

6)     この様に全充電プロセスを正常に終了すると12F683のピン2に接続したLED(G)が点灯する。また何らかの理由で電池が異常過熱した場合や安全タイマの設定時間を超えた場合(充電ループから出られない場合)にもこのLED(G)が点灯する。

7)     充電電流の設定はVR=500Wで行う。充電中(130秒間)に電池のプラス側と電池ケースのプラス端子の間にテスターのプラスとマイナス端子をつなぎ電流を表示しながらVR=500Wのスクリューをドライバーで回して調整する。

 

結果など

1)     何とか2時間以内でフル充電できる充電器の製作に目処がたった。

2)     充電電流1.7A位に上げるためには電源が大切で少なくとも2A以上の容量が必要である。

3)     最初12V位のACアダプタを使い、三端子レギュレータで5V、3Aのものが入手できなかったので可変レギュレータLM350(3A)を使った。回路が複雑になり熱対策も大変と分かったので止め、代わりに容量の大きいACアダプタ(秋月JET 5V 2.3A ¥600)を使って、PICの駆動と充電を同じ電源で直接行わせることにした。誤動作の問題があったがコンデンサの容量を大きくして解決した。

4)     簡易放電器もなかなか便利である。メモリ効果を除くのに効果的とか。

5)     複数本の電池を充電する方法として、16Fxxxのポート数の多いPICを使い、1個の充電回路で複数個を1個ずつ順々に充電するのはどうだろう。同じロットの電池なら、例えば5時間前に充電したものと今充電し終わったものでは残量にほぼ差はないのでは。複数個の電池に同時に0.5A位の電流を流して充電するのも時間がかかるが良いかも知れない。終了時の電池電圧がほぼ同じになるのが良い。

6)     大容量のACアダプタは結構高いので1個で済めば助かる。もっとも最近ではIBMのノートパソコンなどの中古ACアダプタが秋葉原で安く大量に出回っている。例えば、12V、4Aのものが¥500とか。

7)     とにかくeneloopと付き合っている内に充電のことが少し分かってきた。吸蔵合金なんて聞くと意外とハイテクなんだなと感心する。

8)     基板を含めた材料費の合計は千円ちょっと。

 

プログラム

  今回のプログラムの特徴は以下のようである。

1)     充電される電池の状態に関係なく直ぐ充電が開始される(NiMH電池の場合継ぎ足し充電OKという記事も多い)。

2)     充電は130秒間充電し、10秒間停止し電池の電圧を測定するというサイクル。 If Vin>300 then Trickle '300=1.47Vでフル充電電圧を決定する。300を大きい値にすれば充電電圧も大きくなる。

3)     上記の繰り返し充電サイクル1回毎にカウントし、安全タイマの時間の基準に使っている。

4)     繰り返し充電サイクルから何らかの理由で抜け出せない場合でも、設定した安全タイマの時間に達したら強制的にプログラムの終りに飛ぶ。

5)     トリクリ充電は一律30分間で、終了するとプログラムの終りに飛ぶ。

6)     通常充電中やトリクリ充電中に電池が異常過熱した場合、検知して強制的にプログラムの終りに飛ぶ。

'********* プログラム ************

'EneloopAACahrger1.bas - 2010.9.3 Calculation of time consumed in charging

'12F683 with internal clock 4MHz

'Software PWM command used

'Software timer function installed: short 3 and long 5 hrs

'******** ピン接続 ************

'Pin 1: Vdd (5V)

'Pin 8: Vss (GND)

'Pin 2: GPIO.5: output - driving Timer LED

'Pin 4: GPIO.3: input - from Temp sensor

'Pin 5: GPIO.2: output - driving Transistor

'Pin 6: GPIO.1: input - safety timer selection SW (H or L)

'Pin 7: GPIO.0: input - reading Eneloop battery's voltage

'********* プログラム本体 ************

Define ADC_BITS 10     '10-bit ADC used   以下の10行はADCを使うための設定

Define ADC_CLOCK 3     'Internal clock used ?

Define ADC_SAMPLEUS 50 'Sample timing

ADCON0=%10000011 

'=131 (decimal) 'bit7=1(right justified),bit6=0(volt refer-Vdd),  ADCの基準電圧はVdd(5.0V)を使っている

'bit5-4=0(unimplemented),bit3-2=00(channel0-An0),

'bit1=1(starts right away),bit0=1(on operation)

ANSEL=%00010001   'sets Fosc/8 and GPIO.0 as ANS0 input

'bit7=0(unimplemented),bit6-4=001 (Fosc/8),

'bit3-2-1=0(Digital I/O pins),bit0=1(Analog input)

 

TRISIO=%011001

CMCON0=7         'turns off comparator function

BatteryVolt var GPIO.0

TimerSelectIN var GPIO.1

TransistorSW var GPIO.2

TempSensor var GPIO.3

ShifttoEnd var GPIO.5

Vin var word    'ADC storage

Timecount var word 'Counts time consumed in normal charging & trickling charging

TricTimecount var word 'Counts time consumed in trickle charging

 

Timecount=0

TricTimecount=0

ShifttoEnd=0

Charging:

TempSensor=0

TransistorSW=0

Adcin 0, Vin 'Read ADC ch-0 and save in Vin (range 0-1023) ここで電池の電圧を読込む

Pause 5

If Vin>300 then Trickle '300=1.47V  電池の電圧が1.47Vに達したらフル充電されたとしてトリクル充電(Trickle)に飛ぶ

High TransistorSW 'TrSW -> ON トランジスタがONになり充電開始

Pause 60000 '60 sec  合計130秒間充電される

Pause 60000 '60 sec

Pause 10000 '10 sec

Low TransistorSW 'TrSW -> OFF

Pause 10000  '10 sec  電池電圧安定化のため10秒間充電停止

If TempSensor=1 then Overheated 'Overheating check 電池の過熱チェック

Timecount=Timecount + 1 'ex. Timecount=10 means 140 sec x 10=1400 sec ここで充電サイクルを1回毎にカウントし加算している

If (TimerSelectIN=0) and (Timecount>77) then Jump  '77=3 hrs (3600x3/140=77) Short time mode 時間設定=0(3)と加算数>77なら3時間に達したのでプログラムの終りに飛ぶ

If (TimerSelectIN=1) and (Timecount>129) then Jump '129=5 hrs (3600x5/140=129) Long time mode 時間設定=1(5)と加算数>129なら5時間に達したのでプログラムの終りに飛ぶ

Goto Charging

 

Overheated:  ‘異常過熱なのでトランジスタがOFFにし充電中止しプログラムの終りに飛ぶ

TransistorSW=0 'TrSW -> OFF

Goto Jump

 

Trickle:    'Trickle current continues to flow for about 30 min regardless of TimerSelectIN modes. トリクル充電のプロセス

TransistorSW=1 'TransistorSW -> ON

PWM GPIO.2, 255, 50  'Duty ratio=20% - Short H-section 900 ms

PWM GPIO.2, 0, 200                  '- Long L-section  200 ms

If TempSensor=1 Then Goto Jump 'Overheating check while trickle charging 電池の過熱チェック

TricTimecount=TricTimecount + 1  'count the PWM cycles; one TricTimecount is about 1.20 sec ここでトリクル充電サイクルを1回毎にカウントし加算している

If TricTimecount>1500 then Jump '30min=1800sec 1800/1.2=1500 加算数>1500なら30分間経過したとしてプログラムの終りに飛ぶ

Goto Trickle

 

Jump: 以下ではトランジスタがOFFにしLED(G)を点灯させる

TransistorSW=0

ShifttoEnd=1

End

'******** プログラムの終了 ********

'Note:

   'melabs U2 Programmer's configurations 12F683:

   'FOSC – INTOSCIO; WDTE - Enable; Power-up Timer - Disable

   'MCLRpin – Input pin ; BODEN - Enable; Internal External Switch Over – Enable, Fail-Safe Clock Monitor – Enable, CD - Disable;Dtata EPPROM - Disable.

 

Menu Pageへ戻る

Topへ戻る