该【智能手机充电器 】是由【phl19870121】上传分享,文档一共【12】页,该文档可以免费在线阅读,需要了解更多关于【智能手机充电器 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。AVR课程设计:智能手机充电器
组员:华诚、葛亮、贾广魁
系统设计
1)生疏并把握单片机嵌入式系统的开发流程和应用方法。
2)做到对电池充电过程的实时监测。
3)做出智能化的充电器。我发觉在给手机充电的时候,往往不能知道电池还有多长时间能布满,而且经常遗忘是什么时候开头充电的,因此很简洁造成过充或充电不足,从而影响手机电池的使用寿命,还有可能消灭危急。于是我便萌生了设计一种可显示时间的手机充电器的想法
1)可与锂电池中的芯片通信,得到电池组的容量、电压、电流等参数。
2)用LED显示电池的剩余充电时间。
3)具备防过充功能,在电池电压达到肯定值后减小充电电流,直至电池布满。
能给各种锂离子电池充电并可以实时显示充电的剩余时间。
1)硬件:AVR开发板,Atmega16,LED七段数码管,电源
2)软件:ICCAVR,AVRstudio
注释:左下为AD模块,Mega16的PA口接AD,同时输出PWM,PB3接PWM进行充电把握;右下方为以TLC431为主的稳压源,接单片机的AREF端口。
:
锂电池的充电过程分为预充、快充、涓流三个步骤,我们的原理概括的讲,就是在预充阶段通过对电池进行扫描测出电池的容量,与程序中的库进行对应从而得出充电所需时间;再经过快充电池电压达到肯定高的值,为防止由于充电过快引起的电池实际电压不足,最终再加上肯定时间的涓流充电。在整个过程中通过LED来实时显示剩余充电时间。
PWM波形生成
PWM把握充电
低电平AD转换
电压比较程序实时监控
快充
预充
涓流
电池布满,时间归零
时间计算程序
LED显示
为使充电器能为不同容量的电池,需要做测试来采集大量的数据,反应电池在充电过程中电压、电流、时间之间的关系。以下为几个具有代表性的测试图样:
-t曲线
图中X轴为时间(min),Y轴为电流(mA)
图中X轴为时间(min),Y轴为电流(mA)
注:图中X轴为时间(min),Y轴为电流(mA)。
-t曲线。
图注:X轴为时间(min),Y轴为电压(v)
-t曲线。
图注:X轴为时间(min),Y轴为电压(v)。
由以上各图可以看出,在肯定时间段内电压和电流与时间很好的符合了线性关系。
()
华诚:大部分程序的设计和调试,硬件的设计和搭建,数据采集。
葛亮:部分程序的设计,硬件的选购、电路板焊接,PPT制作。
贾广魁:提出项目,帮忙华诚做部分硬软件工作以及数据采集,论文、总结及网页的制作。
成本包括:ss8050,,,电阻10k、360R、1M、50R、100R、1K、1R,47uF、,2个电源共15元。。
#include<>
#include<>
#include""
//
unsignedlongled_7[10]={0x3f,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F};//七段数码显示数组
unsignedlongposition[6]={0xfe,0xfd,0xfb,0xf7,0x0f,0xdf};//六位数码管位选
unsignedlongMin[30]={1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,
31,33,35,37,39,41,43,45,47,49,51,53,55,57,59};//使能充电停止数组
unsignedlongk_value[60]={40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,//预充电压斜率数组
60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,};
unsignedlongV_Table[12]={380,381,390,391,400,401,410,411,415,416,419,420};//电压比较推断
signedchartime[3];//时间存储
unsignedchardis_buff[6];//时分秒六位分别存储
unsignedcharPWMnum,a=0x15,m=0,X,Y,Z;//溢出中断次数,OCR0值,if推断,时分秒,电压
unsignedlongK,n,Vref=,T,t,V;//预充斜率,延迟时间,参考电压,时间,
signedlongCap;//电池容量
#pragmainterrupt_handleradc_isr:iv_ADC
voidadc_isr()
{
unsignedlongADNum=0,adc_data;
unsignedcharVa;
ADNum=ADNum+1;//AD转换次数计数
if(ADNum>=98888)ADNum=110000;
adc_data=ADCH;
adc_data=adc_data*4;
if(ADNum==2)//初始电压值保存
{
Va=Vref*adc_data*100/1024;
}
V=Vref*adc_data*100/1024;//实时电压
if(V-Va==4)//斜率计算
{
K=(20000000/ADNum)%10;
}
}
voidA_value()//OCR0实际值
{
if(K==k_value[60])
a=250-K;
if(K!=k_value[60])
a=0;
}
voidCap_value()//容量计算值
{
unsignedlongAa=2000,P;
if(K==k_value[60])
{
P=K/Aa;
Cap=(-1)*log(P)*200;
}
if(K!=k_value[60])
{
Cap=0;
}
}
voidTime_Compu()//时间计算程序
{
t=3*OCR0;
T=Cap/t;
if(T>=)
{
X=(T/60);
Y=(T%60);
Z=((T-60)-(T%60))*60;
}
if(T<)
{
X=0;
Y=((T*10)%10);
Z=((T-(T*10)%10)*60);
}
}
voidDelay_ms(n)
{
inti,j;
for(i=0;i<n;i++)
{
for(j=0;j<8000;j++);
}
}
voiddisplay(void)
{
unsignedchari;
for(i=0;1<5;i++)
{
PORTC=0XFF;
PORTD=led_7[dis_buff[i]];
PORTC=position[i];
Delay_ms(1);
PORTC=0XFF;
}
}
#pragmainterrupt_handlertimer0_ovf_isr:iv_TIMER0_OVF
voidtimer0_ovf_isr(void)
{
PWMnum=PWMnum+1;
}
voidtime_to_disbuffer(void)
{
unsignedchari,j=0;
for(i=0;i<=2;i++)
{
dis_buff[j++]=time[i]%10;
dis_buff[j++]=time[i]/10;
}
}
voidmain(void)
{
//port_init
PORTB=0X00;
DDRB=0X08;//PB3PWM输出
PORTC=0X3F;//led输出
DDRC=0XFF;
PORTD=0X00;
DDRD=0XFF;
//timer0_init
TCCR0=0X00;
TCNT0=0X00;
OCR0=a;//OCR0实际值
TCCR0=0X6C;//快速PWM,256分频,比较匹配时OC0清零
TIMSK=0X03;//比较匹配中断,溢出中断
//adc_init
ADMUX=0X20;//外部引脚AREF,左对齐,PA0口
智能手机充电器 来自淘豆网m.daumloan.com转载请标明出处.