毕业设计论文基于单片机控制的开关电源设计.docx
《毕业设计论文基于单片机控制的开关电源设计.docx》由会员分享,可在线阅读,更多相关《毕业设计论文基于单片机控制的开关电源设计.docx(35页珍藏版)》请在冰豆网上搜索。
![毕业设计论文基于单片机控制的开关电源设计.docx](https://file1.bdocx.com/fileroot1/2023-1/8/d522abef-e1dd-43b9-96f1-d3cf3cf9501d/d522abef-e1dd-43b9-96f1-d3cf3cf9501d1.gif)
毕业设计论文基于单片机控制的开关电源设计
基于单片机控制的开关电源设计
系部:
电子与通信工程系
姓名:
专业班级:
电信10D1
学号:
指导老师:
2012年9月21日
声明
本人所呈交的基于单片机控制的电源开关设计,是我在指导教师的指导和查阅相关著作下独立进行分析研究所取得的成果。
除文中已经注明引用的内容外,本论文不包含其他个人已经发表或撰写过的研究成果。
对本文的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。
作者签名:
日期:
【摘要】
开关电源体积小、效率高,被誉为高效节能电源,现己成为稳压电源的主导产品。
随着开关电源在计算机、通信、航空航天、仪器仪表及家用电器等方面的广泛应用,人们对其需求量日益增长,并且对电源的效率、体积、重量及可靠性等方面提出了更高的要求。
开关电源以其效率高、体积小、重量轻等优势在很多方面逐步取代了效率低、又笨又重的线性电源。
本文介绍了一款基于PWM技术的DC-DC开关稳压电源,用proteus仿真,输出纹波小,电压稳定可靠.
[关键词]:
开关电源,DC-DC,单片机,proteus
[Abstract]:
Thesmallsizeoftheswitchingpowersupply,highefficiency,knownasenergy-efficientpowersupply,hasnowbecometheleadingproductsoftheregulatedpowersupply.Withthewideapplicationofswitchingpowersuppliesincomputers,communications,aerospace,instrumentationandhouseholdappliances,peoplegrowingtheirdemandandhigherpowerefficiency,size,weight,andreliabilityrequirements.Switchingpowersupplyforitshighefficiency,smallsize,lightweightadvantagesinmanywaystograduallyreplacetheinefficient,clunky,heavylinearpower.
ThisarticledescribesaDC-DCswitchingpowersupplybasedonPWMtechnology,withproteussimulationoutputripplevoltageisstableandreliable.
[Keywords]:
switchingpowersupplies,DC-DC,single-chip,proteus
一、引言
本设计中采用的是脉宽调制型,Pwm技术是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。
让信号保持为数字形式可将噪声影响降到最小。
在脉宽调制中因为频率不变,所以无论是对电路中的磁性元件及晶体管的测试和设计都很方便,而且对射频干扰的抑制也变得比较容易。
利用单片机可以实现对开关电源的智能控制,实现智能化开关电源的制作。
高度集成、功能强大的开关型稳压电源代表着开关电源发展的主流方向,其技术也日驱成熟。
二、总体设计
本课题的主要思想是利用单片机可以实现对开关电源的智能控制,实现智能化开关电源的制作。
通过键盘预置电压,控制单片机进行脉宽调制,使输出电压在大范围内可调。
通过单片机软件控制,实现电源的智能保护,可以设定某个规定的电压或者电流,当超过该电压或者电流时,单片机关断开关管,电源不再工作,以便保护电源。
三、硬件设计
(一)硬件总体设计
本设计中拟采用脉宽调制型,先通过电压及功率变换设计出一个DC12V左右的电压源,再对12V的电压源,通过脉宽调制,实现步进0.1V、输出电流500mA、LCD显示的直流电压。
利用单片机可以实现对开关电源的智能控制,实现智能化开关电源的制作。
硬件总体框图如图3-1所示。
图3-1硬件总体框图
(二)AT89C52单片机概述
1.AT89C52单片机组成
图3-2AT89C52单片机组成结构图
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2.AT89C52单片机引脚结构
(1)89C51外部引脚图:
;
引脚说明:
(1)电源引脚
Vcc(40脚):
典型值+5V。
Vss(20脚):
接低电平。
(2)外部晶振
X1、X2分别与晶体两端相连接。
当采用外部时钟信号时,X2接振荡信号,X1接地。
(3)输入输出口引脚:
P0口:
I/O双向口。
作输入口时,应先软件置“1”。
P1口:
I/O双向口。
作输入口时,应先软件置“1”。
P2口:
I/O双向口。
作输入口时,应先软件置“1”。
P3口:
I/O双向口。
作输入口时,应先软件置“1”。
(4)控制引脚
RST(9引脚):
复位输入。
当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作、计时完成后,RST引脚输出96个晶振周期的高电平。
DISROT默认状态下,复位高电平有效。
1ALE/PROG(30引脚):
一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
2PSEN(29引脚):
外部程序存储信号时外部程序存储器选通信号。
当AT89C51RC从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次。
3EA/VPP(31引脚):
访问外部程序存储器控制信号,为使能从0000H到FFFFH的外部程序存储器读取指令,必须接END。
4XTAL1(19引脚):
振荡器反相放大器和内部时钟发生电路的输入端。
5XTAL2(18引脚):
振荡器反相放大器的输入端。
P1口作为LCD液晶屏的数据口,采用并口数据传输模式,P2口中的P2.0、P2.1、P2.2、作为控制信号输出口,分别接RS、R/W、E控制端,P2.3、P2.4分别接湿温度传感器的SCK和DATA,P2.5.、P2.6、P2.7接按键电路,P1口的P1.0、P1.1、P1.2分别接ADC0831的控制端,P1.4接报警的蜂鸣器。
3.AT89C52单片机的最小系统
图3-4AT89C52单片机组成结构图
(1)复位电路:
由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定。
典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位。
一般教科书推荐C 取10u,R取10K。
原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。
至于如何具体定量计算,可以参考电路分析相关书籍。
(2)晶振电路:
典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作),在本电路中,取12M。
(三)开关电源系统硬件设计
1.开关电源电路设计
图3-3开关电源电路
如图3-3可看出,DC50V输入,经Q1,Q2,Q3,进行交流变换,输入给储能性元件L1,当输出电压有波动时,调整管Q4调整输入电压,反过来抑制输出电压的波动。
2.电压反馈电路
电压反馈部分,当电压达到12V时,电流流经稳压二极管D4、三极管Q2B,E极、电阻R8使Q2导通,Q2导通将使三极管13003提前进入关断区,从而使输出电压稳定在12V左右。
3.限流电路
当R11上流经的电流到达一定值,在R11上将产生压降,当压降超过0.7V,三极管Q3饱和导通.Q3集电极电压为0,自激式振荡回路终止,输出电流变小,当R11上的电流小到足够的值,R11两端的电压低于0.7V,Q3又截止,自激振荡回路又继续振荡。
图
三、软件设计
(一)总的软件设计思想
系统的软件设计采用C语言,对单片机进行编程实现各项功能。
程序是采用keilc51软件编写的,可以使液晶显示屏对特定数字、英文字母以及汉字组成的句子进行显示,并通过按键对显示内容实现控制、转换等功能。
主程序主要起到一个导向和决策功能,决定液晶显示屏该显示什么内容,该如何显示。
液晶显示屏各种功能的实现主要通过调用具体的子程序。
(二)各部分的软件框图和程序
1.主程序设计
文字描述下例如(通电之后,系统开始工作,若是有键按下,就根据按键程序进行工作,并把结果显示到LCD液晶显示屏上,若是没有按键,定时时间一到,气体传感)
2.数据显示子程序
3.键盘扫描子程序
4.键值处理子程序流程图
四、程序清单
//*************************************************************************************************
//**
//*******************************头文件及宏定义***************************
//**
//*************************************************************************************************
#include
#include"includes.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineSCANPORTP2
#defineTIME1H80
#defineTIME1L80//定时器1溢出时间//
sbitwr=P3^1;
sbitrd=P3^0;
sbitP27=P2^7;
unsignedlongintshuchu=500;//默认的开机电压//
uintzhuhuandata;
unsignedlongintch=0;
uchari=0;//按键标记//
ucharuca_LineScan[3]={0xEF,0xDF,0xBF};
voidchuli();//函数定义//
uchargetkey();//函数定义//
//*************************************************************************************************
//**
//*********************************将键值累加并送显示*******************************
//**
//*************************************************************************************************
voidqiuhe(uchart)
{
if(i==1)
{
ch=t;
vShowOneChar(6,89,uca[t]);
}
if(i==2)
{
ch=ch*10+t;
vShowOneChar(6,103,uca[t]);
}
if(i==3)
{
ch=ch*10+t;
vShowOneChar(6,111,uca[t]);
}
}
//*************************************************************************************************
//**
//*********************************按键功能函数*******************************
//**
//*************************************************************************************************
voidkey_chuli(ucharx)
{
uchart;
switch(x)
{
case42:
t=0;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'0'
case31:
t=1;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'1'
case32:
t=2;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'2'
case33:
t=3;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'3'
case21:
t=4;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'4'
case22:
t=5;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'5'
case23:
t=6;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'6'
case11:
t=7;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'7'
case12:
t=8;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'8'
case13:
t=9;
i++;
qiuhe(t);
if(i==3)
{
vShowOneChin(2,49,uca_que);
vShowOneChin(2,64,uca_ding);
vShowOneChin(4,59,uca_wenhao);
}
break;//'9'
case41:
if(i==3)//'ok'
{
ch=ch*256/512;
shuchu=ch;
ch=0;
TH0=65200;
TL0=65200;
vShowOneChin(2,49,uca_0);
vShowOneChin(2,64,uca_0);
vShowOneChin(4,48,uca_SHU);
vShowOneChin(4,64,uca_CHU);
vShowOneChar(6,88,uca_HEN);
vShowOneChar(6,104,uca_HEN);
vShowOneChar(6,112,uca_HEN);
}
i=0;
break;
}
}
voidvTimer0(void)interrupt1using2
{
uchara,d;
unsignedlongintc=0;
uchardatatab[3];
a=(((zhuhuandata&0xf0)>>4)*100/16);
d=((zhuhuandata&0x0f)*100/256);
c=(a+d)*5.12;
tab[0]=c%10;
tab[1]=c/10%10;
tab[2]=c/100%10;
vShowOneChar(2,89,uca[tab[2]]);
vShowOneChar(2,103,uca[tab[1]]);
vShowOneChar(2,111,uca[tab[0]]);
TH0=TIME1H;
TL0=TIME1L;
}
voidmain(void)
{
SCANPORT=0x8F;
ClearLCD(0x00);
vShowOneChar(2,89,uca[5]);
vShowOneChar(2,96,uca_XIAOSHU);
vShowOneChar(2,103,uca[0]);
vShowOneChar(2,111,uca[0]);
vShowOneChar(2,120,uca_V);
vShowOneChin(0,0,uca_DANG);
vShowOneChin(0,16,uca_QIAN);
vShowOneChin(0,32,uca_GONG);
vShowOneChin(0,48,uca_ZUO);
vShowOneChin(0,64,uca_DIAN);
vShowOneChin(0,80,uca_YA);
vShowOneChin(0,96,uca_MAOHAO);
vShowOneChin(4,0,uca_QING);
vShowOneChin(4,16,uca_SHE);
vShowOneChin(4,32,uca_ZHI);
vShowOneChin(4,48,uca_SHU);
vShowOneChin(4,64,uca_CHU);
vShowOneChin(4,80,uca_DIAN);
vShowOneChin(4,96,uca_YA);
vShowOneChin(4,112,uca_MAOHAO);
vShowOneChar(6,96,uca_XIAOSHU);
vShowOneChar(6,88,uca_HEN);
vShowOneChar(6,104,uca_HEN);
vShowOneChar(6,113,uca_HEN);
vShowOneChar(6,119,uca_V);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TMOD=0X01;
TH0=TIME1H;
TL0=TIME1L;
ET0=1;//T/C0开中断
TR0=1;//开定时器0中断
IT0=1;//外中断方式:
下降沿。
EX0=1;//开启外部中断。
EA=1;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
while
(1)
{
wr=0;
wr=1;
chuli();
if(zhuhuandata<=shuchu)P27=0;
if(zhuhuandata>shuchu)P27=1;
if(zhuhuandata<=shuchu)P27=0;
}
}
voidchuli()
{
rd=0;
zhuhuandata=P0;
}
//*************************************************************************************************