电子说
下面是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条评论
快来发表一下你的评论吧 !