シールバッテリの放電実験

投稿日 2011/05/29

wp8_12_Jyuden_ki.jpg

シールバッテリの放電実験をやってみました。

 

バッテリは秋月で購入したWP8-12(LONG) 12V 8Ahです。

 

シールバッテリの充電で書いたように、
シールバッテリのおよその残量はVout x 70 - 800で計算できます。
この計算で行くと、
11.43V 0%
12.00V 40%
12.86V 100%
となります。これを信じれば12.86Vくらいに充電して12.00Vで使用を止めたら、容量の60%が使用可能で、寿命も長くなるのではないかと考えました。

 

容量の60%ということは8Ah x 0.6 = 4.8Ahですので、4.8Ahのバッテリとして扱うことになります。

 

今回は実験のためmbedで簡単な回路を組んでみました。

mbed_battery_checker_kairozu.jpg

あらかじめシールバッテリの充電その2で書いたように、フル充電しておきました。

 

負荷抵抗は手持ちの18Ω+10Ωの28Ω。放電電流は12 / 28 = 0.429 約430mA流します。
負荷抵抗は熱くなるので、シリコングリスでアルミの板に張り付けました。

 

バッテリの端子電圧を8.2KΩと2.7KΩで分圧しmbedのAnalogInで観測し係数を掛けて端子電圧を計算します。AnalogInはMAX3.3Vです。分圧は3V付近になるように抵抗を選びます。12E系でいくつか考えられますが、高抵抗を選ぶと不安定になるので、8.2KΩ/2.7KΩ位が適当のようです。

 

バッテリの端子電圧が12V以下になったとき、リレーをOFFしてバッテリを解放します。
ただし1回検出しただけで止めると不安定ですので、10回連続して12V以下を検出したら解放するようにしました。

 

室温はLM60でを観測します。

 

以上を1秒毎(ちょっと細かいですが)に繰り返し観測し、SDにCSV形式で記録します。
SDにはカウント(開始からの経過時間)、端子電圧、室温を記録します。
24時間計測したら止まるようになっています。

 

LCDの表示は、上段にバッテリの端子電圧、残量%、室温
下段にカウンタ(経過時間)、電圧ローカウンタ、分圧抵抗2.7KΩの両端電圧
を表示します。電圧ローカウンタとは、連続10回、12V以下になったかどうかを表示します。

 

室温と端子電圧の変化は、SDメモリに.csv形式で保存します。終了したらパソコンのエクセルで読み込んでグラフ化します。

wp8_12_430mA_houdentokusei.jpg

放電開始時の端子電圧:13.09V
放電電流:約430mA

 

12.0Vを下回った時点で放電終了としました。

 

放電終了時の端子電圧: 11.98V

 

放電開始から終了までの時間:約10時間

 

端子電圧が12V以下になった時点で放電終了ですので、容量の約60%を使用したことになります。

 

WP8-12は0.4A/20時間ですので、0.43A放電で60%使用すると約11時間使える計算になりますが、

 

今回は約10時間でした。ほぼ仕様通りと考えてよいと思います。

 

ちなみに11.98Vで放電を終了しましたが、24時間無負荷放置で12.04Vとなりました。


 

mbedは5900円もしますので、固定用途にはもったいないですね。そのうち8Pin PICで作ってみようかと思っています。


 

プログラムは以下のようになっています。

 

#include "mbed.h"
#include "TextLCD.h"
#include "SDFileSystem.h"

 

#define K 4.09 //Battery Out/AnalogIn
#define INTERVAL 1 //Sec

 

SDFileSystem sd(p5, p6, p7, p8, "sd" ); // mosi, miso, sclk, cs, name
DigitalOut Batt_sw(p15);
AnalogIn Batt_Sens(p16);
AnalogIn LM60(p17);
TextLCD lcd(p24, p26, p27, p28, p29, p30);
DigitalOut Batt_ok(LED1);
DigitalOut Batt_low(LED2);

 

Ticker sampling;

 

float batt_value, batt_volt, batt_life, temp;
int count, int_flag, low_count;
long count_stop;

 

void timer_int()
{
int_flag = 1;

temp = ((LM60.read() * 3.3) - 0.424) / 0.00625;

batt_value = (Batt_Sens.read() * 3.3) + 0.05;
batt_value = floor(batt_value * 100);
batt_value = batt_value / 100;
batt_volt = batt_value * K;
batt_life = 70.0 * batt_volt - 800;

if (batt_volt <= 12.0) { //12V or low?
if (++low_count > 10) { //Over 10 Counts

Batt_low = 1;
Batt_ok = 0;
return;

}
}
else {

Batt_ok = 1;
if (low_count > 0) low_count--;
count++;

}
}

 

int main() {

 

Batt_sw = 0;
Batt_ok = 0;
Batt_low = 0;

 

FILE *fp = fopen("/sd/wp8_12.csv", "w" );
if(fp == NULL) {

error("Could not open file for write\n" );

}

lcd.cls();
lcd.locate(0,0);
lcd.printf("Battery Checker" );
lcd.locate(0,1);
lcd.printf("430mA Load Test" );
wait(2.0);

lcd.cls();
count = 0;
count_stop = 86400; //24h
int_flag = 0;

low_count = 0;

fprintf(fp, "Count#,Temperature(c),Battery Out(v)\n" );

sampling.attach(&timer_int,INTERVAL); 
Batt_sw = 1; 
while(count <= count_stop)
{
if (int_flag == 1) {
lcd.locate(0,0);
lcd.printf("%5.2fv %2.0f%% %4.1fc", batt_volt, batt_life, temp);
lcd.locate(0,1);
lcd.printf("%5ds %2d %4.2fv", count, low_count, batt_value);

 

fprintf(fp,"%d,%4.1f,%6.3f\n", count, temp, batt_volt);
int_flag = 0;
if (Batt_ok == 0) goto __END; 
}
}
__END:

Batt_sw = 0;
fclose(fp); 

}





 

(JF1VRR)