2023/01/24
2023/02/22 一部修正
2023/02/28 一部修正/追加
2023/03/06 追加
最近の二次電池の進歩は日進月歩である。Amazon で「ニッケル亜鉛二次電池(NiZn)」なるものを見かけた。
まだあまり知られていないと思える。宣伝文句を読む限り魅力的である。
家庭用の二次電池としてよく知られているものは三洋電気の Eneloop に代表されるニッケル水素二次電池(NiMH)であろう。なお、三洋電機は現在では Panasonic に合併吸収されており、Eneloop は Panasonic のブランドになっている。NiMH の電圧は 1.2V であり、一次電池で利用されているアルカリ電池の 1.5 V に比べて非力さを否めない。
一方では、携帯電子機器に使われるているリチウムイオン二次電池(LIB)が家庭の中にも入りつつある。しかし LIB は家庭用としては強力すぎる嫌いがある。僕の LIB は家族から隔離している。家族が下手に LIB を使って火災が発生する可能性を心配しているのである。ノートパソコンなどの製品の中で使われている LIB は安全性については考慮されているが、バッテリとして取り出して使った場合が問題である。
NiZn は、LIB ほどの危険性は無く、家庭用として普通に使うには十分な能力を備えているらしい。NiMH の欠点を補なってくれる。また内部抵抗も小さいらしく1、オモチャ程度の動力用としてならば十分使えそうである。
標準電圧は 1.6 V で、新品のアルカリ電池並である。
家庭の電子機器は新品のマンガン乾電池やアルカリ電池の電圧(1.6~1.7V)に耐える様に設計されているはずである。充電直後の NiZn の電圧は 1.88V なので、電子機器によっては、これに耐えられない可能性があるので注意しなくてはならない。その場合、少し放電する必要がある。テスターが必要になる2。
最大開路電圧
マンガン乾電池 1.73V アルカリマンガン電池 1.68V
https://kikakurui.com/c8/C8500-2017-01.html
https://ja.wikipedia.org/wiki/ニッケル・亜鉛電池
)には無造作にも 5Ω と書かれている。しかし内部抵抗の大小比較はバッテリ容量や電圧との関係で議論すべきではないか?
今回実験に使ったのは Amazon で見かけた
図1: 実験に使った NiZn 二次電池
である。
Amazon
https://www.amazon.co.jp/Melasta-充電式ニッケル亜鉛電池-2600mWh-Ni-Zn単三充電池-【500回以上循環使用可能】【1年保証】【ROHS、CE認証】/dp/B07X22Q9K9?th=1
の商品説明には以下のように書かれている。
Melastaニッケル亜鉛電池のメリットつまりバッテリ容量は 2600mAh であると説明されている。今回はこれについて調べる。
商品仕様
- 高電圧:NiZn充電電池の公称電圧は1.6V、通常1.25VのNiMH電池より遥かに高く、フル充電の場合、Ni-Zn電池の電圧が1.9V以上に至ります。
- 高能量密度:ニッケル亜鉛電池のエネルギー密度は、標準(NiMH / NiCd)充電式電池のエネルギー密度より33%高くなっています。
- 環境に優しい素材:ニッケル亜鉛は非毒性、非汚染性で、リサイクル可能、環境に優しい材料です。 まさに理想的な充電式電池です。
充電について
- 製品名:ニッケル亜鉛充電式単三電池
- 電圧:1.6V 容量:2600mWh
- サイズ:標準寸法 重量: 23.81g/個
- リサイクル寿命:500回
- 梱包明細:8本*Nizn単3充電式電池 + 1*単3 USB チャージャー
大切な知らせ:USB チャージャーを利用する時、フル充電するには約10時間かかります。(充電プラグ電流> 500 mAh)プラグ電流が500mAhを超える場合、バッテリーを10時間以上充電しないでください。
Ni-Zn充電池の管理について
- 標準充電方法:310mAで300分定電流充電(電圧制限1.9V);1.9Vの定電圧で90分間定電圧充電(カットオフ電流77.5mA)
- 急速充電方法:775mAで120分定電流充電(電圧制限1.9V);1.9Vの定電圧で90分間定電圧充電(カットオフ電流77.5mA)
- 電池を長く使用できるため、過放電で電池の電圧が1.3V以下に低下されないように
- 充電池を保管する場合、電池残量少なくとも50%が必要です。長時間保存する場合、3か月ごとに1回充電することをお勧めします。
- Ni-Zn充電池は清潔で乾燥した換気された部屋に保管してください。腐食性物質との接触を避けます。火や熱源から遠ざけてください。
10Ωの負荷抵抗の下で、経過時間に対する電圧の変化を図2に示す1。
図2: 10Ω の負荷抵抗の下での経過時間に対する電圧の変化
横軸は経過時間を秒で表している。電池を長く使用できるため、過放電で電池の電圧が1.3V以下に低下されないように
図3に放電電気容量に対する電圧の変化を示す。
図3: 放電電気容量に対する電圧の変化
図から読み取れる放電終止電圧 1.3V に対する放電電気容量は 1250mAh ほどである。従ってこのバッテリーの容量は 1250mAh 程度である。もっともここで行われた容量計算は厳密ではない。本当は定電流の下で測定する必要があるが、僕は定電流を保証する装置は持っていない。しかし、図から判断する限り、ここで行われた計算誤差はせいぜい10%程度だろうと思える。とても 2600mAh を正当化できないのである。
図4に放電エネルギーに対する電圧の変化を示す。
図4: 放電エネルギーに対する電圧の変化
異なる電圧のバッテリーの能力を比較する場合には電気容量ではなくエネルギーを問題にすべきである。放電終止電圧 1.3V に対しては 1950mWh 程である。
図4: SANYO Eneloop
この商品は現在売られていない。Eneloop のブランドは Panasonic に引き継がれている。現在ではもっと改善されているだろう。
電池には HR-3UTGB と書かれている。型番だと思う。
https://panasonic.jp/sanyo-battery/p-db/HR-3UTGB-4.html
によると、放電終止電圧 1.0V である。
図5: 10Ω の負荷抵抗の下での経過時間に対する電圧の変化
Eneloop は Melasta の NiZn に比べてかなり粘る。電圧の違いを考慮しても粘りは大きい。
図6: 放電電気容量に対する電圧の変化
この図から 1800mAh が読み取れる。商品説明の 1900mAh に近い。しかも実験したものは新品ではないことを考えると上等だと見做さなくてはならない1。
図7: 放電エネルギーに対する電圧の変化
2200mWh 程度か? Melasta の商品は 1950mWh 程度であったことを想起しよう。
筆者の手元には TOSHIBA の NiMH (単3) がある。これには 1300mAh と書かれている。
これは NiMH が販売された初期の製品である。NiMH はこれ以来どんどん改良されて、結局 SANYO がこの分野を制覇した。NiZn も NiMH と同様に、改良が重ねられて、放電エネルギーにおいても Eneloop に負けない商品が現れるであろう。企業側の努力に期待したい。
1674540295 7221022 1.417 1674540360 1023 1.408 1674540420 1024 1.403 1674540480 1025 1.398 1674540540 1026 1.393 1674540600 1027 1.388 ... 1674602876 2064 0.137 1674602936 2065 0.132 1674602996 2066 0.132 1674603056 2067 0.132第1フィールドは観測時刻(unix time)である。1674540295 が観測の開始時刻(単位は秒)を表している。
serlog.txt の解析とプロットには pyplot が使われている。
使用したプログラムを以下に示す。
プログラムを実行する環境に応じてフォントの設定を合わせる必要があるかも知れない。
# # plot1.py ver.0.9 # execute: python3 plot1.py # -Kenar- # import matplotlib import matplotlib.pyplot as plt matplotlib.rc('text', usetex=True) # change the default font plt.rcParams["font.family"] = "jsMath-cmmi10" plt.rcParams["font.size"] = "14" #plt.rcParams["font.style"] = "italic" # no effect plt.rcParams["font.style"] = "normal" def plot(x,y,**k): # draw circles at coordinate points (x,y) plt.scatter(x,y,s=2) # use 2 typographic points marker. typographic points are 1/72 in. if "title" in k: plt.title(k["title"]) plt.xlabel(k["xlabel"]) plt.ylabel("volt") plt.grid(True) if "save" in k: plt.savefig(k["save"]+".pdf") plt.show() title="NiMH" # your title in plot charts f = open("serlog.txt") line = f.readline() # discard the first line line = line.split(" ") time0=int(line[0]) # initial time lines = f.readlines() np = len(lines) # numbers of observed points x = [None]*np y = [None]*np for i in range(0,np): line = lines[i].split() x[i] = int(line[0])-time0 y[i] = float(line[2]) print(x[i],y[i]) print(np) plot(x,y,save="sec",title=title,xlabel="sec") R = 10 # registor 10 Ω dt = x[np-1]/np # time interval z = [None]*np sum = 0 # outflowed current in unit of mAh for i in range(0,np): sum += y[i]/R*dt z[i] = 1000*sum/3600 plot(z,y,save="mah",title=title,xlabel="mAh") z = [None]*np sum = 0 # energy consumption in unit of mWh for i in range(0,np): sum += y[i]**2/R*dt z[i] = 1000*sum/3600 plot(z,y,save="mwh",title=title,xlabel="mWh")
譜1: plot1.py (ver.0.9)
他のページ( http:raspi/index.html
)で扱った汎用的な plot.py と異なり、plot1.py は放電容量の計算に特化されている。
手元に湯浅の NiCd (単2 1800mAh) があったので試すことにした。これは20年程も昔の商品ではないかと思える。ニッケル水素が現れてから使わなくなった。僕の印象では NiCd 電池は非常にタフであるが、充電するまえに放電しなくてはならないので、使いにくい。そのためか、リチウムイオン電池が現れてから、急速に姿を消した。
図A1: 湯浅の NiCd (単2 1800mAh)
この電池には充電の方法が書かれている:
充電電流: 180mA 充電時間: 15時間これは NiCd 電池の標準的な充電方法である。電池容量の計算からは充電時間は10時間でよいのだが、15時間になっているのはエネルギーロスが考慮されているからだろう。0.9V になるまで放電し、あとはこれに従うことにした1。
図A2: 充電回路2
使われた電源は可変電圧なので、適当に調整して、180mA 付近に持っていく。そのときの電圧は 2.23V を示していた。あとは15時間放置する。安全のために、電池が熱を持っていないことを確認する。
しかし性能が回復しない。さらに放電/充電を行っても改善しない。次の図は3回目の放電/充電サイクルの結果を示す。
sec | mAh | mWh |
図A3: 放電/充電を2回繰り返し、3回目の充電の結果
この図を見るに、僕の古い NiCd 電池はダメになったと考えざるを得ない。
図A4は、2年程前に、僕の電動ドリルのバッテリ交換のために買ったものだ。方針が変わって使われていない。
今回、この能力を試すことにした。
図A4: NiCd
電圧を測ると、1.29V あった。立派である。安全圏(1.0V以上)に納まっている。特に NiCd を実験に選んだのは内部抵抗を促成してみたいからだ。
図A5は一度放電処理/再充電を行った後の測定結果である。
sec | mAh | mWh |
図A5: NiCd (公称 1500mAh) の結果
放出電気容量は 1200mAh 程度出ているのが判る。
NiCd 電池は内部抵抗が小さいので、モーターなど大きな電流を要する場面で使われる。この図では負荷抵抗は 10Ω であるが、5Ω にすると観測される容量はかなり小さくなるはずである1。しかし後に示すが、10Ω と 5Ω では観測される容量は殆ど違わない。
http://www.inedenki.co.jp/dcms_media/other/sanyo_nc.pdf
バッテリの容量テストにおいて過放電保護回路を入れることにした。僕のジャンクボックスを漁っていたら NEC K659 と書かれた FET が出てきた。調べると MOS-FET であり、今回の目的には少しオーバースペックなのであるが、これを使うことにした。
図A6: 過放電保護回路
Analog は Arduino のアナログ入力ピン、また Digital は Arduino のデジタル出力ピンである。Arduino の sketch でアナログ入力ピンの電圧が或る値より小さくなったらデジタル出力ピンが LOW になるようにしている。
R1 は pull-down 抵抗である。10KΩ 程度でよい1。(LEDと560Ω抵抗の直列接続の方が良かったかも2)
Bat はテストバッテリ、また K2 は負荷抵抗で 10Ω を採用している。
譜A1は図A6の回路のための sketch である3。電圧監視用のアナログピンをA1に、放電を停止するためのデジタルピンを DIGITAL 8 から採っている。停止電圧を 0.9V に設定されているが、目的に応じて再設定する必要がある。
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=1643
http:Arduino.html
譜3)では改善されている。
#define ledPin 13 #define dPin 8 /* digital pin to stop discharge */ #define aPin 1 /* analog pin to watch */ #define stopVolt 0.9 /* voltage to switch off the load resistor */ #define delaytime1 30000 /* delay time for ledPin LED HIGH */ #define delaytime0 30000 /* delay time for ledPin LED LOW */ /* * stopVolt 0.9 for NiCd */ void setup() { pinMode(ledPin, OUTPUT); // sets the digital pin as output Serial.begin(9600); pinMode(dPin, OUTPUT); // sets the digital dPin as output digitalWrite(dPin, HIGH); } void loop() { int i; int val; // variable to store the value read float volt; static int done = 0; static int count = 0; digitalWrite(ledPin, HIGH); count++; Serial.print(count,DEC); Serial.print(" "); val = analogRead(aPin); // read the input pin. the val is from 0 to 1023 volt = 5.0*val/1023; // convert to volt. 1.588 for val=325 Serial.print(volt, 3); if(done) Serial.print(" *"); Serial.println(""); if(volt < stopVolt){ digitalWrite(dPin, LOW); done = 1; } delay(delaytime1); digitalWrite(ledPin, LOW); delay(delaytime0); }
譜A1: 過放電防止 sketch の例
過放電防止回路を使って新しい NiCd (1500mAh) を再度試した1。10Ωの負荷抵抗、0.9V の停止条件で図A7のようになった。0.9Vになってからも電池の電圧は計測し続けている。
この結果を見ると、思わず唸ってしまう。二次電池の動作は複雑である。0.9Vで放電を停止すると、今度は電圧が上がって行く! 何故だろう? どこまで上がるのだろうか?
sec | mAh | mWh |
図A7: NiCd (公称 1500mAh) の放電. 負荷抵抗 10Ω, 放電終止電圧 0.9V
参考のために負荷抵抗や放電終止電圧に変更を加えた結果を、図A8 及び図A9に示す。
sec | mAh | mWh |
図A8: NiCd (公称 1500mAh) の放電. 負荷抵抗 5Ω, 放電終止電圧 0.9V
sec | mAh | mWh |
図A9: NiCd (公称 1500mAh) の放電. 負荷抵抗 10Ω, 放電終止電圧 1.1V
結局、次の根本的な疑問に行き着く:「何が電池の電圧を決めているのか?」
放電時の負極での反応式:
Cd + 2(OH)- → Cd(OH)2 + 2e-
放電時の正極での反応式1:
NiO(OH) + H2O + e- → Ni(OH)2 + (OH)-
https://ja.wikipedia.org/wiki/酸化ニッケル(III)
http://www.secondary-cell.com/nicd/reaction.html
https://www.baj.or.jp/battery/knowledge/structure.html
FET の一般的な解説は次の記事[1]がよくできている。専門的な解説は例えば記事[2]を見よ。K659 のデータシートは記事[3]にある。
[1] https://www.am.ics.keio.ac.jp/digital/mosfet.pdf
[2] https://www.marutsu.co.jp/pc/static/large_order/fet_3
[3] http://www.datasheet.jp/pdf/944913/K659.html
K659 は、昔買って使おうとしてそのままになっていた部品である。ゲート電圧に 5V 系の回路を想定しているところが時代を感じる。しかし、今回の目的には丁度よい。MOS-FET の図は自己流に書かれている。エッセンスが簡潔に表現されているので、僕はこの図の方が好きである。
或る継ぎ足し充電をした NiCd 電池の放電曲線を求めたら次のような奇妙な曲線になった。
sec | mAh | mWh |
図A10: NiCd (公称 1500mAh) の放電. 負荷抵抗 10Ω, 放電終止電圧 0.9V
この電池は図A9の放電実験のあとに継ぎ足し充電をしている。
このような奇妙な曲線を描いたのは継ぎ足し充電が原因ではないかと思われる。ちゃんと充電すれば綺麗な放電曲線が得られることが以下のように確認できる。
この電池は(図A10の放電実験によって)放電終止電圧まで放電されている。しかし時間の経過とともに1.2V弱にまで電圧が上昇している。これを充電するとどのような充電曲線を描くだろうか?
図A11: ケーブルに逆流防止ダイオードと過電流防止ヒューズを取り付けて使っている
電池と抵抗を直列に繋いで電源から電流を流す。抵抗を噛ませる理由は、安全性の向上の他に、充電に伴う電流の変動を抑えたいからである。
電源は定電圧を供給する。抵抗値を \(R\)、充電開始時の電池電圧を \(V_1\)、充電電流を \(I_1\) とする。充電終了時の電池電圧を \(V_2\)、充電電流を \(I_2\) とする。その下で(電源電圧に関わらず) \[ V_2 - V_1 = R \cdot (I_2 - I_1) \tag{A1} \] の関係が成立している。
図A11: NiCd (公称 1500mAh) の充電曲線。R=5Ω
図A11において電池の電圧を観察すると 1.52V から昇って行かない。この 1.52V はもちろん Arduino が捉えた電圧であるが、NiCd の両端をテスターで測定すると 1.45V になっていた1。図から察するにしっかりと充電できたのではないかと思われる。
sec | mAh | mWh |
図A12: NiCd (公称 1500mAh) の放電. 負荷抵抗 10Ω, 放電終止電圧 0.9V
今度は 1400mAh 近く出ている(図A7と比較せよ)。
なお満充電を判定する方法として、デルタピーク検知法がある。この方法は満充電に達した後で電池電圧が下降する現象を利用している。この電圧の下降は、満充電になっていると供給される電気エネルギーがすべて熱に変わり、それによって電池の温度が上昇し、電池電圧が下がることが原因である(下記の文献[1]の「充電特性」を見よ)。しかし、図A12のようにゆっくりと充電すると電池は殆ど熱を持たず電圧の下降は観測されない。僕は電池が発熱するような高速充電は大嫌いである。
次に式(A1)の抵抗 \(R\) として 10Ω を選択して充電曲線を調べる。図A11では 5Ω であったが、これを 10Ω にすることによって、定電流充電に近づく。定電流充電と言うのは、電流を流す強制力が強いと言うことでもある。従って十分な充電管理が要求される。結果を図A13に示す。右側には参考のために横軸を(時間ではなく)注入電気量にしている。従って満充電との関係が解りやすい。注入電気量は積分で計算しているために電源電圧が少々変動しても図は変わらないはずである。注入電気量は抵抗の両端の電圧の差分から計算している。
sec | mAh |
図A13: NiCd (公称 1500mAh) の充電曲線。R=10Ω
今度は僅かながらデルタピークが現れている。しかしこれを確実に捉えるアルゴリズムが思いつかない。
[1] カドニカ
http://www.inedenki.co.jp/dcms_media/other/sanyo_nc.pdf