《单片机课程设计报告-基于AT89S52单片机的多功能函数信号发生器.doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告-基于AT89S52单片机的多功能函数信号发生器.doc(22页珍藏版)》请在三一文库上搜索。
1、河南理工大学本科课程设计报告摘要本设计是基于AT89S52单片机的多功能函数信号发生器。该设计以单片机作为控制核心,外围采用模拟/数字转换电路(DAC0832)、运放电路(LM324)、按键和LED显示灯电路等,可以产生方波、三角波和锯齿波三种波形。输出波形的周期可调,波形的频率范围为100Hz1kHz;频率步进间隔为25Hz。输出波形的峰值可调,波形幅度范围为05V,可按步进0.1V(峰-峰值)调整。LED数码管具有显示输出波形的类型和频率的功能。其中单片机通过软件对键盘输入的频率数值进行处理,处理结果送与D/A转换部分实现数/模转换,输出的电流再经过电流/电压转换环节,进而形成模拟电压波形
2、,最后经过过载保护电路输出。同时在LED数码管内显示该频率数值和所对应的波形。波形的切换可以通过按键直接实现。输出波形电压的峰值通过调节DAC0832的参考电压来实现。系统中所需的电源,由独立的供电电路实现。通过变压器将工频电压降低,经整流、滤波之后,由集成稳压芯片7812和7912将电压值稳定在+12V和-12V,实现对外围电路的稳定供电。通过对本设计的PROTUES仿真与硬件测试,分别实现了三种波形的连续输出,并能够通过按键实现不同波形之间的相互切换;波形的频率可通过按键按25Hz的步进间隔进行调整,并能通过LED数码管实现波形类型和频率的显示。通过对DAC0832参考电压的调整,实现了对
3、输出波形峰值的调整。本设计基本上实现了系统设计所要求的功能。关键词:AT89S52单片机;信号发生器;DAC0832目录1 概述31.1 系统功能概述31.2 设计原理31.3 设计思想41.4 设计功能42 系统总体方案及硬件设计52.1 总体方案说明52.2 系统各部分硬件电路设计53 软件设计113.1 系统总体控制功能图113.2 各波形的产生114 Proteus软件仿真154.1 系统仿真环境154.2 器件参数选取154.3 仿真结果分析155 课程设计体会17参考文献17附1: 源程序代码18附2: 系统原理图221 概述1.1 系统功能概述本文是基于AT89S52单片机的多功
4、能函数信号发生器。这个单片机用于产生最初的信号源,通过单片机循环产生数据,再将数据传给数模转换芯片。单片机通过内部程序控制给出数据的频率,从而控制整个系统的信号输出频率。单片机送给数模转换芯片DAC0832的数据通过内部器件转换成模拟信号输出,这是输出的是数字信号,需要通过运算放大器转化为模拟信号,通过两级运放转化,得到双极性的信号。本系统的设计以单片机作为控制核心,外围采用模拟/数字转换电路(DAC0832)、运放电路(LM324)、按键和LED显示灯电路等,可以产生方波、三角波和锯齿波三种波形。输出波形的周期可调,波形的频率范围为100Hz1kHz;频率步进间隔为25Hz。输出波形的峰值可
5、调,波形幅度范围为05V,可按步进0.1V(峰-峰值)调整。LED数码管具有显示输出波形的类型和频率的功能。系统中有四个按键与单片机的P1口相连,分别为方波、三角波、锯齿波和频率调整,当P1.0按键按下时,P1.0引脚为低电平,系统的输出波形为方波,同样的道理,当P1.1按键和P1.2按键分别按下时,系统的输出波形分别对应为三角波和锯齿波。而当P1.3按键按下时,可按25Hz的频率步进间隔对输出波形的频率进行调整。整个系统的输入设备为与P1口相连的四个按键,输出为与按键相应的波形。1.2 设计原理数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需
6、要的波形。AT89S52单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将AT89S52再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图1.1所示。AT89S52单片机 接口 电路 D/A 转换器 滤波 放大输出图1.1 信号发生器系统原理框图AT89S52单片机是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号频率的
7、调节。当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。1.3 设计思想(1)利用单片机产生方波、正弦波、三角波和锯齿波等信号波形,信号的频率和幅度可变。(2)将一个周期的信号分离成256个点(按X轴等分,三角波为512个点),每两点之间的时间间隔为T,用单片机的定时器产生,其表示式为:T=T/512(其中三角波为T=T/512)。如果单片机的晶振为12MHz,采用定时器方式1,则定时器的初值为: 定时时间常数为: MOD32表示除32取余数。 (3)一个周期被分离成256(512)个点,由单片机程序产生波形数据,通过D/A进行数模转换输出模拟波形。(4)频率的调整
8、通过程序进行。由初值计算公式导出频率调整公式:其中N为信号被分离的点数(对于方波和锯齿波N为512,对于三角波N为256),FREQ为波形的频率。通过按键修改FREQ的值来改变装入定时器的计数初值,从而改变波形的频率。1.4 设计功能(1)本设计利用P1口接4个独立式按键,1个LED显示器。其中“P1.0”键代表方波输出,“P1.1”键代表三角波输出,“P1.2”键代表锯齿波输出,“P1.3” 键进行频率调整。(2)输出波形的频率范围为100Hz1kHz;频率步进间隔100Hz。(3)输出波形幅度范围05V,可按步进0.1V(峰-峰值)调整。2 系统总体方案及硬件设计2.1 总体方案说明该智能
9、函数信号发生器由电源电路、晶振电路、复位电路、下载电路、单片机、模拟/数字转换电路、运放电路、按键和LED显示灯电路组成。可以实现方波、三角波和锯齿波三种波形的连续输出,并能够通过按键实现不同波形之间的相互切换;波形的频率可通过按键按25Hz的步进间隔进行调整,并能通过LED数码管实现波形类型和频率的显示。并能通过对DAC0832参考电压的调整,实现对输出波形峰值的调整。2.2 系统各部分硬件电路设计2.2.1 AT89S52单片机简介与最小系统设计AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。AT89S52使用Atmel 公司高密度非易失性
10、存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,AT89S52拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。2.2.2 复位电路设计MCS-52单片机通常采用上电自动复位、按钮电平复位、外部脉冲复位、上电+按钮电平复位、程序运行监视复位等方式。AT89S52需要外加复位电路,本设计采用按键+上电复位,上电复位是利用电容充电来实现的,即上电瞬间RST/Vpd端的电位与Vcc相同,随着充电电流的减少,最后被嵌位在0V,采用10uF的C3和10
11、K的R4可以保证加在引脚上的高电平持续2个机器周期,即使单片机有效地复位。按键可以随时使电路复位,当键按下时1K的R1和10K的R2串联分压使RST为高电平,即复位。图2.1 复位电路图2.2.3 时钟晶振电路MCS-51内部有一个用于构成震荡器的高增益反向放大器,此放大器的输入端和输出端分别是XTAL1和XTAL2,在XTAL1和XTAL2上外接晶振可构成时钟电路。时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。晶振频率的大小决定了单片机系统工作的快慢。本次设计采用内部方式的外部时钟接法。为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,电容C1、C2对频率有
12、微调作用,故外接晶振时,C1和C2在本设计中选择30pF,振荡频率取12MHz。晶振的两个引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。如下图所示:图2.2 时钟晶振电路图2.2.4 显示电路本次设计中采用共阴极数码管作为显示器。LED的驱动电路简单,使用方便,具有耗电少、成本低廉、配置简单灵活、安装方便、耐振动、使用寿命长等优点。LED显示器与单片机的接口一般有动态显示与静态显示接口两种电路。1、静态显示方式:是指当显示器显示某一字符时,发光二极管的位选始终被选中。在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制,显示稳定,提高了CPU的工作效率。其不足之处是占
13、用硬件资源较多,每个LED数码管需要独占8条输出线。随着显示器位数的增加,需要的I/O口线也将增加。2、动态显示方式:动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间轮流点亮。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关, 由于扫描速度极快,显示效果与静态驱动相同。通过调整电流和时间参数,可以既保证亮度,又保证显示。本次设计中,由于单片机本身提供的I/O口有限,本次设计采用动态显示,数码管采用的是共阴极接法。用AT89S52的P0口作段码输出时,
14、 驱动能力相当大,但由于输出极为漏极开路电路,驱动拉电流负载,引脚上应外接上拉电阻。因此,在本次设计中我们将数码管各段加上拉电阻后接单片机P0口。把单片机的P1.0P1.4管脚直接接到数码管的位选端作为位选信号,低电平有效。图2.3 LED显示电路图2.2.5 数摸转换电路本设计采用DAC0832芯片构成模数转换电路。DAC0832系列为美国国家半导体公司生产的具有2个数据寄存器的8位分辨率的D/A转换芯片。此芯片与微处理器完全兼容,可以完全相互代换,并且价格低廉,接口简单,转换控制容易,在单片机应用系统中得到了广泛的应用。其内部由8位输入锁存器、8位DAC寄存器、8位D/A转换器电路及转换控
15、制电路构成,通过两个输入寄存器构成两级数据输入锁存。DAC0832的芯片管脚图如下图所示。图2.4 DAC0832的管脚图本设计中,让DAC0832工作在直通工作方式,其片选信号接单片机的P3.0管脚,由程序对芯片的转换进行控制。数据位接单片机的P2口。写信号、及传送控制信号的引脚全部接地,允许输入锁存信号ILE引脚+5V时。其基准电压VREF引脚经电位计接+5V电压,通过改变基准电压值来改变输出信号的峰值电压。在程序的控制下,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。图2.5 数模转换电路原理图2.2.6 运放电路本设计中使用LM324芯片构成运放电路,实现对DAC0832输出
16、的小信号的放大,并进行电流/电压的转换。LM324系列运算放大器是价格便宜的带差动输入功能的四运算放大器。 LM324的特点如下:1.短跑保护输出。2.真差动输入级。3.可单电源工作:3V-32V。4.低偏置电流:最大100nA(LM324A)。5.每封装含四个运算放大器。6.具有内部补偿的功能。7.共模范围扩展到负电源。8.行业标准的引脚排列。9.输入端具有静电保护功能。图2.6 LM324的管脚图设计中采用双极性输出,所使用的运放电路图如下图所示。图2.7 LM324运放电路原理图2.2.7 按键电路本设计中的按键电路由四个独立按键构成,分别与单片机的P1.4P1.7管脚相连接,并经过74
17、LS00(实现四输入与门的功能)与单片机的P3.2管脚(外部中断0)想接,利用中断和扫描的方式来实现波形的切换和信号频率的调整。其中P1.4P1.6按键分别对应方波、三角波和锯齿波,而P1.7按键用于对信号频率的调整。按键电路如图2.8 所示。图2.8 按键电路原理图2.2.8 电源电路本设计的电源电路是通过变压器将工频电压转换成低压,然后通过整流桥的整流、电容的滤波以及7812和7912的稳压,形成稳定的+12V电压和-12V电压,实现对模数转换电路和运放电路的稳定供电。系统中所需要的+5V电压,均通过USB直接供电。单片机外围电路的供电电路图如下图所示。图2.9 电源电路原理图3 软件设计
18、3.1 系统总体控制功能图图3.1 系统总体控制功能图3.2 各波形的产生3.2.1 方波的产生此波形的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。其流程图如下:3.2.2 三角波的产生三角波的实现是设置一个初值,然后进行加数,加到某个数之后再进行减数,减到初值之后就再返回到先前的操作。此程序输入的VREF的电压是5V,因此对于相同的中断间隔,该波形输出的最大周期是初值为0和最终值为256,且步数为1,这样输出的波形是最大的。程序流程图如下图所示:3.2.3 锯齿波的产生锯齿波的
19、实现过程是首先定义一个初值然后进行加法操作,然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。在本程序中初值为0.最大值为255。否是开始设置初值num(字符型)=0将num值赋给P2口使num一直加1判断num值是否为255将num值置为03.3 系统按键的实现过程波形的切换和频率的调整通过四个独立按键来实现。按下一个开关通过P1.4为0则输出方波,P1.5为0输出三角波,P1.6为0输出锯齿波,P1.7为0则频率步进25Hz。其流程图如下图所示:4 Proteus软件仿真4.1 系统仿真环境本设计采用Proteus仿真软件进行仿真,Proteus软件是英国Labce
20、nter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。首先在Proteus的元件库中找到所需的元件,按照硬件设计中的说明把各部件连接起来组成一个数字式温度计硬件系统。然后把在Keil环境调试下生成的.HEX文件导入到AT89S52里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现,以检查是否存在错误。4.2 器件参数选取单片机采用AT89S52,时钟频率为12MHz。时钟产生电路的晶振为12MHz,接地电容为30pF。复位电路的电解电容为10uF,与电容并联的电
21、阻为1K,接地的电阻为10K。系统的仿真原理图如图4.1所示:图4.1 系统的仿真原理图4.3 仿真结果分析- 22 - 图4.2.1方波波形 图4.2.2调频后的方波图 4.2.3调幅后的方波 图4.2.4 三角波波形 图4.2.5 调频的三角波 图4.2.6 调幅后的三角波 图4.2.7 锯齿波波形 图4.2.8 调频后的锯齿波 图4.2.9 调幅后的锯齿波5 课程设计体会课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题的能力。通过这次单片机课程设计,使我们对单片机的结构、基本工作原理、单片机应用系统开发有了进一步的了解,特别是在硬件设计和软件编程方面有了很大提高。函数信
22、号发生器的硬件设计电路简单,但对各芯片的性能及工作原理不是很熟悉;软件设计并不太复杂,但需要搞清其工作原理,时序。在设计的过程中,通过请教老师和同学,上网或上图书馆查资料将这些问题解决。这样不仅巩固了以前所学过的知识,加深了我对所学知识的理解,而且学到了很多在书本上未涉及的知识,锻炼了搜集有用信息的能力。软件编程过程中,由于采用C语言编程,以前虽然有过接触,但并不是很熟练,所以参考了别人的设计思路,琢磨研究弄懂后,又试着修改程序。在不满足要求时反复思考,研究错误出在哪里,经过不懈努力,最终找出错误所在,满足了基本的设计要求。在编译仿真时对软件Keiv uVision4.0和Proteus认识更
23、多,发现了Proteus的很多优点,同时也发现它的不足之处,过于理想化,如果完全依赖,则硬件有可能无法工作。在硬件设计过程中,需要考虑很多问题,例如元器件参数的选取,单片机的实际驱动能力。在实际电路的设计时,必须软硬件相结合,使布局合理且软件设计的简单。但由于是第一次焊接电路板,焊工不熟练,布线不美观以至于在实际焊接时出现了不少问题。不过,这些问题最终都被解决。本次设计由两人共同完成,也培养了我们的团队合作精神。总的来说,这次课程让我们收获很大。参考文献 1 余发山主编.单片机原理及应用技术.徐州:中国矿业大学出版社.2003.122 雷发禹,宾淼林,李永枧,等.基于单片机的信号发生器设计与仿
24、真.邵阳学院学报(自然科学版),2009,6(3):39-433 谭浩强著.C语言程序设计.清华大学出版社.2005.7附1: 源程序代码#include#define uint unsigned int#define uchar unsigned charsbit squ=P14;sbit tri=P15;sbit ser=P16;sbit freq=P17;sbit cs=P30;bit flag;uint qian,bai,shi,ge;uint FREQ;uchar num,cho;uchar TIME0_H=0xff,TIME0_L=0xb1; /定时器的初值设定uchar ledd
25、ata=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39;void initial()FREQ=100;/初始频率设定为100Hzcho=0;cs=0;TMOD=0X01; /定时器0,模式1TH0=0xff;TL0=0xb1;IT0=1; /外部中断0,下降沿触发EX0=1;ET0=1;EA=1;TR0=1;void squwave()/方波,256次间断构成一个周期。若频率50Hz,即0.02=256*Ts,/则定时初值为65536-Ts*106; /初值计算公式:65536-106/(N*FREQ)if(+n
26、um0;i-); /频率调整void freq_u()uint temp;if(freq=0)FREQ+=25;if(FREQ=1000) /保证频率在100Hz到1KHz之间,达到边界频率时,调/整为初始频率FREQ=100;if(cho=0|cho=2)temp=65536-3906/FREQ; /方波和锯齿波N=256;65336-106/(N*FREQ)TIME0_H=temp/256;TIME0_L=temp%256;if(cho=1)temp=65536-1953/FREQ; /三角波N=512;65336-106/(N*FREQ)TIME0_H=temp/256;TIME0_L=
27、temp%256;/对显示的频率数据进行处理void datadeal_f()bai=FREQ/100;shi=FREQ%100/10;ge=FREQ%10;/按键中断处理程序void keydeal() interrupt 0if(squ=0)/切换为方波FREQ=100;cho=0;qian=10;/最高位显示“A”,指示方波if(tri=0)/切换为三角波FREQ=100;cho=1;qian=11;/最高位显示“b”,指示三角波if(ser=0)/切换为锯齿波FREQ=100;cho=2;qian=12;最高位显示“C”,指示锯齿波 if(freq=0)freq_u();datadea
28、l_f();/定时器中断处理程序void intwave() interrupt 1 switch(cho) case 0:TH0=TIME0_H;TL0=TIME0_L;squwave();break;/方波 case 1:TH0=TIME0_H;TL0=TIME0_L;triwave();break;/三角波case 2:TH0=TIME0_H;TL0=TIME0_L;serwave();break;/锯齿波default: ; /数码管显示void display() P0=leddataqian;/显示波形,A代表方波,“b”代表三角波,/“C”代表锯齿波。P1=0xfe;delay();P0=0x00;P0=leddatabai;/显示频率第1位P1=0xfd;delay();P0=0x00;P0=leddatashi;/显示频率第2位P1=0xfb;delay();P0=0x00;P0=leddatage;/显示频率第3位P1=0xf7;delay();P0=0x00;/主函数void main()initial();while(1)display();附2: 系统原理图