- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DIY制作⼀个3.6V的锂电池容量检测仪
锂电池的种类繁多,⼿机、相机、数码等电⼦产品中随处可见。锂电池⼀般是标称电压为3.6V左右,电池容量更是五花
⼋门。电池容量是⼀个电池续航能⼒的重要参数,往往现在市场上买的锂电池(特别是⼀些⾼仿和⼭寨),都或多或少
有虚标容量的现象来得以⾼利润的欺诈。
现以18650电池为实例DIY制作⼀个3.6V锂电池容量检测仪,该检测仪不敢说⾮常准确,但是可以从客观事实上反应出
被测锂电池的放电能⼒和⼤致容量。
为简化电路,采⽤的LM317三端稳压组成恒流放电电路;LM358运放作为电压⽐较强来判断电池电压;通过
AT89C2051单⽚机定时器统计放电时间,并⾃动转换为容量通过数码管显⽰出来,并且可以通过开关来切换放电速
度,实现以每⼩时600mA或每⼩时240mA的不同速率放电。满⾜不同容量电池不同场合的使⽤。
⼀般来说充满电的锂电池电压为4.2V左右,当电池放电到3V时 (该放电值可以通过调节电位器适当调整)⾃动断开放
电电路,切换到充电电路。
在本制作中关⼼的是电池容量,故⽽未对充电电路作出过多电路考虑,只是⼀个简单的限流,建议对电池充电还是拿到
专门的充电器上充电为宜。
电路图仿真图
单⽚机源程序如下:
AT89C2051单⽚机,12M晶振。
lm317恒流放电注意散热,可以通过更改第1脚和第2脚之间的电阻来调节放电电流,公式为1.2V除以恒流值等于⼀⼆脚
之间的电阻。⽐如恒流1200ma放电,1.2V/1.2A=1欧;2400ma放电就是1.2V/2.4A=0.5欧。⼤电流放电对⼩容量电池有
损害,不建议使⽤。恒流值须配合程序使⽤,不能随意设置。
←左右滑动,查看代码→
#includereg51.h
#define uint unsigned int
unsigned char int_time;
unsigned int s,m,ma;
sbit led0=P3^2; //第1个数码管
sbit led1=P3^3; //第2个数码管
sbit led2=P3^4; //第3个数码管
sbit led3=P3^5; //第4个数码管
sbit jiance=P3^0; //j启动检测
sbit gz=P3^7; //⼯作指⽰灯
sbit qiehuan=P3^1; //放电电流切换
// sbit key=P3^6;
// sbit key=P3^6;
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极的段码
void delay(uint z) //延时程序
{
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
void interserve(void)interrupt 1 using 1 // 定时器中断
{
int_time++;
if(int_time==20)
{
int_time=0;
s++;
}
if(qiehuan==0) //以240ma电流放电
{
if(s==15) //计算⽅法是60/(240/60)=3
{
s=0;
ma++;
}
}
if(qiehuan==1) //以600ma电流放电
{
if(s==6) //计算⽅法是60/(600/60)=3
{
s=0;
ma++;
}
}
/* if(key==0)
{
delay(10);
if(key==0)
m++;
} */
// ma=m*2;
}
void display //显⽰程序
{
led0=led1=led2=led3=1;
P1=Tab[(ma%10000)/1000];
led0=0;
delay(2);
led0=led1=led2=led3=1;
P1=Tab[(ma%1000)/100];
led1=0;
delay(2);
led0=led1=led2=led3=1;
P1=Tab[(ma%100)/10];
led2=0;
delay(2);
led0=led1=led2=led3=1;
P1=Tab[ma%10];
led3=0;
delay(2);
led0=led1=led2=led3=1;
P1=Tab[(ma%100)/10];
文档评论(0)