蓄电池检测系统课程设计.docx
- 文档编号:30381447
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:17
- 大小:301.46KB
蓄电池检测系统课程设计.docx
《蓄电池检测系统课程设计.docx》由会员分享,可在线阅读,更多相关《蓄电池检测系统课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
蓄电池检测系统课程设计
物理与电子信息工程学院
WENZHOUUNIVERSITYCOLLEGEOFPHYSICS&ELECTRONICINFORMATIONENGINEERING
微机期末作业(论文)
题目:
蓄电池检测系统课程设计
专业:
班级:
姓名:
学号:
指导教师:
完成日期:
2010年6月24日
蓄电池检测系统课程设计
摘要:
蓄电池检控仪可在线检测每节电池的电压、动态放电电流和蓄电池温度,通过特定的数学模型,综合测量判定电池性能,并对失效电池予以显示、报警,并能对电池进行有效的活化维护。
装置具有远端通讯功能,可实现遥测、遥信、遥控的功能,以使电池得到及时维护,从而保证直流屏的安全运行,提高供电系统的可靠性和自动化程度。
关键字:
蓄电池检测
引言:
在电力,通讯等行业,蓄电池组在正常运行情况下处于热备用状态,由充电设备对其进行浮充电.在交流电完全失去的事故情况下,由蓄电池组承担直流系统的负荷.此时,蓄电池组的容量应满足事故停电时间内的放电容量;应计及事故初期直流电动机启动电流和其他冲击负荷电流;并应计及蓄电池组持续放电时间内迭加随机负荷电流.随着现代电力系统和通讯系统的容量的日益庞大,就对在这些领域里应用的蓄电池组的可靠性提出了更高的要求对其进行日常的检测和监控也就必不可少了.
正文:
蓄电池检测原理:
蓄电池内阻的测量是一个比较复杂的过程。
因为阀控式蓄电池在处于浮充状态时其内部包含着极化容抗、感抗、欧姆电阻,但是在放电使用时阀控式蓄电池内部的极化容抗和感抗会消失只有欧姆电阻存在,所以蓄电池容量检测就是在浮充状态时测量其欧姆内阻值的过程,也就是从极化容抗、感抗、阻抗中分离出欧姆电阻的过程。
目前对蓄电池容量进行检测的比较可靠的方法为交流阻抗法,它的原理是利用一个频率稳定的低幅值的交流信号加在阀控式蓄电池两端,通过测量流过蓄电池的电流、端电压和相位差的值来导出阻抗。
该方法由于不须对蓄电池放电,可以实现安全在线监测管理,且不会对蓄电池的性能造成影响,但也存在如下缺点:
(1)注入的交流信号频率和幅值固定,不能针对被测对象进行灵活的调整
(2)必须测量出交流信号的电压和电流,以及它们的相位差才能算出蓄电池的内阻,干扰因素多,方法复杂,误差大
(3)在线检测时交流信号由于被充电网络分流,故流过蓄电池的电流减小,使单体电池内阻的监测分辨率降低
蓄电池硬件结构设计:
单片机作为智能控制芯片,已经在中小型测控系统中得到广泛的应用,具有操作简便,控制精确,易于扩展等优点。
根据上述原理设计了一个蓄电池检测系统,其原理框图如下
图2中Rj是一个阻值为0.5Ω的高精密电阻,Rc是一个阻值为10Ω的普通电阻,C1、C2、C3、C4为耦合电容。
整个智能检测设备可以分为人机交互、低频信号发生电路、相敏检波电路、真有效值转换电路四个部分。
、
人机交互电路
人机交互界面由显示电路、键盘输入电路和单片机组成。
显示电路采用LED模块,键盘输入电路使用通常的矩阵式键盘。
工作时,单片机对键盘接口进行实时扫描,一旦发现有键按下,单片机就将按键值输出到LED显示屏。
LED显示管有两种接法可以按照设计实际需求进行选择。
这种方法实现了频率的在线控制,以及检测结果的实时输出。
利用protel画出原理图如下所示
充电及控制电路如下所示
电源电路如下所示
主单片机电路和电压采集电路
按键设定电路
软件程序如下
主函数:
//////////////////////////////////////////////////////////
#include
#defineucharunsignedchar/*定义无符号数*/
#defineuintunsignedint
#defineulongunsignedlong
////////////////////////////////////////////////////////
sbitin1=P3^3;//选择显示1#电池
sbitin2=P3^4;//选择显示2#电池
sbitin3=P3^5;//选择显示3#电池
sbitlight1=P1^4;//1#电池显示LED
sbitlight2=P1^5;//2#电池显示LED
sbitlight3=P1^6;//3#电池显示LED
sbitlight4=P1^7;//总电池充电显示LED
sbitled1=P2^4;//数码管第一位
sbitled2=P2^5;//数码管第2位
sbitled3=P2^6;//数码管第3位
sbitxiaoshu=P2^7;//小数点位
sbitcd4511_a=P2^0;//4511的A输入
sbitcd4511_b=P2^1;//4511的b输入
sbitcd4511_c=P2^2;//4511的c输入
sbitcd4511_d=P2^3;//4511的d输入
sbitall=P3^7;//总的充电输出
bitone=P3^0;//1#电池分流开关
sbittwo=P3^1;//2#电池分流开关
Sbithree=P3^2;//3#电池分流开关//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
sfrADC_CONTR=0xc5;//;A/D转换控制寄存器
sfrADC_DATA=0xc6;//A/D转换结果寄存器,高八位
sfrADC_LOW2=0xbe;//A/D转换结果寄存器,低两位
sfrP1M0=0x91;//P1口模式寄存器0
sfrP1M1=0x92;//P1口模式寄存器1
////////////////////////////////////////////
ucharADC_RESULT;//A/D转换结果
uintdy1;//1#蓄电池电压
uintdy2;//2#蓄电池电压
uintdy3;//3#蓄电池电压
uintdy_a;//1#输入点的电压
uintdy_b;//2#输入点的电压
uintdy_c;//3#输入点的电压
ucharxianshi=0;//显示那一个蓄电池的电压,默认显示1#
bitchongdian=0;//这个是充满电标志位,默认需要没有充满电////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
voiddelay(uintt)/*延时子程序*/
{uinti;while(t--)
{/*对于11.0592M时钟,约延时1ms*/
for(i=0;i<100;i++)
{}}}
/////////////////////////////////////////////
voidready_init()//开始初始化
{P2=0xff;
P1=P1|0xf0;//关闭所有指示灯//
P3=0x00;//关闭所有输出
all=0;//关闭总充电电路
one=0;//关闭分流
two=0;three=0;}
////////////////////////////////////////////////////////
voiddisplay_DC()//显示函数,显示电压值
{uchari;
uintj;
uchara,b,c,p;
p=xianshi;//显示选择
////////////////////////////
if(p==0)
{j=dy1;//
light1=0;//开1号对应LED
light2=1;//关其它的对应LED
light3=1;//}
elseif(p==1)
{j=dy2;
light1=1;//开1号对应LED
light2=0;//关其它的对应LED
light3=1;//}
else
{j=dy3;
light1=1;//开1号对应LED
light2=1;//关其它的对应LED
light3=0;//}
////////////////////////
a=j/100;//取百位
j=j%100;//
b=j/10;//取十位
c=j%10;//取个位
for(i=0;i<2;i++)
{P2=P2&0xf0;//先消除低位
P2=P2|a;//
led1=0;//打开显示
delay(10);//延时
led1=1;//关闭显示////////////////////
P2=P2&0xf0;//先消除低位
P2=P2|b;//
xiaoshu=1;//开启小数点
led2=0;//打开显示
delay(10);//延时
xiaoshu=0;//关闭小数点
led2=1;//关闭显示
////////////////////
P2=P2&0xf0;//先消除低位
P2=P2|c;//
led3=0;//打开显示
delay(10);//延时
led3=1;//关闭显示}}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//////////////////////////
voidadc_power_on(void)
{ADC_CONTR=ADC_CONTR|0x80;//开A/D转换电源
delay(12);}
///////////////////////////////////////////////
voidp10_open_drain(void)
{P1M0=0x07;//设置P1口的P1.0\P1.1\P1.2为开漏,以便进行A/D转换P1M1=0x07;}
///////////////////////////////////////////////*
voidp1_normal(void)
{P1M0=0x00;//P1口设置为普通I/O模式P1M0=0x00;}
*///////////////////////////////////////////
voidset_channel_p10(void)
{ADC_CONTR=0xe0;//设置P1.0为A/D转换通道}
//////////////////////////////////////////
voidset_channel_p11(void)
{ADC_CONTR=0xe1;//设置P1.1为A/D转换通道}
//////////////////////////////////////////
voidset_channel_p12(void)
{ADC_CONTR=0xe2;//设置P1.2为A/D转换通道}
//////////////////////////////////////////
//////////////////////////////////////////
///////////////////////////////
uintget_ad_result_DC(void)
{
ucharaa;
ucharbb;
uintjj;
ulonghh=0;
floatkk;
uchari;
for(i=0;i<200;i++)
{
aa=0x10;
ADC_CONTR=ADC_CONTR&0xef;//先将转换标志位置0ADC_CONTR=ADC_CONTR|0x08;//启动A/D转换,第五位为转换开始标志
while(aa!
=0)
{aa=ADC_CONTR&aa;}
display_DC();//delay
(1);//延时,这个是必须的
bb=ADC_DATA;//高八位//
cc=ADC_LOW2;//低两位
ADC_CONTR=ADC_CONTR&0xe7;//将启动位清除
jj=bb;
hh=hh+jj;}
jj=hh/200;//求平均值
kk=jj*0.9765625;//=5/256*100//结果放大一百倍倍,好得出每一位的数///4.92为单片机工作电压
jj=kk;
return(jj);//输出电压//
dy1=jj;
//////////////////////////////////}
//////////////////////////////////////////////////////////
voidcd_control()//充电控制
{
if((dy1>=65)&&(dy2>=65)&&(dy3>=65))
//如果三个电池的电压均到达6.5V,则需要断开充电总开关
{chongdian=1;//写已经充满电标志
one=0;//关闭
two=0;
three=0;//分闭各个分流}
else
{
if(dy1>=65)one=1;//如果电压达到6.5V,则开启分流
if(dy2>=65)two=1;//
if(dy3>=65)three=1;//}}
//////////////////////////////////
voidset_xianshi()
{if(in1==0)//如果有1#键按下
{
delay(100);//防抖动////
if(in1==0)
{
while(in1==0);//等按键松开
delay(100);
xianshi=0;//设置为1#显示}}
if(in2==0)//如果有1#键按下
{delay(100);//防抖动////
if(in2==0)
{while(in2==0);//等按键松开
delay(100);
xianshi=1;//设置为2#显示}}
if(in3==0)//如果有1#键按下{
delay(100);//防抖动////
if(in3==0)
{
while(in3==0);//等按键松开
delay(100);
xianshi=2;//设置为3#显示}}}
/////////////////////////////////////////////////////////////
voidmain(void)
{//
uintj;//
uchari;
ready_init();//各个端口初始化
adc_power_on();
delay(200);
ADC_CONTR=ADC_CONTR|0x60;;//设置转换速度为最快!
p10_open_drain();//设置P1.0\P1.1\P1.2为开漏
all=1;//开总充电电路
for(;;){
display_DC();//显示函数,显示电压值
set_xianshi();//设置显示函数
if(chongdian==0)//如果没有充满电
{
light4=0;//总充电指示灯开启
set_channel_p10();//设置P1.0为转换A/D通道
dy_a=get_ad_result_DC();//获取当前电压值display_DC();//显示函数,显示电压值
set_channel_p11();//设置P1.1为转换A/D通道
dy_b=get_ad_result_DC();//获取当前电压值display_DC();//显示函数,显示电压值
set_channel_p12();//设置P1.2为转换A/D通道
dy_c=get_ad_result_DC();//获取当前电压值
display_DC();//显示函数,显示电压值
dy3=dy_a-7;//已经放大10倍,减去二极管的电压
dy2=dy_b-dy_a-7;//2#电池电压
dy1=dy_c-dy_b-7;//3#电池电压
cd_control();//充电控制
}
else
{
light4=1;//总充电灯关闭
}
}
}
通过以上的软件和硬件的结合使其1.可应用于各种蓄电池组的性能监测,蓄电池组共220V,电池电压分别为2V、6V、12V三种类型。
系统可在线监测每节电池的电压,动态放电电流,(通过特定的数学模型,测量电池内阻及负载能力,静态测量电池容量,综合测量判定电池性能),可实现遥测、遥信、遥控功能,以使直流屏的电池得以及时的维护,保证直流屏的安全运行,提高供电系统的可靠性和自动化程度。
2、系统功能按模块划分,分别分为:
主机、采集模块、信号调理模块、放电模块,其中采集模块包括模拟量采集模块和开关量采集模块,信号调理模块包括:
电池电压调理模块、电流调理模块、温度信号调理模块。
结论:
通过对蓄电池检测系统的设计,让我学会了蓄电池的硬件及软件结构,由于自身能力不好,使得这次的设计存在着很多的问题,通过这次的课程设计,也让我更加熟悉和了解了protel的使用,刚开始由于系统是vista的问题,遇到了很多的麻烦,在XX查找及同学的帮助下一步步过来了。
参考文献:
【1】汪小云胡赤兵彭燕,蓄电池智能检测,中文核心期刊《微计算机信息》(测控自动化)2007年第23卷第1-1期
【2】李世杰蓄电池检测方法概叙技术论文2005年10月
【3】李红桥,向小民瞬间大电流放电法在蓄电池内阻检测中的应用分析通信电源技术2006年1月25日第23卷第1期
【4】王艳,郭文成,刘金辉,李树麟基于单片机的蓄电池电量检测系统仪器仪表用户2008年4月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓄电池 检测 系统 课程设计