微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 充电电池容量测试仪设计

充电电池容量测试仪设计

时间:10-22 来源:21IC 点击:

光管组合而成,分别作为8的7段字型部分,以及一位小数点。这里使用的是共阳极数码管,内部8只发光管的阳极是并连共同引出的,作为使能控制。

在实际电路中,L1就是第一只数码管的共阳极端。单片机的输出、输入接口数量都很有限,所以4位LED数码管驱动都是使用动态显示的方式。4只独立数码管LED的内部a、b、c、d、e、f、g、dp这8段发光管相对应的阴极都是并连的。统一由单片机P0口8位输出进行驱动。数码管要显示出数码还必须在共阳极端同时施加正电压才行。所以要让4位中某一数码管进行显示,只要在P0口输出字型码的同时,给这位数码管共阳极端加上正电压就行了,当然与此同时其他三位数码管的共阳极端要保持低电压,才不致显示出现混乱。数码管共阳极端驱动电流较大,所以采用了三极管进行控制。以第一只数码管为例,在P0端口输出字型码的同时,P37输出低电平,三极管T4导通,则共阳极端L1就得到高电平了,数字就会显示在第一只数码管上了。

程序设计是以单片机P37口作为计时控制端子,P37口输入低电平,计时程序启动,4只数码管显示时间。放电电路中按下启动按键,放电过程触发,VT1导通,电池端电压降落到放电电阻R2两端,A端对地为高电平,通过电阻R4迫使三极管VT3导通,P37口电平就被拉低了,单片机计时程序启动。电池电压降到终止电压以后,放电电路自动关闭,A端电压消失,VT3恢复截止状态,计时程序停止,数码管维持显示当前持续时间。

如要进入下次测试,首先按动单片机复位键,当前计时清零,等待下一次测试开始。

程序设计比较简单。它的大致流程如下:初始化,P3端口置位,设立常量a为时间计数器,依次对a的十进制数值各位进行提取,顺序输送到P0端口,P2端口中的P24、P25、P26、P27各位是依次作为四位数码管的使能控制端,通过P2端口的配合,就可以完成对各位数码管的驱动,时间的动态显示。程序进行中要不断地检测P3端口数值以决定计时状态:如果电池处于放电过程之中,三极管VT3导通,将迫使P37端口电压降到零,P3端口值就是127,单片机程序检测到这一结果,时间常量a将自动加1,指示期间放电时间已经延续1秒种了。这1秒钟的时间精确计算是比较麻烦的。计时程序是一个循环结构,每一周期耗用时间都是一致的。所以在使用keil软件调试过程中,通过对时间计数寄存器sec的观察计算,可以得出一次循环大致需要的时间。以此为据再通过适当改变延时子程序循环次数将常量a计时周期控制在1秒以下,剩余微小的时间差就可以通过插补空指令来校正了。计时精度只要控制在千分之一以下就可以了。在51单片机使用11.0592MHz晶体振荡器的情况下,指令周期大约1.085微秒,所以将计时精度控制在千分之一以下问题不大。误差总是会有的,只能通过精确计算来控制了,也可以通过更换更高频率的晶体振荡器提高单片机时钟频率的方法来进一步提高计时的精度。如果放电过程中,意外原因或者人为终止放电过程,P37端口变为高电平,程序循环依旧会进行下去,只是时间常量a停止自动加一,时间显示维持不变。

编译后,写入单片机内部,做好放电电路部分与51单片机的连接,便可投入使用。

电池接入后,按动轻触按键"启动",就会进入一次容量测试过程,期间电池取出接入,都不会影响到单片机计时。电池放电完毕,单片机数码管显示锁定,给出总放电持续时间,单位为秒。可以自行人工计算放电小时数。当然也是可以自行对程序进行改进,直接以小时分钟形式进行显示。只要单片机不断电,数码管将持续显示当前放电时长。如果要进入下次测量过程,只需要按动单片机复位键,数码管清零,单片机程序转入起点,你就可以进入新一次的容量测试过程了。

充电电池如果较长时间闲置,它的实际容量将受到影响,重新启用第一次能够释放的容量远远达不到标注容量,放电电压也很不平稳。至少要经过三次以上的充电放电循环,电池完全激活,容量才能恢复到应有的水平。充分考虑这种因素的影响,所以容量测试一般采取多次平均的方式,或者循环充放电三次以后放电持续时间为准,以此衡量电池容量才算是恰当。

#include "reg51.h"

char

code disp[]={40,235,50,162,225,164,36,234,32,160};

//字形码

void delay(unsigned int dt)

{ unsigned int j=0;

for(;dt>0;dt--)

{ for(j=0;j<125;j++)

{;}

}

}

void main()

{ int a,b,c,led1,led2,led3,led4;

P3=255;

a=0;

for(;;)

{b=a;

led1=b%10;

P2=239;

P0=disp[led1];

delay(6);

P2=255;

b=b/10;

led2=b%10;

P2=223;

P0=disp[led2];

delay(6);

P2=255;

b=b/10;

led3=b%10;

P2=191;

P0=disp[le

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top