怎样用Arduino测试锂电池容量

电子说

1.3w人已加入

描述

 

下面是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);
   
   
   }


 }
锂电池
Arduino测试锂电池容量电路图

审核编辑 黄宇

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分