基于单片机的数控直流稳压电源的设计文档格式.docx

上传人:b****6 文档编号:21971489 上传时间:2023-02-02 格式:DOCX 页数:25 大小:259.99KB
下载 相关 举报
基于单片机的数控直流稳压电源的设计文档格式.docx_第1页
第1页 / 共25页
基于单片机的数控直流稳压电源的设计文档格式.docx_第2页
第2页 / 共25页
基于单片机的数控直流稳压电源的设计文档格式.docx_第3页
第3页 / 共25页
基于单片机的数控直流稳压电源的设计文档格式.docx_第4页
第4页 / 共25页
基于单片机的数控直流稳压电源的设计文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于单片机的数控直流稳压电源的设计文档格式.docx

《基于单片机的数控直流稳压电源的设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的数控直流稳压电源的设计文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

基于单片机的数控直流稳压电源的设计文档格式.docx

从上世纪九十年代末起,随着对系统更高效率和更低功耗的需求,电信与数据通讯设备的技术更新推动电源行业中直流/直流电源转换器向更高灵活性和智能化方向发展。

整流系统由以前的分立元件和集成电路控制发展为微机控制,从而使直流电源智能化,基本实现了直流电源的无人值守 

直流稳压电源是最常用的仪器设备,在科研及实验中都是必不可少的。

数控电源采用按键盘,可对输出电压进行设置,输出由单片机通过D/A,控制驱动模块输出一个稳定电压。

同时稳压方法采用单片机控制,单片机通过A/D采样输出电压,与设定值进行比较,若有偏差则调整输出,越限则输出报警信号并截流。

工作过程中,稳压电源的工作状态(输出电压、电流等各种工作状态)均由单片机输出驱动LCD显示,由键盘控制进行动态逻辑切换。

以单片机为核心的智能化高精度简易直流电源的设计,电源采用数字调节、输出精度高,特别适用于各种有较高精度要求的场合。

1.3.数控电源的优点

(1)易于采用先进的控制方法和智能控制策略,使电源模块的智能化程度更高,性能更完美。

(2)控制灵活,系统升级方便,甚至可以在线修改控制算法,而不必改动硬件线路。

(3)控制系统的可靠性提高,易于标准化,可以针对不同的系统(或不同型号的产品),采用统一的控制板,而只是对控制软件做一些调整即可。

第二章系统的设计要求和方案选择

2.1.设计要求

系统电压调节范围为0~12V,最大输出电流1A,具有过载和短路保护功能。

输出电压可用1602LCD液晶显示。

键盘设有6个键,复位键,步进增减1V两个键,步进增减0.1V两个键以及确认键。

复位键用于启动参数设定状态(5V),步进增减键用于设定参数数值,确认键用于确认输出设定值.

电源开机设定电压输出默认值为5V。

通过步进增减按键功能选择可在不同的设定参数之间切换,再按确认键进入设定电压输出状态。

若按复位键,则电压输出恢复5V。

系统设有自动识别功能,将不接受超出使用范围(0~12V)的设定值

2.2.方案论证与比较

2.2.1稳压电源的选择

方案一:

简单的并联型稳压电源

并联型稳压电源的调整元件与负载并联,因而具有极低的输出电阻,动态特性好,电路简单,并具有自动保护功能;

负载短路时调整管截止,可靠性高,但效率低,尤其是在小电流时调整管需承受很大的电流,损耗过大。

方案二:

串联型稳压电源

并联稳压电源有效率低、输出电压调节范围小和稳定度不高这三个缺点。

而串联稳压电源可以避免这些缺点,同时串联稳压电源可以通过三端稳压实现,而且这类芯片内部都有过流和过热的保护电路,例如W117,其额定电流可达1.5A,输出电压的调节范围为1.2-37V,内部有过流和过热保护电路,而且价格也的相当便宜如图2.1所示,所以综合考虑采用方案二。

图2.1三端稳压器

2.2.2数字显示方案

液晶显示器显示

利用单片机的软硬件资源实现高精度高速A/D转换,转换精度和转换速度可以通过软件来改变。

但是对软件部分要求非常高不易实现。

数码管显示

数码管显示分为静态显示和动态显示两种,但是不管哪种显示都具有结构简单、易于实现等优点。

同时采用3位数码管完全可以满足本设计的要求。

在用8051控制的同时,可以简化软件程序,快速实现。

所以本设计中采用数码管显示。

第三章系统硬件设计

3.1.系统设计

由于本设计的输入为220V的交流电电压,所以必须先经过整流滤波电路然后经过三端稳压器的处理输出直流稳定的电压,当然在输出前还得有单片机的控制才可以输出。

在控制中单片机通过接受来自键盘的指令信号,并且通过数码显示器显示当前值,然后由单片机发出控制信号控制接口和驱动电路来控制稳压器的输出,通过数码显示器显示输出值。

具体的系统图如图3.1所示。

图3.1系统流程图

3.2.微控制器模块

3.2.18051单片机的性能

AT89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

主要特性为:

(1)与MCS-51兼容

(2)4K字节可编程闪烁存储器

(3)寿命:

1000写/擦循环

(4)数据保留时间:

10年

(5)全静态工作:

0Hz-24Hz

(6)三级程序存储器锁定

(7)128*8位内部RAM

(8)32可编程I/O线

(9)两个16位定时器/计数器

(10)5个中断源

(11)可编程串行通道

(12)低功耗的闲置和掉电模式

(13)片内振荡器和时钟电路

3.2.28051单片机的最小系统

对于一个完整的电子设计来讲,首要问题就是为整个系统提供电源供电模块,电源模块的稳定可靠是系统平稳运行的前提和基础。

51单片机虽然使用时间最早、应用范围最广,但是在实际使用过程中,一个和典型的问题就是相比其他系列的单片机,51单片机更容易受到干扰而出现程序跑飞的现象,克服这种现象出现的一个重要手段就是为单片机系统配置一个稳定可靠的电源供电模块。

在次最小系统中包含了复位电路、振荡电路和供电电路。

如图3.2所示。

图3.2单片机最小系统

3.3.电源模块

3.3.1单片机供电模块

为了满足单片机的正常工作,必须给其提供+5v的直流电源,所以设计一个可以使用usb的5v直流供电电路,具体电路如图3.3.1所示。

图3.3.1单片机供电图

3.3.2整流滤波电路和+5v供电模块

整流电路采用桥式电路,整流管采用普遍使用桥堆。

根据使用手册可知W7805的输入端电压为9V,W117的输入电压为25V,具体电路如图3.3.2所示。

图3.3.2辅助电源模块

3.4.W117电阻网络和继电器驱动电路

根据w117的基本功能,调压电阻网络可采用如图3.4.1所示电路。

这里的电阻网络采用分立元件组成的8为权电阻串联式网络,而开关采用舌簧式继电器的触点。

为了使W117正常工作,要求流过R1的电流不小于5mA,而R1两端的电压为恒定的1.25v,所以若取流过R1的电流为5mA,则R1=1.25V/5mA=250,为了满足调节单位为0.1v,故R=0.1/5mA=20,则可以求得该网络的其他电阻值。

图3.4.1W117的调压电阻网络和驱动电路

3.5.显示电路

在显示电路中分为静态显示和动态显示,由于本设计是要求采用三位数码管,而静态显示无法满足设计的需要,故在本设计中采用并联动态显示。

图3.5是动态显示的原理图,只要有一位接通过单片机的扫描让每位选线轮流选通,同时在段选线上送出该位要显示的段位码。

图3.5系统显示电路

3.6.键盘电路

键盘控制电路分为独立式和矩阵式,由于本设计的要求不是特别的高,加上独立式按键结构电路简单易于实现的特点,所以在本设计中采用独立式按键结构。

电路结构如图3.6。

图3.6独立按键式结构图

第四章软件

4.1.主程序

C语言程序如下:

#include<

REGX51.H>

Unsignedchar

led[15]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f,0x39,0x52,0x64,0x37,0x0e};

//9876543210

voidmain()//主函数

{

voidledout(unsignedcharATA,charadd,charj);

voiddelays(unsignedchart);

unsignedcharodata,key,temp;

unsignedintF,f=0x100;

//初始频率

charadd=0,j=1;

odata=155;

//电压初值为5v

j=1;

while

(1)

{

for(F=f;

F<

0x110;

F++)

P3=0xff;

key=P3;

if(key!

=0xff)

unsignedchari;

for(i=0;

i<

10;

i++)

ledout(odata,add,j);

delays(10);

ledout(odata,add,-j);

}

if(key==0xff)break;

if(add==0)temp=odata;

//记录当前电压值

switch(key)

{

case0x7f:

if(add==0)

if(odata>

57)

odata=odata-2;

//电压加0.1V

break;

case0xbf:

if(odata<

255)

odata=odata+2;

case0xdf:

if(add==0)

{//三角波

f=0x100;

//1时为频率最高,最大允许256

odata=155;

add=1;

}

elseif(add==1)

{//方波

//f=f*200;

//频率跟随

f=0x100;

odata=55;

add=200;

elseif(add==-1)

{

elseif(add==200)

{//直流电压

add=0;

odata=temp;

//电压记忆恢复

}

else

break;

case0xef:

if(add!

=0)

{

f=f/2;

//频率频率加

if(f==1)

if(add==1)

elsef=0x3200;

}

if(odata==255)

add=-add;

odata=odata+add;

if(odata==55)

P0=odata;

//送数据

//送显示

j=-j;

}

voidledout(unsignedcharATA,charadd,charj)

unsignedcharDH,DL,temp;

switch(add)

case0:

temp=((ATA-55)/2)-1;

//十进制转换

DH=temp/10;

DL=temp%10;

}break;

case1:

DH=11;

DL=12;

case-1:

case200:

DH=13;

DL=14;

case-200:

DL=14;

switch(j)

P1=led[DH];

//送数码管高位显示

P1_7=1;

//动态显示

P1=led[DL];

//送数码管低位显示

break;

voiddelays(unsignedchart)

unsignedchars;

for(;

t>

0;

t--)

for(s=0;

s<

255;

s++);

4.2.扫描键盘程序

reg51.h>

voidkey_deal(void)

{unsignedcharKey_value;

//按键键值

P1|=0x07;

//P1.0~P1.2为输入端口

Key_value=P1&

07;

//屏蔽P1口高5位,取键值

switch(Key_value){

case6:

Sub_S1();

break;

//S1按键按下,执行对应子程序

case5:

Sub_S2();

//S2按键按下,执行对应子程序

case3:

Sub_S3();

//S3按键按下,执行对应子程序

default:

}

4.3.显示驱动程序

absacc.h>

Adc_Temp.h>

codeuchardisp_seg[]=

{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x71,0x40,0x00,0xff,0xf3};

//0123456789abcdef-全灭,全亮,P.

//定义显示缓冲区(由定时中断程序自动扫描)

ucharDispBuf[8];

//8位数码管显示的数字码(显示段码的偏移量)

ucharbdatakey_flag=0;

//定义键盘状态标志位

sbitkey_first_flag=key_flag^0;

sbitkey_delay_flag=key_flag^1;

sbitkey_valid_flag=key_flag^2;

ucharkey_value;

//key_value=0:

nokey,orkey_value=1-8standforkey1-key8

voidDispInit();

//数码管扫描显示初始化

voidDispClear();

//清除数码管的所有显示

voidDispP();

//显示"

P."

//在数码管位置x(0~7)处显示字符c(仅限十进制数字和减号)

//voidDispChar(unsignedcharx,unsignedchary);

//显示指定位置x(0~7)处的小数点

//voidDispDotOn(unsignedcharx);

/*

函数:

T1INTSVC()

功能:

定时器T0的中断服务函数

*/

voidT1INTSVC()interrupt1using1//interrupt3forT1

codeucharcom[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

staticucharkey_value_temp,n=0;

ucharkey_in,i;

TR0=0;

TH0=0xf8;

//0xfc66:

1msfor11.0592MHz,oxf8cd:

2ms,0xB800:

20ms,0x4C00:

50ms

TL0=0xcd;

P1=0xFF;

//暂停显示

if((DispBuf[n]&

0x80)==0x80)//带小数点显示

{DispBuf[n]=DispBuf[n]&

0x7f;

LED_OUT=~(disp_seg[DispBuf[n]]|0x80);

//更新扫描数据

else

LED_OUT=~disp_seg[DispBuf[n]];

P1=~com[n];

//重新显示

if(key_first_flag==0)

key_in=KEY_IN;

if(key_in!

=0xff)//初次检测到有键按下

i<

n;

i++)//n:

当前扫描键

key_in=key_in>

>

1;

if((key_in&

0x01)==0x00)//若键按下,对应KEY_IN的输入口读入状态位为0

key_first_flag=1;

//置标志

key_value_temp=i;

//暂存

elseif(key_delay_flag==0&

&

n==key_value_temp)

i++)

0x01)==0x00)//经过一轮扫描后(8*2ms=16ms),第一次按下的键仍被按下

key_delay_flag=1;

elseif(key_delay_flag==1&

0x01)==0x01)//再经过一轮扫描后,按键已释放:

则为有效键

key_valid_flag=1;

key_value=key_value_temp+1;

n++;

n&

=0x07;

-////////////////////////////-----------------------------------------------------------------------;

TR0=1;

DispClear()

清除数码管的所有显示

voidDispClear()

for(i=0;

8;

i++)

DispBuf=0x11;

//0x00;

DispP()

显示"

,即最高为显示"

P."

,其余显示灭

voidDispP()

DispClear();

DispBuf[7]=0x13;

//0xf3;

DispChar()

在数码管上显示字符

参数:

x:

数码管的坐标位置(0~7,0为高位,7为低位)

y:

要显示的字符,c=0~19(仅限十进制数字和减号)

voidDispChar(unsignedcharx,unsignedchary)

//0123456789,-,全灭,全亮的数码管字型数据

//codeunsignedcharTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00,0xff};

Di

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1