15年前頃からLiPoを使い出して、雪風やモーターグライダーそして送受信機の電源として随分重宝しているが、種々買い増し続けたので40個近い大量で多種多様な在庫?となった。 中には膨れが目立ち使用不可と判断せざるを得ないものや、膨れてはいないが明らかに性能劣化しているものもある。 発火などの安全問題も懸念され、もはや先送りはできないと一年発起して大整理・断捨離を敢行した。
整理・断捨離するには、ときめき?では取捨選択できないので、残存電池性能などを調べなければならない。 一般には膨らみの有無に加えて電池の内部抵抗増加などで判断されるようだが、内部抵抗の変化だけでは不十分で、放電容量mAhの低下が鍵になると考えた。 そこで、以前手掛けたPICマイコン充放電機(下記の2021.5.12の記事参照)でまずは性能確認して分別を行おうとしたが、放電容量mAhの計測だけの場合には、手間がかかり過ぎるプログラムにしていたため、使い物にならない。
当時は、充放電電圧の変化を記録表示することを重視していたため、一旦EEROMに記録して、パソコンでデータを取り出し加工する方式としていたためで仕方がない。 そこで、今回は充放電電圧の変化記録は一切止めて、放電容量mAhと放電内部抵抗mΩのLCD表示のみとした。 充放電器の改修はPICのプログラムの変更だけで、充放電器はそのまま使えるので楽勝と思ったが、健康寿命間近のボケ始めた?頭でのプログラム開発は難航を極め、1ヶ月近くかかってしまった。
改修後の充放電器による、選別測定の様子は以下の写真のとおり。 目論見通り2日程度の短時間で選別作業を終えることができた。 苦心したプログラムの核心部分のソースリストについては、文末に掲載した。
測定の結果、放電容量mAhの範囲は規格mAhの40〜95%に分布し、放電内部抵抗mΩは50〜260mΩに分布していた。
そして、膨らみは全く無いのに規格mAhの50%しかないものや、規格mAhの95%の性能があるにも関わらず放電内部抵抗が200mΩにも達するなど、組み合わせは千差万別であった。これは、メーカーの相違や、使用年数、充放電回数などがバラバラなためと思われ、電池管理の難しさを示していると思われる。半年前に購入し、さほど充放電回数の少ない新品同様のLiPOの結果は、膨らみ無しで規格mAhの85〜88%そして放電内部抵抗60〜90mΩであった。さらに、一昨日ネット購入した新品LiPoについて測定したところ、規格mAhの96〜99%そして放電内部抵抗30〜70mΩであった。
放電内部抵抗については、ネットを調べると正常値5〜20mΩで50mΩ以上は廃棄相当とする考えもあるようであるが、測定方法によって一概に言えないように思われる。 文末に示す今回のプログラムでは、5秒間放電静定後電圧測定、その後放電停止1秒後の電圧測定で、いずれも電池端子電圧と電流を4端子測定している。放電停止後の電池端子電圧95%静定時間は300mSec程度なので、正常値5〜20mΩとする測定は、放電停止300mSec以内での測定なのではないかと想像する。
以上の種々の測定検討の結果、LiPo管理方法・廃棄判断は以下のとおりとすることとした。ただし、2600mAh以上の大容量LiPoは所有しておらず想定していないので、2600mAh以上についてはこの判断を適用できないと思う。
(1)明らかに大きな膨れのLiPoは廃棄する。
(2)規格mAhの50%以下のLiPoは廃棄する。
(3)放電内部抵抗100mΩ以上のLiPoの大電流使用については、
使用温度過大な場合は廃棄する。
次に、LiPoの廃棄方法であるが、塩水に放り込んで放電させて、解体廃棄するのが一般的な様であるが、これだと1週間近く放電に時間が掛ってスマートではない。 そこで、上記の充放電器の放電機能を用いて1セル毎に〜2C程度で3.3Vまで落とし、その後写真の50Ω放電器で0.1V近くまで落とすことにした。この放電器は、100Ω1/4W抵抗を2個並列に接続したもの3セットで、3セル同時に2〜5時間程度で完全放電できる。放電電流は〜70mA程度で、抵抗の発熱はほんのり温かい程度である。
それぞれの充放電器を2台用意したので、また3.3Vまでの放電は30分以下なので、20個近い廃棄対象のLiPoの完全放電は2日で完了した。 完全放電後の電圧を数時間後に測定すると、3.5Vに回復するが、再放電させるとすぐ0.5V以下になる。 また、70mA程度で完全放電させるとLiPoはかなり膨らむが、電気エネルギーはほとんど残っていないので、全く問題にはならない。
最後に、完全放電後のLiPoの解体は、5寸釘を金槌で叩き込み異常がないことを確認、その後ナイフとハサミで写真のようにバラバラに解体した。念の為に、バラバラに解体した極版集合体を水につけて、最終確認した。ものによっては若干帯電が残っているものがあり、若干発泡するものがあるが、発泡はすぐ収まった。 なお、完全放電後に3.5Vに電圧回復したLiPoを破壊してみたが、発火することなどはなく、容易に解体できた。 解体後は、自治体の廃棄基準に従って分別廃棄した。
これで、LiPoの断捨離整理が一段落したので、いよいよ1980年頃のF3Bグライダーの2.5m級名機キットSAGITTA(1990年に購入保管温存していたもの)の製作に着手する。 フライトは小生の健康寿命過ぎになり、ウインチ曳航はもはやしんどいので、モーターグライダーに設計変更し改造することとした。 わくわく・・・・?!
充放電機のPICプログラムは1180ラインと長いので、核心部分のAH積算と表示サブルーチン と放電内部抵抗測定モードの2つを以下に掲示する。 適用範囲は3530mAh以下である。
;-----------------------------------------------------------------------------------------------------------------
AHCALC ; AH積算と表示サブルーチン 3530mAhまで計測可能とする 4mSec Spend
;---------5Sec毎の計測集計-------3.53/5*255*3600/2/5=64800 < 65025=255*255 ------------
; 計算式: mAh=((AMP/2*5Secの総和)*2/51*1000mA)/3600(Sec/h)
; =SUM(AMP/2)*2*5*1000/51/3600=SUM(AMP/2)*100/51/36
; =SUM(AMP/2)*25/153/3 AMPは5Sec毎の充放電電流計測値=0~180(3.53A)
MOVF AMP,W ; W=AMP 0~255
MOVWF AA
CLRF AAH
MOVLW d'2'
MOVWF BB
CALL WARIZAN ; (AAH,AA)/BB=(ADBH,ADB)=AMP/2 0~127
MOVF ADB,W ; W=ADB=AMP/2
ADDWF AHL,1 ; AHL=AHL+AMP/2
BTFSC STATUS,C ; C=0 桁上がり発生無い時 次スキップ
INCF AHH,1 ; AHH=AHH+1 ;---電流積算(AHH,AHL)=(5秒毎のAMP/2の総和) 完了------
MOVF AHH,W
MOVWF AAH ; AAH=AHH
MOVF AHL,W
MOVWF AA ; AA=AHL
MOVLW d'152' ; 51*3=153 >> 152 整数処理による切捨て誤差軽減のために152とする
MOVWF BB
CALL WARIZAN ; (AAH,AA)/BB=(ADBH,ADB)
DECFSZ ADBH,W ; Z=0 W=ADBH-1=0 の時((AHH,AHL)/152>=256) next step skip
GOTO ADJUP
MOVF ADB,W
MOVWF AA
MOVLW d'25'
MOVWF BB
CALL KAKEZAN ; AA*BB=ADB*25=(AMBH,AMB)
MOVF AMB,W
MOVWF AA
MOVF AMBH,W
ADDLW d'25' ; W=25+AMBH 25*255=6375
MOVWF AAH ; AAH=25+AMBH
MOVLW d'3'
MOVWF BB
CALL WARIZAN ; (AAH,AA)/3=(ADBH,ADB)
INCF ADB,1
GOTO MAHDSP
ADJUP MOVF ADB,W
MOVWF AA
MOVLW d'25'
MOVWF BB
CALL KAKEZAN ; AA*BB=ADB*25=(AMBH,AMB)
MOVF AMB,W
MOVWF AA
MOVF AMBH,W
MOVWF AAH
MOVLW d'3'
MOVWF BB
CALL WARIZAN ; (AAH,AA)/3=(ADBH,ADB)
; INCF ADB,1
MAHDSP MOVF ADB,W
MOVWF CALIL ; (CALIL&CALIH)=SUM(AMP)/153*25/3 =mAh
MOVF ADBH,W
MOVWF CALIH ; mAhの2バイトの計算結果(CALIL&CALIH)を
CALL BITODC ; 十進数に変換 (CALIL&CALIH to DD1000,DD100,10,1)
MOVLW b'11001001' ; LCD 表示 カーソルを2行目の9文字目に
CALL COMND
MOVF DD1000, W
CALL WRITE
MOVF DD100, W
CALL WRITE ;*******mAhの4桁を表示*********************
MOVF DD10, W
CALL WRITE
MOVF DD1, W
CALL WRITE
MOVLW 0x6D ; m
CALL WRITE
MOVLW 0x41 ; A
CALL WRITE
MOVLW 0x68 ; h
CALL WRITE
CALL WAIT11
RETURN
;-----------------------------------------------------------
;--------------------------------------------------------------------------------
MOHMES ; 放電時の内部抵抗(mOhm)計測モード CASE=3 3.8V程度での計測が妥当
;---------------- ; 計算式 mOhm=(VOLT-VOLTE)/AMP*1000-100=(VOLT-VOLTE)*100/AMP*10-100
MOVLW b'10000000'
CALL COMND ; カーソルを1行目の1文字目に
MOVLW 0x44 ; D
CALL WRITE
MOVLW 0x6D ; m
CALL WRITE
MOVLW 0x4F ; O
CALL WRITE
MOVLW 0x68 ; h
CALL WRITE
MOVLW 0x6D ; m
CALL WRITE
CALL WAIT100m
CALL VMESR ; 無通電時電池電圧測定
CALL VDISPL ; 電池電圧表示
BCF PORTA,6 ; Charge FET Off
BSF PORTA,7 ; DisCharge FET On
CALL WAIT100m
CALL DAMPMES ; 放電電流測定表示
CALL WAIT1S
CALL WAIT1S
CALL WAIT1S
CALL WAIT1S
CALL WAIT1S ; 5秒放電静定
CALL VMESR ; 放電時電池電圧測定
MOVF VOLT,W ; VOLTEに記録
MOVWF VOLTE
CALL DAMPMES ; 放電電流測定表示
CALL VDISPL ; 電圧表示
BCF PORTA,7 ; DisCharge FET Off
CALL WAIT1S ; 放電停止後1秒静定時間(時定数300mSec以上)確保
CALL VMESR ; 放電停止1秒後の電池電圧測定
MOVF VOLTE,W
SUBWF VOLT,1 ; VOLT=VOLT-VOLTE
CALL VDISPL ; 放電時の電圧降下(VOLT-VOLTE)=DV表示
MOVF VOLT,W ; VOLT=AA
MOVWF AA
MOVLW d'100'
MOVWF BB
CALL KAKEZAN ; AA*BB=(VOLT-VOLTE)*100=(AMBH,AMB)
MOVF AMBH,W
MOVWF AAH
MOVF AMB,W
MOVWF AA
MOVF AMP,W
MOVWF BB
CALL WARIZAN ; (AAH,AA)/BB=(VOLT-VOLTE)*100/AMP=(ADBH,ADB)
MOVF ADB,W
MOVWF AA
MOVLW d'10'
MOVWF BB
CALL KAKEZAN ; AA*BB=(VOLTE-VOLT)*100/AMP*10=(AMBH,AMB)
MOVLW d'100' ; 電流測定用抵抗 100mOhm を差し引く
SUBWF AMB,1 ; AMB=AMB-100 =(VOLT-VOLTE)*100/AMP*5-100
BTFSC STATUS,C ; C=0 AMB<100 then next step skip
GOTO OHM
MOVLW d'1'
SUBWF AMBH,1 ; AMBH=AMBH-1
BTFSC STATUS,C ; C=0 AMBH=0<1 then next step skip
GOTO OHM1 ; AMBH>=1
CLRF AMB
GOTO OHM
OHM1 MOVLW d'255'
ADDWF AMB,1 ; AMB=256-1+(100-AMB)
INCF AMB ; AMB=256+(100-AMB)
OHM MOVF AMB,W
MOVWF CALIL
MOVF AMBH,W
MOVWF CALIH
CALL BITODC ; 十進数に変換 (CALIL&CALIH to DD1000,DD100,10,1)
MOVLW b'11001001' ; LCD 表示 カーソルを2行目の9文字目に
CALL COMND
MOVF DD100, W
CALL WRITE ;*******mOhm 3桁を表示*********************
MOVF DD10, W
CALL WRITE
MOVF DD1, W
CALL WRITE
MOVLW 0x6D ; m
CALL WRITE
MOVLW 0x4F ; O
CALL WRITE
MOVLW 0x68 ; h
CALL WRITE
MOVLW 0x6D ; m
CALL WRITE
OHMSTOP CALL WAIT1S
GOTO OHMSTOP
;--------------------------------------------------------------------------