收藏 分享(赏)

基于单片机控制的开关电源设计.doc

上传人:精品资料 文档编号:10849825 上传时间:2020-01-14 格式:DOC 页数:31 大小:628.50KB
下载 相关 举报
基于单片机控制的开关电源设计.doc_第1页
第1页 / 共31页
基于单片机控制的开关电源设计.doc_第2页
第2页 / 共31页
基于单片机控制的开关电源设计.doc_第3页
第3页 / 共31页
基于单片机控制的开关电源设计.doc_第4页
第4页 / 共31页
基于单片机控制的开关电源设计.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、基于单片机控制的开关电源设计系 部: 电子与通信工程系 姓 名: 龚倩倩 专业班级: 电信 10D1 学 号: 102222105 指导老师: 邵雯 2012 年 9 月 21 日声 明本人所呈交的基于单片机控制的电源开关设计,是我在指导教师的指导和查阅相关著作下独立进行分析研究所取得的成果。除文中已经注明引用的内容外,本论文不包含其他个人已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。作者签名: 日 期: 【摘要】开关电源体积小、效率高,被誉为高效节能电源,现己成为稳压电源的主导产品。随着开关电源在计算机、通信、航空航天、仪器仪表及家用电器

2、等方面的广泛应用, 人们对其需求量日益增长 , 并且对电源的效率、体积、重量及可靠性等方面提出了更高的要求。开关电源以其效率高、体积小、重量轻等优势在很多方面逐步取代了效率低、又笨又重的线性电源。本文介绍了一款基于 PWM 技术的 DC-DC 开关稳压电源 ,用 proteus 仿真,输出纹波小,电压稳定可靠.关键词 :开关电源, DC-DC,单片机,proteusAbstract: The small size of the switching power supply, high efficiency, known as energy-efficient power supply, has

3、 now become the leading products of the regulated power supply.With the wide application of switching power supplies in computers, communications, aerospace, instrumentation and household appliances, people growing their demand and higher power efficiency, size, weight, and reliabilityrequirements.

4、Switching power supply for its high efficiency, small size, light weight advantages in many ways to gradually replace the inefficient, clunky, heavy linear power.This article describes a DC-DC switching power supply based on PWM technology, with proteus simulation output ripple voltage is stable and

5、 reliable.Keywords: switching power supplies, DC-DC, single-chip, proteus目录【摘要】 3一、引 言 4二、总体设计 5(一)硬件总体设计 5(二)AT89C52 单片机概述 .5(三)开关电源系统硬件设计 91. 开关电源电路设计 102. 电压反馈电路 103. 限流电路 11三、软件设计 11(一)总的软件设计思想 11(二)各部分的软件框图和程序 121.主程序设计 .122数据显示子程序 133.键盘扫描子程序 .134.键值处理子程序流程图 .14四、程序清单 14一、引 言本设计中采用的是脉宽调制型, Pwm

6、 技术是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM 的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。在脉宽调制中因为频率不变,所以无论是对电路中的磁性元件及晶体管的测试和设计都很方便,而且对射频干扰的抑制也变得比较容易。利用单片机可以实现对开关电源的智能控制,实现智能化开关电源的制作。高度集成、功能强大的开关型稳压电源代表着开关电源发展的主流方向,其技术也日驱成熟。二、总体设计本课题的主要思想是利用单片机可以实现对开关电源的智能控制,实现智能化开关电源的

7、制作。通过键盘预置电压,控制单片机进行脉宽调制,使输出电压在大范围内可调。通过单片机软件控制,实现电源的智能保护,可以设定某个规定的电压或者电流,当超过该电压或者电流时,单片机关断开关管,电源不再工作,以便保护电源。三、硬件设计(一)硬件总体设计本设计中拟采用脉宽调制型,先通过电压及功率变换设计出一个 DC12V 左右的电压源,再对 12V 的电压源,通过脉宽调制,实现步进 0.1V、输出电流 500 mA、LCD 显示的直流电压。利用单片机可以实现对开关电源的智能控制,实现智能化开关电源的制作。硬件总体框图如图 3-1 所示。图 3-1 硬件总体框图(二)AT 89C52 单片机概述1.AT

8、89C52 单片机组成20V交 流 电桥 式 整 流 、 滤波功 率 变 换桥 式 整 流 、 滤波12V直 流 电 5V直 流 电DC12电 压 的 产 生 PWM调 制图 3-2 AT89C52 单片机组成结构图AT89C51 是一种带 4K 字节 FLASH 存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能 CMOS 8 位微处理器,俗称单片机。AT89C2051 是一种带 2K 字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除 1000 次。该器件采用ATMEL 高密度非易

9、失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器, AT89C2051 是它的一种精简版本。AT89C51 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。2AT89C52 单片机引脚结构(1)89C51 外部引脚图:; 引脚说明:(1)电源引脚Vcc(40 脚):典型值5V。Vss(20 脚):接低电平。(2)外部晶振X1、X2 分别与晶体两端相连接。当采用外部时钟信号时,X2 接振荡信号,X1 接地。(3)输入输出口引脚:P0 口:I/O 双向口

10、。作输入口时,应先软件置“ 1” 。P1 口:I/O 双向口。作输入口时,应先软件置“ 1” 。P2 口:I/O 双向口。作输入口时,应先软件置“ 1” 。P3 口:I/O 双向口。作输入口时,应先软件置“ 1” 。(4)控制引脚RST(9 引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作、计时完成后,RST 引脚输出 96 个晶振周期的高电平。DISROT 默认状态下,复位高电平有效。 ALE/PROG(30 引脚):一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。 PSEN(29 引脚):外部程序存储信号时外部

11、程序存储器选通信号。当AT89C51RC 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次。 EA/VPP(31 引脚):访问外部程序存储器控制信号,为使能从 0000H 到FFFFH 的外部程序存储器读取指令,必须接 END。 XTAL1(19 引脚):振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2(18 引脚):振荡器反相放大器的输入端。P1 口作为 LCD 液晶屏的数据口,采用并口数据传输模式,P2 口中的P2.0、P2.1、P2.2、作为控制信号输出口,分别接 RS、R/W、E 控制端,P2.3、P2.4 分别接湿温度传感器的 SCK 和 DATA,P2.5

12、.、P2.6、P2.7 接按键电路,P1 口的 P1.0、P1.1、P1.2 分别接 ADC0831 的控制端,P1.4 接报警的蜂鸣器。3AT89C52 单片机的最小系统图 3-4 AT89C52 单片机组成结构图(1)复位电路:由电容串联电阻构成,由图并结合“电容电压不能突变“ 的性质,可以知道,当系统一上电,RST 脚将会出现高电平,并且,这个高电平持续的时间由电路的 RC 值来决定。典型的 51 单片机当 RST 脚的高电平持续两个机器周期以上就将复位,所以,适当组合 RC 的取值就可以保证可靠的复位。一般教科书推荐 C 取 10u,R 取 10K。原则就是要让 RC 组合可以在 RS

13、T 脚上产生不少于 2个机周期的高电平。至于如何具体定量计算,可以参考电路分析相关书籍。(2) 晶振电路:典型的晶振取 11.0592MHz(因为可以准确地得到 9600波特率和 19200 波特率,用于有串口通讯的场合)/12MHz(产生精确的 uS 级时歇,方便定时操作) ,在本电路中,取 12M。(三)开关电源系统硬件设计1. 开关电源电路设计图 3-3 开关电源电路如图 3-3 可看出,DC50V 输入,经 Q1,Q2,Q3,进行交流变换,输入给储能性元件 L1,当输出电压有波动时,调整管 Q4 调整输入电压,反过来抑制输出电压的波动。2. 电压反馈电路电压反馈部分,当电压达到 12V

14、 时,电流流经稳压二极管 D4、三极管Q2 B,E 极、电阻 R8 使 Q2 导通,Q2 导通将使三极管 13003 提前进入关断区,从而使输出电压稳定在 12V 左右。3. 限流电路当 R11 上流经的电流到达一定值,在 R11 上将产生压降,当压降超过0.7V,三极管 Q3 饱和导通Q3 集电极电压为 0,自激式振荡回路终止,输出电流变小,当 R11 上的电流小到足够的值,R11 两端的电压低于 0.7V,Q3 又截止,自激振荡回路又继续振荡。图三、软件设计(一)总的软件设计思想系统的软件设计采用 C 语言,对单片机进行编程实现各项功能。程序是采用 keil c51 软件编写的,可以使液晶

15、显示屏对特定数字、英文字母以及汉字组成的句子进行显示,并通过按键对显示内容实现控制、转换等功能。主程序主要起到一个导向和决策功能,决定液晶显示屏该显示什么内容,该如何显示。液晶显示屏各种功能的实现主要通过调用具体的子程序。(二)各部分的软件框图和程序1.主程序设计文字描述下 例如(通电之后,系统开始工作,若是有键按下,就根据按键程序进行工作,并把结果显示到 LCD 液晶显示屏上,若是没有按键,定时时间一到,气体传感)开 始变 量 初 始 化复 位LCD初 始 化清 屏键 盘 扫 描延 时延 时延 时按 键 控 制 处 理2数据显示子程序3.键盘扫描子程序开 始页 、 列 地 址 设 置写 入

16、左 右 区 上 半 部 内 容页 列 地 址 重 置写 入 左 右 区 下 半 部 内 容开 始是 否 处 理按 键 清 除前 次 按 键 是 否 按 下 ?前 本 次 状 态 是 否 相 同 ?获 取 按 键 数 值 退 出否否否是是 是4.键值处理子程序流程图四、程序清单/*/*/* *头文件及宏定义* */*/*#include#include“includes.h“#define uchar unsigned char #define uint unsigned int#define SCANPORT P2#define TIME1H 80#define TIME1L 80 /定时器

17、1 溢出时间/开 始按 键 0是 否 按 下 ?显 示 0按 键 1是 否 按 下 ?显 示 1 按 键 .是 否 按 下 ?显 示 .按 键 7是 否 按 下 ?清 屏显 示 7是是否否否是是 否sbit wr=P31;sbit rd=P30;sbit P27=P27;unsigned long int shuchu=500; /默认的开机电压/uint zhuhuandata;unsigned long int ch=0;uchar i=0; /按键标记/uchar uca_LineScan3=0xEF,0xDF,0xBF;void chuli(); /函数定义/uchar getkey(

18、); /函数定义/*/*/* *将键值累加并送显示* */*/*void qiuhe(uchar t)if(i=1)ch=t; vShowOneChar(6,89,ucat);if(i=2)ch=ch*10+t;vShowOneChar(6,103,ucat);if(i=3)ch=ch*10+t;vShowOneChar(6,111,ucat);/*/*/* *按键功能函数* */*/*void key_chuli(uchar x) uchar t;switch(x)case 42: t=0;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShow

19、OneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wenhao);break; /0case 31: t=1;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShowOneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wenhao);break; /1case 32: t=2;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShowOneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wen

20、hao);break; /2case 33: t=3;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShowOneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wenhao);break; /3case 21: t=4;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShowOneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wenhao);break; /4case 22: t=5;i+;qiuhe(t);if(i=3)vS

21、howOneChin(2,49,uca_que);vShowOneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wenhao);break; /5case 23: t=6;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShowOneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wenhao);break; /6case 11: t=7;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShowOneChin(2,64,uca_d

22、ing);vShowOneChin(4,59,uca_wenhao);break; /7case 12: t=8;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShowOneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wenhao);break; /8case 13: t=9;i+;qiuhe(t);if(i=3)vShowOneChin(2,49,uca_que);vShowOneChin(2,64,uca_ding);vShowOneChin(4,59,uca_wenhao);break; /9case

23、 41: if(i=3) /okch=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; void vTimer0(void) interrupt 1 using

24、2uchar a,d;unsigned long int c=0;uchar data tab3;a=(zhuhuandatad=(zhuhuandatac=(a+d)*5.12;tab0=c%10;tab1=c/10%10;tab2=c/100%10;vShowOneChar(2,89,ucatab2);vShowOneChar(2,103,ucatab1);vShowOneChar(2,111,ucatab0);TH0=TIME1H;TL0=TIME1L;void main(void)SCANPORT=0x8F;ClearLCD(0x00);vShowOneChar(2,89,uca5);

25、vShowOneChar(2,96,uca_XIAOSHU);vShowOneChar(2,103,uca0);vShowOneChar(2,111,uca0);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)

26、;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,uc

27、a_HEN);vShowOneChar(6,113,uca_HEN);vShowOneChar(6,119,uca_V);/TMOD=0X01;TH0=TIME1H;TL0=TIME1L;ET0=1; /T/C0 开中断TR0=1; /开定时器 0 中断IT0=1; /外中断方式:下降沿。EX0=1; /开启外部中断。EA=1;/while(1) wr=0;wr=1;chuli();if(zhuhuandatashuchu)P27=1;if(zhuhuandataSCANPORT=0x8F; /恢复 P2 口return (ucRow+ucLine+1);/返回按键编码。格式为 2 位数,高位

28、为行号,低位为列号。/void vINT0(void) interrupt 0 EX0=0;key_chuli(getkey();while(SCANPORTEX0=1;/*/*/* *LCD12864 驱动程序* */*/*/*/*/* *头文件及宏定义* */*/*#include #define LCDPORT P1sbit E= P37;sbit RW= P36;sbit DI= P35;sbit CS1= P33;sbit CS2= P34;sbit BUSYSTATUS= P17; /忙状态位。/#define DISONSTATUS P0_5 /显示开关状态位。/#define

29、RSTSTATUS P0_4 /复位状态位。#define LCDSTARTROW 0xC0 /设置起始行指令。#define LCDPAGE 0xB8 /设置页指令。#define LCDLINE 0x40 /设置列指令。/*/*/* *读忙标志位* */*/*bit bCheckBusy()LCDPORT=0x00;RW=1;DI=0;E=1;E=0;return BUSYSTATUS; /*/*/* *写数据* */*/*void vWriteData(unsigned char ucData)while(bCheckBusy();LCDPORT=0x00;RW=0;DI=1;LCDPO

30、RT=ucData;E=1;E=0;/*/*/* *写指令* */*/*void vWriteCMD(unsigned char ucCMD)while(bCheckBusy();LCDPORT=0x00;RW=0;DI=0;LCDPORT=ucCMD;E=1;E=0;/*/*/* *LCD 初始化函数* */*/*/*void vLCDInitialize()CS1=1;CS2=1;vWriteCMD(0x38); /8 位形式,两行字符。vWriteCMD(0x0F); /开显示。vWriteCMD(0x01); /清屏。vWriteCMD(0x06); /画面不动,光标右移。vWrite

31、CMD(LCDSTARTROW); /设置起始行。*/*/*/* *显示自定义行* */*/*/在 8128 的格子里显示自定义长度的一行void vShowCustomRow(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char *ucaRow)unsigned char ucCount; /取值范围:ucPage:07;ucLine:0127;if(ucLine64) /ucWidth:0127;ucLine+ucWidth1128。CS1=1;CS2=0;vWriteCMD(LCDPAG

32、E+ucPage);vWriteCMD(LCDLINE+ucLine);if(ucLine+ucWidth)64)for(ucCount=0;ucCountucWidth;ucCount+)vWriteData(*(ucaRow+ucCount);elsefor(ucCount=0;ucCount64-ucLine;ucCount+)vWriteData(*(ucaRow+ucCount);CS1=0;CS2=1;vWriteCMD(LCDPAGE+ucPage);vWriteCMD(LCDLINE);for(ucCount=64-ucLine;ucCountucWidth;ucCount+)

33、vWriteData(*(ucaRow+ucCount);elseCS1=0;CS2=1;vWriteCMD(LCDPAGE+ucPage);vWriteCMD(LCDLINE+ucLine-64);for(ucCount=0;ucCountucWidth;ucCount+)vWriteData(*(ucaRow+ucCount);/*/*/* *汉字显示函数* */*/*/此函数将 1616 汉字显示在 8128 的格子里。void vShowOneChin(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaChinMap

34、)vShowCustomRow(ucPage,ucLine,16,ucaChinMap);vShowCustomRow(ucPage+1,ucLine,16,ucaChinMap+16);/*/*/* *字符显示函数* */*/*/此函数将 816 字符显示在 8128 的格子里。void vShowOneChar(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaCharMap)vShowCustomRow(ucPage,ucLine,8,ucaCharMap);vShowCustomRow(ucPage+1,ucLine

35、,8,ucaCharMap+8);/*/*/* *清屏函数* */*/*/此函数将清空显示屏。void ClearLCD(unsigned char date)unsigned char page,column;CS1=1;CS2=0;vWriteCMD(LCDSTARTROW);for(page=0;page8;page+) vWriteCMD(page+LCDPAGE);vWriteCMD(LCDLINE);for(column=0;column64;column+) vWriteData(date); /清左屏CS1=0;CS2=1;vWriteCMD(LCDSTARTROW);for(

36、page=0;page8;page+)vWriteCMD(page+LCDPAGE);vWriteCMD(LCDLINE);for(column=0;column64;column+) vWriteData(date); /清右屏unsigned char code uca_DANG=0x00,0x40,0x42,0x44,0x4C,0x40,0x40,0x7F,0x40,0x40,0x48,0x44,0xE6,0x40,0x00,0x00,0x00,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x

37、00; /*“当“,0*/unsigned char code uca_QIAN=0x08,0x08,0xE8,0x29,0x2A,0x2E,0xE8,0x08,0x08,0xCC,0x0A,0x0B,0xE8,0x0C,0x08,0x00,0x00,0x00,0xFF,0x09,0x49,0x89,0x7F,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00; /*“前“,0*/unsigned char code uca_GONG=0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报