数控直流电源.docx
《数控直流电源.docx》由会员分享,可在线阅读,更多相关《数控直流电源.docx(23页珍藏版)》请在冰豆网上搜索。
数控直流电源
基于51单片机的数控直流电源
目录
一、绪论----------------------------------------------------------------------------3
1、课题背景-----------------------------------------------------------------------3
2、整体设计思路----------------------------------------------------------------3
二、方案设计与论证-------------------------------------------------------3
1、各模块方案分析-------------------------------------------------------------4
2、系统各个模块最终方案---------------------------------------------------4
三、系统硬件设计与实现-------------------------------------------------5
1、单片机最小系统设计-----------------------------------------------------5
2、显示模块电路的设计------------------------------------------------------6
3、按键控制电路----------------------------------------------------------------6
4、数模传换模块----------------------------------------------------------------7
5、电源模块----------------------------------------------------------------------9
四、程序设计----------------------------------------------------------------------9
1、统软件设计说明-------------------------------------------------------------9
2、程序流程图-------------------------------------------------------------------10
3、仿真电路图-------------------------------------------------------------------10
4、程序介绍----------------------------------------------------------------------12
5、扩展部分----------------------------------------------------------------------13
五、总结--------------------------------------------------------------------------15
六、附录(原代码)---------------------------------------------------------16
七、参考文献-------------------------------------------------------------------21
基于51单片机的数控直流电源
【摘要】:
数控直流电源在现代各个领域应用非常广泛,特别是在学生实验过程中。
因此本次设计利用AT89C52作为核心处理器,用数模转换芯片DAC0832作为将AT89C52产生的数字信号转换为所需要的模拟信号的处理芯片,由于此数模转换芯片具有精度高、微型化、以及功耗低等特点而被广泛应用于数模信号的转换。
因此在本次设计中用51单片机来进行数字信号的控制,同时用数码管来显示所设定的电压值,并设置了温度的上下限(0-9.9v,步进值为0.1V),同时可用按键调节所需要的电压值。
【关键词】:
80C51单片机、DAC0832、显示模块、设置电压值
一、绪论
1、课题背景
随着时代的发展,数字电子技术已经普及到我们生活,工作,科研,各个领域,本文将介绍一种数控直流稳压电源,本电源由模拟电源、显示电路、控制电路、数模转换电路、放大电路四部分组成.准确说就是模拟电源提供各个芯片电源、数码管、放大器所需电压;显示电路用于显示电源输出电压的大小。
同时分析了数字技术和模拟技术相互转换的概念。
与传统的稳压电源相比具有操作方便,电源稳定性高以及其输出电压大小采用数码显示的特点。
2、整体设计思路
根据课题背景的设想,系统可划分为稳压电源模块、数控模块(单片机模块)、显示模块、调节输出电压模块、输出电路。
模块框图如下所示:
为了实现各模块的功能,分别对各模块进行分析。
二、方案设计与论证
1、各模块方案分析
(1)电源模块和稳压模块
电源模块作为本次设计中比较重要的一部分,为整个系统提供工作打压,要求输出的电压足够稳定。
电源一:
采用电压芯片7805来生成+5V电压,将220V的交流电经过变压器的变压以后接入7805的输入端,经过7805,将电压变为+5V的直流电压,但是由于外部条件的影响,输出的电压不是很稳定,波动的范围有时有点大,因此需要加整流电路来控制+5V电压的稳定输出。
电源二:
首先用变压器将220V的交流电压进行变压成为可用的低压电,经过变压后将变压器输出的电压接入,经过7815的转换,将电压变为+15V,经过整流后使之输出稳定的+15直流电压。
电源三:
与+15V原理相似,将经过变压器后的电压接入,经过7915的转换,将电压变为-15V,经过整流后使之输出稳定的-15直流电压。
(2)显示模块
方案一:
使用传统的数码管显示。
数码管是采用BCD码来显示数字,程序编译容易,占用资源比较少。
同时数码管的接口比较好控制。
方案二:
使用液晶显示当前测试温度。
由于液晶显示屏(LCD)、无辐射危险,且易于实现,分辨率高,能显示字母、数字符号、中文字形及图形,同时抗干扰性强,但是液晶显示屏(LCD)的接口比较多,需要控制的接口比较多,代码的实现比较麻烦。
方案选择:
综上所述,我们选择了方案一,既简单又方便观察。
(3)数模转换模块
单片机进行输出电压的控制的时候,需要先通过单片机的I/O口对数模转换芯片的输入口进行赋初值,通过当前I/O口所赋的值与电压值为参考电压的时候的I/O口的值进行比例换算,得出当前所要输出的电压,然后通过数模转换芯片将所需要输出的电压的数值转换为相对应的模拟信号,输出后由于输出为电流,将其接入反馈使其转换为电压,从而实现单片机对输出电压的数控。
(4)输出电压的大小调节
输出电压的大小我选择按键进行控制,通过按键可以实现输出电压的大小变化,步进值为0.1V。
2、系统各个模块最终方案
经过最终的考虑与抉择,确定了系统的最终模块:
(1)电源模块和稳压模块:
采用变压器、电容、桥式整流器2W005G、7805、7815、7915稳压器;
(2)显示模块:
采用两位共阴数码管显示;
(3)数模转换模块:
采用DAC0832芯片来进行数模转换;
(4)数控模块:
采用AT89C52单片机和按键来调节输出大小;
系统最终框图:
三、系统硬件设计与实现
硬件设计是比较重要的部分,它直接关系到整个系统是否正常工作,是否得到正确的结果。
因此硬件电路设计与实现是系统系统运行起来的关键,下面对个部分电路进行简单介绍。
1、单片机最小系统设计
MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图:
单片机的40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
电源:
VCC与GND,时钟:
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
控制线:
ALE/PROG:
地址锁存允许/片内EPROM编程脉冲PSEN:
外ROM读选通信号,RST/VPD:
复位/备用电源EA/Vpp:
内外ROM选择/片内EPROM编程电源。
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线),该系列单片机最小系统如下图所示。
单片机最小系统
单片机最小系统是整个系统的核心部分,整个系统的运行与控制完全由其决定。
2、显示模块电路的设计
显示模块,主要由较为简单的两位七段数码管组成,仿真如下图所示:
A~G以及DP表示数码管段选,其中DP表示小数点,1、2表示位选,该数码管为共阴数码管,即当位选给以低电平且段选给以高电平时,对应发光二极管就会亮起,从而显示所需数字。
我们设计的显示模块,将数码管位选分别连接单片机的P3^0和P3^1口,段选连接P2口,通过动态显示的方式,使数码管显示0.0~9.9这些数字
3、按键控制电路
为了通过按键来调节输出电压的大小,设计两个按键来分别实现“+”和“-”,分别连接单片机P3^2和P3^3口,如图所示:
通过按键来控制单片机P1口的八个管脚的高低电平来控制输入数模转换器的数字信号,从而控制转换后输出的模拟信号。
4、数模传换模块
在电子设计过程当中,经常会碰到模数转换或数模转换的情况,因为,单片机输出的信号为数字信号,而作为直流电源,则需输出模拟信号,所以数模转换很是必要。
本设计中,我们选用DAC0832数模转换芯片。
DAC0832简介:
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:
直通方式、单缓冲方式和双缓冲方式。
DAC0832引脚功能电路应用原理图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。
所以这个芯片的应用很广泛,关于DAC0832应用的一些重要资料见下图:
D/A转换结果采用电流形式输出。
若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。
运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。
DAC0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。
DI0~DI7:
数据输入线,TLL电平。
ILE:
数据锁存允许控制信号输入线,高电平有效。
CS:
片选信号输入线,低电平有效。
WR1:
为输入寄存器的写选通信号。
XFER:
数据传送控制信号输入线,低电平有效。
WR2:
为DAC寄存器写选通输入线。
Iout1:
电流输出线。
当输入全为1时Iout1最大。
Iout2:
电流输出线。
其值与Iout1之和为一常数。
Rfb:
反馈信号输入线,芯片内部有反馈电阻.
Vcc:
电源输入线(+5v~+15v)
Vref:
基准电压输入线(-10v~+10v)
AGND:
模拟地,摸拟信号和基准电源的参考地.
DGND:
数字地,两种地线在基准电源处共地比较好.。
连接图
下面为其内部结构图
基准电压VREF应在-10V~10V之间调节,则最终输出电压的大值即为VREF的值,DI0~DI7即为信号输入端,我们将其接在单片机的P1口。
为使DAC0832一直处于数模转换状态,则应使芯片处于直通工作方式,其结构图如下:
可知,将CS和WR1归0即可使0832处于直通工作方式,所以将其接地即可。
5、电源模块
AT89C52、DAC0832芯片工作需要有电源的支持,所以就有必要设计一稳压电源,根据前面所述,220V市电通过变压器变为低压电,再由7815芯片将电压变为+15V的直流电压;通过7915芯片将其变为-15V直流电压,在经过一1.7k电阻,将其降为-12.8V作为DAC0832的基准电压;通过7805芯片将其变为+5V直流电压,为单片机和DAC0832供电。
由于仿真中稳压电源部分所占用CPU过大,当接入单片机时,仿真便无法正常运行,所以在仿真时,我们用VCC来代替稳压电源,最终图则为有稳压电源的部分。
四、程序设计
1、统软件设计说明
在单片机系统中不仅对硬件有一定的要求,同时对软件也同样存在着很高的要求,因为软件设计的质量从根本上决定了整个系统的性能,因此软件在设计上得进行优化。
然而在进行软件设计时,为了让系统易于调试与实现。
通常把一个系统分为很多模块,以方便实现,因此本系统可分为3个模块:
主程序、显示程序、按键调节程序。
2、程序流程图
3、仿真电路图
DAC0832与单片机相连
数码管与按片机相连
测量输出电压
整体仿真图
4、程序介绍
(1)按键部分
为了防止按键不灵敏,我们将按键分别用两个外部中断来控制,用一个变量num来表示此时电压的值,因为DAC0832所接的基准电压值为12.8V,所以经过公式计算得输出电压U=(num/2)*12.8/256,所以程序如下:
voidsd()interrupt0//外部中断0
{
num=num+2;
if(num>198)num=198;
}
voidds()interrupt2//外部中断1
{
num=num-2;
if(num<2)num=2;
}
(2)数码管显示部分
采用共阴数码管,所以需要为其定义一个数组表示其显示的数字
unsignedcharcodetemp2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
为了显示0~9.9这些数字,我们需要显示带小数点的数字,所以需定义另一个数组
unsignedcharcodetemp1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
另外,将给P1值的部分也加入显示部分中,使它们同步实现
voiddisp()
{
t=num/2;
P1=num;
s1=1;
s2=0;
P0=temp2[t%10];
delay(3);
P0=0x00;
s1=0;
s2=1;
P0=temp1[t/10];
delay(3);
P0=0x00;
}
变量t表示实际电压值的十倍,大小为num/2。
(3)主程序部分
主程序,即为调用各子函数,在后面给出。
5、扩展部分
在满足了基本数控电源要求后,我组还对其进行了完善使其能够完成自动扫描以及输出方波、三角波、锯齿波功能,为此我们还添加了5个按键分别对其进行操作,在此进行一下简要介绍:
P3^4口控制产生锯齿波
P3^5口控制产生三角波
P3^6口控制产生方波
P2^0口控制自动扫描加
P2^1口控制自动扫描减
定义变量t1,t2,t3,t4,t5来控制这几种状态,分别由这几个按键来控制,在主函数中对其状态进行定义:
if(t1==1)//产生锯齿波
{
num=num+2;
if(num>198)
num=0;
disp();
}
if(t2==1)//产生三角波
{
if(num==198)
man=1;
if(man==1)
{
num=num-2;
if(num==0)
man=0;
}
else
num=num+2;
disp();
}
if(t3==1)//产生方波
{
num=20;
disp();
delay(220);
num=180;
disp();
delay(250);num=180;
disp();
delay(50);
}
if(t4==1)//自动扫描+
{
num=num+2;
delay(20);
if(num>198)num=0;
disp();
}
if(t5==1)//自动扫描-
{
num=num-2;
delay(20);
if(num==0)num=198;
disp();
}
仿真显示波型如下:
锯齿波
三角波
方波
五、总结
本次电子设计为数控直流电源,主要是将220V市电转换为+15V、-15V和+5V的低压直流电,并且使其为单片机和DAC芯片供电,最终输出0~9.9V的直流电,这中间运用了稳压变压、整流、程序控制单片机I/O口输出以及数模转换等技术,因此该设计也存在一定难度,在设计过程中我们也出现了许多这样那样的问题,例如按键不稳定,稳压电源输出电压不符合要求造成纹波过大等,不过经过努力修改,最终还是完成了要求,而且对输出信号做了调整,使其能输出三种波形。
经过这次的设计,我们学到了不少平时学不到的东西,了解了一些元器件的原理,为我们今后的学习打下了基础。
而且通过这次的设计,我们也发现了自身的不足,例如,刚开始的眼高手低,连接电路时的不仔细,我们都会牢牢记住,努力的改正。
六、附录(原代码)
#include
#defineuintunsignedint
#defineucharunsignedchar
sbits1=P3^0;
sbits2=P3^1;
sbitk1=P3^2;//+0.1V
sbitk2=P3^3;//-0.1V
sbitk3=P3^4;//产生锯齿波
sbitk4=P3^5;//产生三角波
sbitk5=P3^6;//产生方波
sbitk6=P2^0;//自动扫描加
sbitk7=P2^1;//自动扫描减
uintnum=100,t;
inti;
bitt1=0,t2=0,t3=0,t4=0,t5=0,man;
ucharcodetemp1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
ucharcodetemp2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidkey1()//锯齿波按键判断
{
if(k3==0)
{
delay(5);
if(k3==0)
{
t1=~t1;
t2=0;
t3=0;
}
while(!
k3);
delay(5);
while(!
k3);
}
}
voidkey2()//三角波按键判断
{
if(k4==0)
{
delay(5);
if(k4==0)
{
t2=~t2;
t1=0;
t3=0;
}
while(!
k4);
delay(5);
while(!
k4);
}
}
voidkey3()//方波按键判断
{
if(k5==0)
{
delay(5);
if(k5==0)
{
t3=~t3;
t1=0;
t2=0;
}
while(!
k5);
delay(5);
while(!
k5);
}
}
voidkey4()//扫描按键“+”按键判断
{
if(k6==0)
{
delay(5);
if(k6==0)
{
t4=~t4;
}
while(!
k6);
delay(5);
while(!
k6);
}
}
voidkey5()//按键扫描“-”按键判断
{
if(k7==0)
{
delay(5);
if(k7==0)
{
t5=~t5;
}
while(!
k7);
delay(5);
while(!
k7);
}
}
voiddisp()
{
t=num/2;
P1=num;
s1=1;
s2=0;
P0=temp2[t%10];
delay(3);
P0=0x00;
s1=0;
s2=1;
P0=temp1[t/10];
delay(3);
P0=0x00;
}
voidmain()
{
EA=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
while
(1)
{
key1();
key2();
key3();
key4();
key5();
if(t1==1)//产生锯齿波
{
num=num+2;
if(num>198)
num=0;
disp();
}
if(t2==1)//产生三角波
{
if(num==198)
man=1;
if(man==1)
{
num=num-2;
if(num==0)
man=0;
}
else
num=num+2;
disp();
}
if(t3==1)//产生方波
{
num=20;
disp();
delay(220);
num=180;
disp();
delay(250);num=180;
disp();
delay(50);
}
if(t4==1)//自动扫描+
{
num=num+2;
delay(20);
if(num>198)num=0;
disp();
}
if(t5==1)//自动扫描-
{
num=num-2;
delay(20);
if(num==0)num=198;
disp();
}
disp();
}
}
voidsd()interrupt0//外部中断0
{
num=num+2;
if(num>198)num=198;
}
voidds()interrupt2//外部中断1
{
num=num-2;
if(num<2)num=0;
}
七、参考文献
【1】黄宇飞,吴江.单片机单总线技术.单片机与嵌入式系统应用,2001,
(1)
【2】《新概念51单片机C语言教程.入门、提高、开发》