基于AT89S51的数控直流稳压电源毕业论文_第1页
基于AT89S51的数控直流稳压电源毕业论文_第2页
基于AT89S51的数控直流稳压电源毕业论文_第3页
基于AT89S51的数控直流稳压电源毕业论文_第4页
基于AT89S51的数控直流稳压电源毕业论文_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、. . . . 摘要:本次实训的容是设计制作一个主要用单片机控制的数控直流稳压电源,测量电压围是-5V+5V(附加功能是可以产生三角波、正弦波和方波信号)。首先针对数控直流稳压电源设计的控制要求,本文采用了C语言编写的程序设计,显然C语言易懂,但是极其执行的速度没有汇编语言快;然后进行数控直流稳压电源的硬件设计,并用Proteus实现了仿真;随后画出了Protel电路原理图与PCB电路板;最后制作出了电路板并焊接元件,调试运行以与仿真。当按钮输入的信号传给单片机AT89S51后,P1口输出经由74LS373控制数码管显示输入值,而由电源输入的电压经过单片机AT89S51传送给DAC0832的输

2、入端,再由DAC0832的输出控制OP07的转化后,输出的双路电压值和数码管显示值一样,只是有一正一负的区分。关键词:单片机、数模转换、LED显示、数控直流稳压电源目录一、实训目的:1二、实训设计容要求:1三、元件清单:1四、元件介绍:11. AT89S51芯片介绍:12.数模转换芯片DAC0832介绍:43.数码管驱动芯片74LS373介绍:64.运算放大器OP07介绍:65.7805和7905介绍:7五、工作原理:7六、Proteus仿真图:8七、Protel电路原理图:9八、PCB图:10九、实物图:11十、程序流程图:12十一、程序:13十二、实训心得:18十三、参考文献:20一、实训

3、目的:1.掌握AT89S51单片机的原理和基本应用,学会应用单片机实现交通灯的信号控制与时间控制等实用功能。并通过软硬件结合加深对单片机各个接口功能的理解和掌握。2.增强学生的动手能力和解决问题、发现问题的能力。3.增强同学之间的合作能力,是他们具有团队合作精神 。二、实训设计容要求:设计并制作一个数控直流稳压电源,显示围为-5V+5V,输入与输出值的精度是0.1V (附加功能是可以产生三角波、正弦波和方波信号。)当输入值由数码管显示出来时,经过转换后的电压输出端输出的电压值应该与数码管显示值相等,且两个输出端有正负的区分。三、元件清单:共阳数码管两个;二极管八个; 7805两个;7905一个

4、;单片机AT89S51一个(附加40引脚底座一个); 74LS373一个(附加20引脚底座一个);DAC0832一个(附加20引脚底座一个); OP07两个(附加8引脚底座两个);电位器:1K欧一个,100K欧两个; 按钮六个;极性电容:470uf三个,1000uf一个; 非极性电容:104uf四个,30uf三个;晶振12MHz一个; 电阻排1K欧一个;电阻:1K欧五个,50欧十个,510欧两个; 导线若干;四、元件介绍:1. AT89S51芯片介绍:(1)AT89S51引脚图管脚图与各引脚功能介绍·VCC:电源电压·GND:地·P0口:P0口是一组8位漏极开路型

5、双向I0口,也即地址数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活部上拉电阻。·P1口:Pl 是一个带部上拉电阻的8位双向IO口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,Pl接收低8位地址。·P2 口:P2 是一个带有部上拉电

6、阻的8 位双向IO 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVXRi 指令)时,P2 口线上的容(也即特殊功能寄存器(SFR)区中P2寄存器的容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。·P3 口:P3 口是一组

7、带有部上拉电阻的8 位双向I0 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3口写入“l”时,它们被部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I0口线外,更重要的用途是它的第二功能,如下表所示:表2 具有第二功能的P1口引脚端口引脚第二功能:P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外中断0)P3.3/ INT1(外中断1)P3.4T0(定时计数器0外部输入)P3.5T1(定时计数器1外部输入)P3.6/ WR(外部数据存储器写选通)P3.7/ RD外部数据存

8、储器读选通)P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。·RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。DISRT0位缺省为RESET输出高电平打开状态。·ALE:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的16 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一

9、个ALE脉冲。对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。·程序储存允许()输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或数据)时,每个机器周期两次有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的信号。·VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端

10、必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行部程序存储器中的指令。F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。·XTAL1:振荡器反相放大器与部时钟发生器的输入端。(2)时钟接法:(3)复位方法:复位信号是高电平有效,高电平有效的持续时间应为24个时钟周期以上,此实训的时钟频率为12HZ.复位后各寄存器状态为:(PC)=0000H.AT89S51单片机的部结构2.数模转换芯片DAC0832介绍:DAC0832是双列直插式8位D/A转换器。能完成数字量输入到模拟量(电流)输出的转换。右

11、图和下图分别为DAC0832的引脚图和部结构图。其主要参数如下:分辨率为8位,转换时间为1s,满量程误差为±1LSB,参考电压为(+10-10)V,供电电源为(+5+15)V,逻辑电平输入与TTL兼容。从图中可见,在DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号 /XFER。DAC0832引脚图图中,当ILE为高电平,片选信号 /CS 和写信号 /WR1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的输出随输入而变化。此后,当 /WR1由低电平变高时,控制信号成为低电平,此时

12、,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据DB的变化而变化。对第二级锁存来说,传送控制信号 /XFER 和写信号 /WR2同时为低电平时,二级锁存控制信号为高电平,8位的DAC寄存器的输出随输入而变化,此后,当 /WR2由低电平变高时,控制信号变为低电平,于是将输入寄存器的信息锁存到DAC寄存器中。图中其余各引脚的功能定义如下:(1)、DI7DI0 :8位的数据输入端,DI7为最高位。(2)、IOUT1 :模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0。(3)、IOUT2 :模拟电流输出端2, IOUT2与IOU

13、T1的和为一个常数,即IOUT1IOUT2常数。(4)、RFB :反馈电阻引出端,DAC0832部已经有反馈电阻,所以 RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。(5)、VREF :参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF围为(+10-10)V。VREF端与D/A部T形电阻网络相连。(6)、Vcc :芯片供电电压,围为(+5 15)V。(7)、AGND :模拟量地,即模拟电路接地端。(8)、DGND :数字量地。DAC0832部结构图DAC0832可处于三种

14、不同的工作方式:1.直通方式 :当ILE接高电平,、和都接数字地时,DAC处于直通方式,8位数字量一旦到达DI7DI0输入端,就立即加到8位D/A转换器,被转换成模拟量。例如在构成波形发生器的场合,就要用到这种方式,即把要产生基本波形的数据存在ROM中,连续取出送到DAC去转换成电压信号。2.单缓冲方式 :只要把两个寄存器中的任何一个接成直通方式,而用另一个锁存器数据,DAC就可处于单缓冲工作方式。一般的做法是将和都接地,使DAC寄存器处于直通方式,另外把ILE接高电平,接端口地址译码信号,接CPU的信号,这样就可以通过一条MOVX指令,选中该端口,使和有效,启动D/A转换。3.双缓冲方式 :

15、主要在以下两种情况下需要用双缓冲方式的D/A转换。需在程序的控制下,先把转换的数据输入输入缓存器,然后在某个时刻再启动D/A转换。这样,可先选中端口,把数据写入输入寄存器;再选中端口,把输入寄存器容写入DAC寄存器,实现D/A转换。在需要同步进行D/A转换的多路DAC系统中,采用双缓冲方式,可以在不同的时刻把要转换的数据打入各DAC的输入寄存器,然后由一个转换命令同时启动多个DAC转换。先用3条输出指令选择3个端口,分别将数据写入各DAC的输入寄存器,当数据准备就绪后,再执行一次写操作,使变低同时选通3个D/A的DAC寄存器,实现同步转换。3.数码管驱动芯片74LS373介绍:74LS3737

16、4LS373 3为三态输出的八 D 透明锁存器,共有 54/74S373 和 54/74HC373 两种线路 结构型式,其主要电器特性的典型值如下(不同厂家具体值有差别): 型号 tPd PD 54S373/74S373 7ns 525mW 54LS373/74HC373 17ns 120mW 373 的输出端 O0O7 可直接与总线相连。 当三态允许控制端 OE 为低电平时,O0O7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,O0O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为

17、低电平时,O 被锁存在 已建立的数据电平。 当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。 引脚说明: 1OE低电平有效2, 5, 6, 9, 12, 15, 16, 19Q0 to Q7输出引脚3, 4, 7, 8, 13, 14, 17, 18D0 to D7输入引脚10GND接地11LE高电平有效20VCC电源4.运算放大器OP07介绍:Op07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。由于OP07具有非常低的输入失调电压(对于OP07A最大为25V),所以OP07在很多应用场合不需要额外的调零措施。OP07同时具有输入偏置电流低(OP0

18、7A为±2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。特点:超低偏移: 150V最大 。 低输入偏置电流: 1.8nA 。低失调电压漂移: 0.5V/ 。超稳定,时间: 2V/month最大 高电源电压围: ±3V至±22VOP07管脚图引脚功能说明: 1脚和8脚为偏置平衡(调零端),2脚为反向输入端,3脚为正向输入端,4脚接地,5脚空脚 6脚为输出,7脚接电源正极。5.7805和7905介绍:7805的引脚说明:1脚输入,2脚接地,三脚输出。7905的

19、引脚说明:1脚接地,2脚输入,三脚输出。五、工作原理:按钮从单片机的P3.0-P3.4口输入加减(附加波形)信号,经过单片机部处理后由P1.0-1.7口和P2.2P2.3口输出高低不同的电平点亮数码管,显示相应的数值。同时单片机从P0.0-P0.7口输出高低电平来给数模转换芯片DAC0832提供输入信号,DAC0832再对信号进行数模转换后对OP07提供相应的输入量,OP07对输入量变换和反向之后在输出端输出与数码管显示值一样的双向电压,从而完成设计的要求。六、Proteus仿真图:七、Protel电路原理图:八、PCB图:九、实物图:十、程序流程图:开始显示初始化是否有键按下正弦波按键三角波

20、按键矩形波按键按加1按键减1按键显示正弦波显示三角波显示矩形波数码管显示按键设定的电压值,并经单片机将其转换为相对应数字量,送到DA,进行数模转换N 扫描键盘,YDAC0832工作,将数字量转换为模拟量,并输出至OP07,经OP07将电流转化为电压输出复位按键判断电压值是否等于5VYN十一、程序:#include<regx51.h>#include<math.h>#define timer0_count 0xfc18/定时器初值,设置time0 1/1000秒中断一次const seven_seg10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82

21、,0xf8,0x80,0x90;/数码管的显示const seven_seg_point10=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/有小数点的数码管显示char scan1=0,scan2=0; /用来分别显示2个数码管unsigned char counter8=0x08,0x04,0x02,0x01;unsigned char j=0,vout=0; /j_片选,vout_电压输出static void timer0_isr(void) interrupt TF0_VECTOR using 1 /timer0中断/次函数只是用

22、于LED数码管的动态显示 TR0=0; /停止时钟0TL0=(timer0_count & 0x00ff);TH0=(timer0_count>>8); /设置time0 初值TR0=1; /开时钟P2=counterj;switch(j) case 0:P1=seven_segscan1;break; case 1:P1=seven_seg_pointscan2;break; default:break;/j为其他情况是跳出循环 j+;if(j=2) j=0; static void timer0_initialize(void)/timer0的初始化/定时器的初始化程序

23、 EA=0;/中断控制器IE停止接受中断 TR0=0; /停止计时TMOD=0x01; /设置工作方式为1TL0=(timer0_count & 0x00ff); TH0=(timer0_count>>8); /设置time0 初值PT0=1; /设置timer0高优先级ET0=1; /允许timer0中断TR0=1; /开始计时EA=1; /开所有中断void delay(void) /由于按键消抖动 unsigned char i,j; for(i=0;i<200;i+) for(j=0;j<250;j+);void delay_out(void) /用于D

24、/A转换的延时 unsigned char i,j; for(i=0;i<10;i+) for(j=0;j<20;j+);void delay_square(void) /用于方波的延时 unsigned char i,j; for(i=0;i<100;i+) for(j=0;j<200;j+);int keypressedup() /按键检测程序,检测“电压增加按键”P3_0是否按下if(P3_0=0) delay();if(P3_0=0)delay();if(P3_0=0)return(1);/这里一共用了3个delay()延时目的是为了消除P3_0按下时的弹起时间

25、 else return(0);int keypresseddown() /按键检测程序,检测“电压减小按键”P3_1是否被按下if(P3_1=0) delay();if(P3_1=0)delay();if(P3_1=0)return(1);/这里一共用了3个delay()延时目的是为了消除P3_1按下时的弹起时间 else return(0); int keypressedtriangle() /“三角波按键”P3_2是否被按下 /while(P3_1=1);/当P3_1=1时执行空操作,并且程序总是处在等待状态 / delay();if(P3_2=0) delay(); if(P3_2=0

26、)delay();if(P3_2=0)return(1);/这里一共用了两个delay()延时目的是为了消除P3_1按下时的弹起时间 else return(0); int keypressedsin() /“正弦波按键”P3_3是否被按下 /while(P3_1=1);/当P3_1=1时执行空操作,并且程序总是处在等待状态 / delay();if(P3_3=0) delay(); if(P3_3=0)delay();if(P3_3=0)return(1);/这里一共用了两个delay()延时目的是为了消除P3_1按下时的弹起时间 else return(0); int keypressed

27、square() /“矩形波按键”P3_4是否被按下 /while(P3_1=1);/当P3_1=1时执行空操作,并且程序总是处在等待状态 / delay();if(P3_4=0) delay(); if(P3_4=0)delay();if(P3_4=0)return(1);/这里一共用了两个delay()延时目的是为了消除P3_1按下时的弹起时间 else return(0); void vout_up_down(void)/输出电压的增减 if(keypressedup() /“按键+”被有效按下 scan1+; if(scan1=10) scan1=0; scan2+; if(scan2=5) scan2=0;if(keypresseddown() /“按键-”被有效按下 scan1-; if(scan1=-1) scan1=9; scan2-; if(scan2=-1) scan2=4; vout=255*(scan2*10+scan1)/50;/输出的数字量P0=vout;delay_out();/输出是存在D/A转换时间差所以要延时void vout_sin(void) /输出正弦波 float x; /用于正弦波发生器if(keypressedsin() / “正弦波按键”被有效按下 do for(x=-3.1415;x<3.1415;x+=0.1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论