资源描述:
《电源监控-设计报告new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、电源监控—设计报告摘要:蓄电池作为备用电源,已在计算机网络、通信、电力等领域得到了广泛的应用。蓄电池的荷电量与整个供电系统的可靠性密切相关,蓄电池剩余电量越高,系统可靠性越高,否则反之。对于一些重要的用电领域,例如信息处理中心,如果能在既不消耗蓄电池的能量,又不影响用电设备正常工作的条件下,实现蓄电池剩余电量的在线监测,将有重要的实际意义。近几年随着IT产业的迅速发展,电池的重要性越来越突出,对剩余电量精确预测的需求也越来越迫切。本系统采用ATMEGA16作为系统的转换及显示核心。通过4位LED数码管达成对电源的实时
2、监控作用一、设计目的:1.运用ATMega16和其他一些硬件设备,设计出带有实时显示电池剩余电量、电压以及电量不足时自动报警等功能的电源监控系统2.通过设计实验进一步学习CodeVision的编译环境,并熟悉AVRStudio4.0平台的使用。3.在设计和实验中加深对I/O端口、中断、定时(计数)器、ADC转换及的学习和了解。4.在设计的过程中锻炼团队协作能力,培养提高责任感和动手实践能力。二、用途与功能:通过向ATMega16芯片中输入电源外电路的电压以及相位信号,通过一系列的查表比较和计算得到电源的剩余电量以及电
3、压信息,从而在LED显示器上显示出来,达到对电池的使用情况进行实时把握的目的。三、硬件设备:AVR单片机实验板,Mega16芯片,LG5641AH,电容、电阻及导线若干。ATMega16是实验教学中常见的AVR单片机,功能强大,本装置主要利用其中24个端口控制外围电路。LG5641AH是四位共阴七段数码管,我们用它进行电池剩余电量及电压的显示,显示范围为:电压0-30000mv,电量0-100%,保证了最大的显示精度。四、设计思路:总体来说,该设计要实现两个功能,一是测量功能,二是报警功能。下面对这两个功能分别阐述。
4、1.测量功能的实现剩余电量的测量原理:研究表明,电池的开路电压与荷电程度之间有较高的相关性(0.88左右),通过测量电池的开路电压可较准确地预测其剩余电量。依照上面所说,我们将电池的开路电压输入单片机,应用单片机的模/数转换功能,将其在单片机中以毫伏为单位储存,同时对照我们事先测好的电池在室温下的放电曲线(单节1.8v-2.2v),将其换算为当前电池的剩余电量,从而将其送缓冲区显示出来,电压与电量显示之间的切换靠键盘的控制来实现,当键盘按下时,电池的电压替换电量在LED显示器上显示。最初我们的思路是依靠电池的内阻来计
5、算电源的剩余电量,因为内阻与电池剩余电量的相关程度更大,但是考虑到完成对电池内阻的实时测量是一件很困难的事,需要用到4线法,故采用了较为简易的开路电压法。2报警功能的实现此功能的实现较为简单,即当电池电量不足10%,由单片机上一端口输出一高电平到蜂鸣器即可达到电量不足时报警的目的。五、程序说明:1.声明部分定义一些变量以及共阴LED显示器的初设置#include#includeFlashunsignedcharled_7[10]={0x3F,0x06,0x5B,0x4F,0x66
6、,0x6D,0x7D,0x07,0x7F,0x6F};flashunsignedcharposition[4]={0xFE,0xFD,0xBF,0x7F};unsignedchardis_buffy[4]={0,0,0,0},posit,dis_buffl[4]={0,0,0,0};bittime_2ms_ok;unsignedlongadc_q;2.主函数部分voidmain(void){intk=0,l=1;DDRA=0x7f;PORTA=0xff;DDRC=0xff;//LED显示控制I/O端口初始化PORTC
7、=0x00;DDRD.0=1;DDRD.1=1;DDRD.2=0;PORTD.2=1;DDRD.3=0;PORTD.3=1;DDRD.4=0;PORTD.4=1;//T/C0初始化TCCR0=0x0B;//内部时钟,64分频(4M/64=62.5KHz),CTC模式TCNT0=0x00;OCR0=0x7C;//OCR0=0x7C(124),(124+1)/62.5=2msTIMSK=0x02;//允许T/C0比较中断//ADC初始化ADMUX=0x47;//参考电源AVcc、ADC7单端输入SFIOR&=0x1F;S
8、FIOR
9、=0x60;//选择T/C0比较匹配中断为ADC触发源ADCSRA=0xAD;//ADC允许、自动触发转换、ADC转换中断允许、ADCclk=125Kz#asm("sei")//开放全局中断while(1){adc_trans(adc_q);if(adc_q<30)PORTD.0=0;elsePORTD.0=1;if(adc_q<0)