电子说
下面是Arduino测试单节锂电池容量的程序代码:
/*本程序用于单节锂电池的放电电量计算,测量电池的容量。单位mAh。锂电池放电终止电压=2.75V。
* 该程序的参数只适合锂电池。可测量1个电池。本程序带自动开关,在锂电池放电终止电压=2.75V时程序自动断开电池。
* 从而保证锂电池过放电。可以参考电路图--锂电池容量测试--自动电路图。(本程序对应电路少占用Arduino一个引脚)。
* 发光二极管点亮时代表锂电池正在放电;发光二极管熄灭时代表锂电池放电结束(锂电池电压小于2.75V时)
*/
long timeh;//计算机运行时间,也是电池的放电时间。单位:小时。
float v1a;//电池1的电压值(0~1023)。(0~5V 转0~1023)。
float v1ak;//电池1的电压值(0~5v)。
float v1b;//MOS开关管源极对地电压(0~1023)。(0~5V 转0~1023)。
float v1bk;//MOS开关管源极对地电压(0~5v)。
float i1a;//电池1的放电电流。单位:mA
float i1ab;//电池1的放电电流的累加和。单位:mA
float i1ap;//是电池的放电电流的平均值
float r1 = 3.75;//放电电阻阻值。单位:欧姆。放电电压4.2V--2.75V,对应电流1120mA--733mA。
long cisu1;//电池的放电程序运行次数。
float rongliang1;//电池1的容量,单位:mA.小时。
float mwh1;//单次毫瓦时。
float mwh;//毫瓦时。
boolean kaiguan;//开关kaiguan定义为布尔函数。
void setup() {
Serial.begin(9600);
cisu1 = 0;
i1ab =0;
pinMode(4, OUTPUT);//引脚4定义为输出引脚。
digitalWrite(4,HIGH);//用于控制MOS管开关状态,高位MOS管导通,低位MOS管关闭,切断放电电路。
}
void loop() {
timeh = millis()/1000/60;//时间函数,单位:分钟。每次点击串口监视器,时间函数都从零开始。
kaiguan=digitalRead(4);//开关读取Pin4引脚的状态。高位为真。
v1a = analogRead(A0); //放电电池的电压(0~5v 转为0~1023)。
v1ak = v1a/1023*5;//放电电池电压。单位:伏特。
v1b = analogRead(A1); //MOS开关管的源极对地电压(0~1023)。(0~5v 转为0~1023)。
v1bk = v1b/1023*5;//MOS开关管的源极对地电压(0~5v).单位:伏特。经过实测MOS管源漏极之间的电压只有0.02v。
//Serial.println(v1ak);//if (!pushButton1 && !pushButton2)
//Serial.println(timeh);
if((v1ak >2.75)&&kaiguan) {//锂电池放电终止电压是2.75V.如果v1a >2.75v 并且Pin4引脚为高位,则条件成立。
i1a=(v1ak-v1bk)/r1*1000;//ila是电池的放电电流,单位mA,r是放电电阻,本程序r1=3.75欧姆。
cisu1 = cisu1+=1;
i1ab = i1ab+=i1a;
i1ap = i1ab/cisu1;//i1ap是电池的放电电流的平均值。
rongliang1 = i1ap*timeh/60;//电池容量, 单位:毫安.小时。
mwh1=v1ak*i1a/60;//单次毫瓦时。(每分钟累计一次)。
mwh=mwh+=mwh1;//累计毫瓦时,(每分钟累计一次)。
Serial.print("电池电压:");
Serial.print(v1ak);
//Serial.print(" ");
//Serial.print("次数:");
//Serial.print(cisu1);
Serial.print(" ");
Serial.print("电流:");
Serial.print(i1ap);
Serial.print(" ");
Serial.print("电量mAh: ");
Serial.print(rongliang1);
Serial.print(" ");
Serial.print("时间分钟:");
Serial.print(timeh);
Serial.print(" ");
Serial.print("毫瓦时mwh: ");
Serial.println(mwh);
delay(60000);//延迟1分钟。
} else {
digitalWrite(4,LOW);//锂电池电压低于2.75V时,MOS开关管关断,切断电池的放电回路,从而保证电池不过放电。
//同时发光二极管熄灭。锂电池放电放电结束
Serial.print("1号电池容量:单位 mAh: ");
Serial.print(rongliang1);
Serial.print(" ");
Serial.print("毫瓦时mwh: ");
Serial.println(mwh);
delay(60000);
}
}

全部0条评论
快来发表一下你的评论吧 !