Ccpdyb单片机的智能手机充电器邓柳靖.docx
《Ccpdyb单片机的智能手机充电器邓柳靖.docx》由会员分享,可在线阅读,更多相关《Ccpdyb单片机的智能手机充电器邓柳靖.docx(15页珍藏版)》请在冰豆网上搜索。
![Ccpdyb单片机的智能手机充电器邓柳靖.docx](https://file1.bdocx.com/fileroot1/2023-1/3/3739250a-8a77-4e3e-a2bc-3ef6b5485b5f/3739250a-8a77-4e3e-a2bc-3ef6b5485b5f1.gif)
Ccpdyb单片机的智能手机充电器邓柳靖
秋风清,秋月明,落叶聚还散,寒鸦栖复惊。
单片机的智能手机充电器
姓名:
邓柳靖班级:
电信0702学号:
2
摘要
手机电池充电器对手机用户来说必不可少。
利用微电脑控制的智能手机充电器,可以对目前市面上所有的手机进行充电。
本文介绍了当前手机充电器的发展现状。
并在此基础上设计了面向所有手机的智能手机充电器。
选择简洁、高效的硬件,设计稳定可靠的软件,满足了对当前市售所有手机的充电的要求。
详细介绍了系统的硬件组成,包括采样电路、控制电路、电源、人机界面和单片机控制器,并对本充电器的核心器件—单片机进行了较详细的介绍。
重点阐述了系统的软件设计,首先对控制软件进行需求分析,总体目标是实现系统的可靠性、稳定性、安全性和经济性。
据此目标,用软件工程的方法设计了系统的总体框架。
以汇编语言为工具,采用面向对象的原理和技术,进行了详细设计和编码实现。
关键词:
手机充电器、智能、工单片机控制
ABSTRACT
Onemobiletelephonecellchargerisnecessarilytoamobiletelephoneuser.Theintelligentchargeronmicrocontrollercanchargeforallmobiletelephonecell.Thispaperintroducestheconitionofmobiletelephonecellcharger.Onthebasisofanalysistothecondition,thispaperbuildaintelligentchargerforallmobiletelephonecell.Tomeettherequirementofmobiletelephonecell,theauthorselectshighperformancehardwareanddesignsstableandreliablesoftware.Thehardwareofthesystemisintroduceddetailedlyincludingdataacquisitioncircuit,controlcircuit,powersupply,interfacebetweenthesystemandthepeople,microcontroller.Microcontroller,thecoreofthesystem,isintroducedmoredetaildely.Thesoftwaredesignismainlyexplained.Requirementofthesoftwaresystemhavebeenanalyzedfirstly.Thegeneralaimofthesoftwaresystemistorealizereliability,stability,safetyandecnomization.Thentheauthordesignsthewholeframeworkofthesystemwiththethinkingofsoftwareaccordingtotheobject-orientedprogrammingprinciplesandtechnologiestoimplementthedetaileddesignandcoding.
Keywords:
mobletelephonecellchargerintelligentbasedonPIC16F87740-PinFlash-Based8-BitCMOSMicrocontroller
课题背景
随着社会的快速发展,手机越来越成为人们生活中不可或缺的一部分。
如果某人的手机没法使用,将对他的工作、生活造成巨大影响,甚至损失。
而外出手机电池没电,又没有适用的手机电池充电器,是造成手机无法使用的最常见原因。
因此,作为流动人口大量集散的客运站、旅馆等场所,为现有市场上出售的各种类型的手机配备手机电池充电器,以方便旅客的工作和生活,提高这些服务场所的服务质量,以提高自身的竞争力,就成为迫切的问题。
而目前市场上出售的手机电池充电器,是只为单一手机电池充电的专用充电器,仅能对相应的一种手机充电,而且每部充电器的价格在人民币元左右,这就意味着,要配齐目前市场上出售的所有多种充电器,将是一笔较大的开支。
另外,利用现有的手机电池充电器,过于分散,进行有效管理的难度大,不适应公共场所的需要。
基于以上原因,市场呼唤一种能适用目前市场所售的所有手机,且物美价廉,便于管理的通用手机电池充电器。
本课题充分利用单片机的强大功能,进行了大量的软件设计,用软件完成了绝大部分任务辅以简单的外围电路,即实现了对目前市场上所售的所有手机进行充电,且便于集中管理的功能。
1.2国内外技术概况及其发展趋势
目前,市场上手机充电器种类繁多,但其中也有很多质量低劣的不合格产品。
在去年产品质量国家监督抽查结果中,将近的厂家生产的充电器不合格。
其主要问题出现在和交流电网电源的连接,电源端子骚扰电压,辐射骚扰场强和充电电压几个方面。
另外,一些产品的低温性能、额定容量、放电性能、安个保护性能等方面存在质量问题。
这些质量问题会影响到手机的正常使用,还会影响手机的使用寿命,严重时还可能伤害消费者。
现在市场上发现有一些假冒伪劣手机电池便携式充电器。
这些充电器由于价格非常低,携带方便,有许多手机用户更愿意使用这些充电器来对电池进行充电。
劣质充电器实际上就是一个没有安全保证的简易变压器,由于内部缺少保护电路等保证安全的零配件,因而重量较原装品轻很多。
但实际上,由于现在的手机电池多采用铿离子电池或镍氢电池作电芯,对充电器的电压、电流特性及安全保护有很高的要求。
这些假冒伪劣充电器由于设计简单,采用劣质材料,加工手段粗糙,对手机电池的性能和寿命有很大损害。
没有保护电路的充电器,由于不能保证充电时电流的稳定,因而会有烧坏电池甚至爆炸的危险。
目前手机充电器主要有旅行充电器,座式充电器和车载充电器。
充电方式,目前主要有种一一大电流的快速充电法和电压比较法,不同充电方式导致其充电效果不同。
由于采用大电流的快速充电法,所以在电池充满后如不及时停止会使电池发烫,过度的过充会严重损害电池的寿命。
一些低成本的充电器采用电压比较法,为了防止过充一般充电到山东人学硕学位论文就停止大电流快充,采用小电流涓流补充充电。
这时充电器上充满的指示灯会亮起,如果用户此时急于取下电池,无疑电池只充了,而且由于电压比较法存在离散性,所以所谓充电到也只是一个理论值,很难精确掌握,此时,对于镍福镍氢电池则造成电池的记忆效应,使电池的存量减小,损害电池的寿命。
而如果用户电池充电时间长一些,则易造成过充。
家生产的原装旅行充电器和座式充电器,设计上都采用越来越精密的保护电路或开关电路设计,对电池的充电起到了良好的保护作用。
车载充电器可以方便用户在汽车上为手机充电,一端插入点烟器,另一端连接手机,但不宜在汽车中长期充电,因为汽车中温度较高。
但这些充电器存在共同的缺点一通用性差,一个厂家出产的充电器只能适用于本厂家的手机电池,即又回到了所述的问题上。
当前,手机充电器的市场走向如下
1)目前,手机充电器可分为单槽形状和双槽型充电器,单槽形充电器正在受到双槽形的攻击。
双槽形充电器除了具有慢速充电、快速充电、放电及镍福、镍氢电池兼充的标准功能外,还有部分产品带有自动温度控制和电压控制,严防过充的新功能,因而消费者应将倾向于选择双槽型充电器。
2)随着手机种类的日益增多,各种充电器因机型不同,电源端口的大小也不相同,从而不能互换使用,给消费者带来了不便。
标准型充电器,是指可以连接所有手机底端电源插座端口的充电器。
而且,生产的手机的电源端口将统一为适用于标准充电器的规格。
这样,消费者将不必在每次换手机时同时购买新的充电器。
由此可见,充电器在从坐式向便携式、双槽式等方向发展的同时,也开始向标准化、通用化的方向发展。
3)手机充电器的待机耗电量的降低逐步成为充电器的设计过程中的一个重要环节。
相比于以前的充电器,今后生产的产品将会在各项功能完善的同时进一步降低本身的待机耗电量。
为了达到这一目标,可以设计一个判断适配器是否连接负荷手机的,当未连接负荷时,将适配器的直流输出方级电路切换到高阻抗电路上。
通过采取这一措施可以大幅减少待机时级电路的消耗电流可以达到数十“。
另外,还可以在输入交流方级电路中设置切换电路。
在未连接负荷时,通过开关切换电路来减少供应给直流输出方级电路的功率从而减少耗电量。
4)现在市场上的大部分充电器,只是针对铿电池或镍氢电池充电的,但是随着市场的发展,自动识别两种电池而进行相应的充电进程的充电器正在逐步占据主流。
可以自动分辨铿电池或镍氢电池的座充能“防止将铿电放电的错误动作”,如果在充铿电池时不小心按到了座充上的“放电钮”,好的座充可以辨识出来是铿电池,因此不会做放电动作差的座充则不管三七二十一地进行放电,这就会造成铿电池寿命的折损。
一.系统设计
1.设计目的
1)熟悉并掌握单片机嵌入式系统的开发流程和使用方法。
2)做到对电池充电过程的实时监测。
3)做出智能化的充电器。
我发现在给手机充电的时候,往往不能知道电池还有多长时间能充满,而且经常忘记是什么时候开始充电的,因此很容易造成过充或充电不足,从而影响手机电池的使用寿命,还有可能出现危险。
于是我便萌生了设计一种可显示时间的手机充电器的想法
2.功能简介
1)可和锂电池中的芯片通信,得到电池组的容量、电压、电流等参数。
2)用LED显示电池的剩余充电时间。
3)具备防过充功能,在电池电压达到一定值后减小充电电流,直至电池充满。
3.使用
能给各种锂离子电池充电并可以实时显示充电的剩余时间。
二.实验资源
1)硬件:
AVR开发板,Atmega16,LED七段数码管,电源
2)软件:
ICCAVR,AVRstudio
三.实验原理
1.电路原理图
注释:
左下为AD模块,Mega16的PA口接AD,同时输出PWM,PB3接PWM进行充电控制;右下方为以TLC431为主的稳压源,接单片机的AREF端口。
2.实验原理:
锂电池的充电过程分为预充、快充、涓流三个步骤,我们的原理概括的讲,就是在预充阶段通过对电池进行扫描测出电池的容量,和程序中的库进行对应从而得出充电所需时间;再经过快充电池电压达到一定高的值,为防止由于充电过快引起的电池实际电压不足,最后再加上一定时间的涓流充电。
在整个过程中通过LED来实时显示剩余充电时间。
四.数据采集
为使充电器能为不同容量的电池,需要做测试来采集大量的数据,反应电池在充电过程中电压、电流、时间之间的关系。
以下为几个具有代表性的测试图样:
1.容量为600mah的电池快充过程中I-t曲线
图中X轴为时间(min),Y轴为电流(mA)
图中X轴为时间(min),Y轴为电流(mA)
注:
图中X轴为时间(min),Y轴为电流(mA)。
2.容量为650mah电池预充阶段的U-t曲线。
图注:
X轴为时间(min),Y轴为电压(v)
3.容量为860mah的电池预充阶段U-t曲线。
图注:
X轴为时间(min),Y轴为电压(v)。
由以上各图可以看出,在一定时间段内电压和电流和时间很好的符合了线性关系。
4.电池容量和K值对应曲线(K值为充电电压每升高0.04v和对应时间之比)
五.软件设计流程图
六.结论
本设计阐述了智能手机的总体设计、硬件设计、计算机控制系统选型、软件开发。
首先,在对市场进行深入调查研究的基础上,分析得出智能手机充电器必须具备的基本特征。
硬件系统设计集控制工程、传感技术、电子技术和一体。
包括电源、控制电路、采样电路、手机充电接口、计算机控制系统。
按上款得出的设计要求进行设计,完成硬件设计。
本设计有效地解决了对不同手机进行在线充电的问题。
受时间和水平的限制,该设计还有很多不足之处,敬请多多指教批评。
参考文献:
1.C程序设计教程谭浩强著
2.单片机原理和使用设计蒋辉平周国雄编著
3.DSP技术的发展和使用(第二版)
程序:
#include
#include
#include"math.h"
//8.00000MHZ
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=4.846,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>=60.000)
{
X=(T/60);
Y=(T%60);
Z=((T-60)-(T%60))*60;
}
if(T<60.000)
{
X=0;
Y=((T*10)%10);
Z=((T-(T*10)%10)*60);
}
}
voidDelay_ms(n)
{
inti,j;
for(i=0;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口
ADCSRA=0XAE;//ADC允许,自动触发转换,中断允许,ADCclk=125kHz
SFIOR&=0X1F;
SFIOR|=0X60;//选择T/C0比较匹配中断触发
SEI();
Delay_ms(600000);
time[2]=X;time[1]=Y;time[0]=Z;//时间
time_to_disbuffer();
while
(1)
{
display();
if((m==1)||(V!
=V_Table[8])||(a>=0X15))//倒计时
{
if(PWMnum>123)
{
PWMnum=0;
time[0]--;
if(time[0]<0)
{
time[0]=59;
time[1]--;
if(time[1]==Min[30])
{
m=0;
}
if(time[1]<0)
{
time[1]=59;
time[2]--;
}
}
}
time_to_disbuffer();
}
if((m==0)&&(V==V_Table[12]))//中途停车,休息电池
{
display();
OCR0=0X00;
Delay_ms(10000);
time[0]=(time[0]-10);
if(time[0]<=0)
{
time[0]=time[0]+59;
time[1]=time[1]-1;
}
time_to_disbuffer();
OCR0=a;
m=1;
}
if(V==420||V==421)//电池充满,时间清零
{
display();
OCR0=0X15;
time[2]=0;
time[1]=0;
time[0]=0;
time_to_disbuffer();
Delay_ms(600000);
}
}
}