单片机多功能函数信号发生器设计毕业设计.docx
《单片机多功能函数信号发生器设计毕业设计.docx》由会员分享,可在线阅读,更多相关《单片机多功能函数信号发生器设计毕业设计.docx(23页珍藏版)》请在冰豆网上搜索。
单片机多功能函数信号发生器设计毕业设计
毕业论文
题目
单片机控制多功能信号发生器
学生姓名
学号
系部
电子工程系
专业
应用电子技术
班级
指导教师
顾问教师
摘要
本文介绍一种用AT89C51单片机构成的波形发生器,可产生方波、三角波、正弦波、锯齿波等多种波形,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。
文章给出了源代码,通过仿真测试,其性能指标达到了设计要求。
关键词:
单片机;DAC;信号发生器
第一章绪论
1.1单片机概述
随着大规模集成电路技术的发展,中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。
单片机具有体积小、成本低,性能稳定、使用寿命长等特点。
其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机和网络都无法做到的[9,10]。
1.2信号发生器的分类
信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致。
按照频率范围分类可以分为:
超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。
按照输出波形分类可以分为:
正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:
脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。
按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。
前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。
后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器[5]。
1.3研究内容
本文是做基于单片机的信号发生器的设计,将采用编程的方法来实现三角波、锯齿波、矩形波、正弦波的发生。
根据设计的要求,对各种波形的频率和幅度进行程序的编写,并将所写程序装入单片机的程序存储器中。
在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出。
第二章方案的设计与选择
2.1方案的比较
方案一:
采用单片函数发生器(如8038),8038可同时产生正弦波、方波等,而且方法简单易行,用D/A转换器的输出来改变调制电压,也可以实现数控调整频率,但产生信号的频率稳定度不高。
方案二:
采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。
方案三:
采用单片机编程的方法来实现。
该方法可以通过编程的方法来控制信号波形的频率和幅度,而且在硬件电路不变的情况下,通过改变程序来实现频率的变换。
此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。
鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。
它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证,而且它使用的几种元器件都是常用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省[1,7]。
2.2设计原理
数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。
89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:
中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图2.1所示[2]。
输出
图2.1信号发生器原理框图
89C51是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号幅度的调节。
当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。
2.3设计思想
(1)利用单片机产生方波、正弦波、三角波和锯齿波等信号波形,信号的频率和幅度可变。
(2)将一个周期的信号分离成256个点(按X轴等分),每两点之间的时间间隔为
T,用单片机的定时器产生,其表示式为:
T=T/256。
如果单片机的晶振为12MHz,采用定时器方式0,则定时器的初值为:
X=213—
T/Tmec(2.1)
定时时间常数为:
TL=(8192—
T)/MOD256(2.2)
TH=(8192
T)/256(2.3)
MOD32表示除32取余数
(3)正弦波的模拟信号是D/A转换器的模拟量输出,其计算公式为:
Y=(A/2sin
t)+A/2(其中A=VREF)(2.4)
t=N
T(N=1~256)(2.5)
那么对应着存放在计算机里的这一点的数据为:
(2.6)(4)一个周期被分离成256个点,对应的四种波形的256个数据存放在以TAB1--TAB4为起始地址的存储器中。
2.4设计功能
(1)本方案利用8155扩展8个独立式按键,6个LED显示器。
其中“S0”号键代表方波输出,“S1”号键代表正弦波输出,“S2”号键代表三角波输出,“S3”号键代表锯齿波输出。
(2)“S4”号键为10Hz的频率信号,“S5”号键为100Hz的频率信号,“S6”号键为500Hz的频率信号,“S7”号键为1KHz的频率信号,6个LED显示器输出信号的频率值,选用共阳极LED。
(3)利用两片DAC0832实现幅度可调的信号源,(其中一片用来调节幅度,另外一片用来实现信号源的输出)。
(4)频率范围:
10~1000Hz。
(5)输出波形幅度为0~5V。
第三章硬件设计
3.1硬件原理框图
硬件原理方框图如图4.1所示。
图4.1硬件原理框图
3.2主控电路
AT89C51单处机内部设置两个16位可编程的定时器/计数器T0和T1,它们具有计数器方式和定时器方式两种工作方式及4种工作模式。
在波形发生器中,将其作定时器使用,用它来精确地确定波形的两个采样点输出之间的延迟时间。
模式1采用的是16位计数器,当T0或T1被允许计数后,从初值开始加计数,最高位产生溢出时向CPU请求中断。
中断系统是使处理器具有对外界异步事件的处理能力而设置的。
当中央处理器CPU正在处理某件事的时候外界发生了紧急事件,要求CPU暂停当前的工作,转而去处理这个紧急事件。
在波形发生器中,只用到片内定时器/计数器溢出时产生的中断请求,即是在AT89C51输出一个波形采样点信号后,接着启动定时器,在定时器未产生中断之前,AT89C51等待,直到定时器计时结束,产生中断请求,AT89C51响应中断,接着输出下一个采样点信号,如此循环产生所需要的信号波形[6]。
如图3.2所示,AT89C51从P0口接收来自键盘的信号,并通过P2口输出一些控制信号,将其输入到8155的信号控制端,用于控制其信号的输入、输出。
如果有键按下,则在读控制端会产生一个读信号,使单片机读入信号。
如果有信号输出,则在写控制端产生一个写信号,并将所要输出的信号通过8155的PB口输出,并在数码管上显示出来。
图3.2主控电路图
3.3数/模转换电路
由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。
DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。
但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。
DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。
由图3.3可知,DAC0832的片选地址为7FFFH,当P25有效时,若P0口向其送的数据为00H,则U1的输出电压为0V;若P0口向其送的数据为0FFH时,则U1的输出电压为-5V.故当U1输出电压为0V时,由公式得:
Vout=-5V.当输出电压为-5V时,可得:
Vout=+5V,所以输出波形的电压变化范围为-5V~+5V.故可推得,当P0所送数据为80H时,Vout为0V[4]。
图3.3数模转换电路
3.4按键接口电路
图3.4为键盘接口电路的原理图,图中键盘和8155的PA口相连,AT89C51的P0口和8155的D0口相连,AT89C51不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。
其中“S0”号键代表方波输出,“S1”号键代表正弦波输出,“S2”号键代表三角波输出。
“S3”号键代表锯齿波输出,“S4”号键为10Hz的频率信号,“S5”号键为100Hz的频率信号,“S6”号键为500Hz的频率信号,“S7”号键为1KHz的频率信号[3]。
图3.4按键接口
3.5时钟电路
8051单片机有两个引脚(XTAL1,XTAL2)用于外接石英晶体和微调电容,从而构成时钟电路,其电路图如图4.5所示。
电容C1、C2对振荡频率有稳定作用,其容量的选择为30pf,振荡器选择频率为12MHz的石英晶体。
由于频率较大时,三角波、正弦波、锯齿波中每一点的延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的频率波形[9]。
图3.5时钟电路
3.6显示电路
显示电路是用来显示波形信号的频率,使得整个系统更加合理,从经济的角度出发,所以显示器件采用LED数码管显示器。
而且LED数码管是采用共阳极接法,当主控端口输出一个低电平后,与其相对应的数码管即变亮,显示所需数据。
其器件模型如图4.6所示。
图3.6LED显示电路
第四章软件设计
4.1程序流程图
本文中子程序的调用是通过按键的选择来实现,在取得按键相应的键值后,启动计时器和相应的中断服务程序,再直接查询程序中预先设置的数据值,通过转换输出相应的电压,从而形成所需的各种波形。
主程序的流程图如图4.1所示,在程序开始运行之后,首先是对8155进行初始化,之后判断信号频率值,如符合所需的频率,则重置时间常数,并通过显示器显示出来,不符则返回。
在中断结束后,还要来判断波形是否符合,如符合,则显示其频率,不符则返回,重新判断。
图4.1主程序流程图
图4.2为各波形子程序的流程图。
如图所示,在中断服务子程序开始后,通过判断来确定各种波形的输出,当判断选择的不是方波后,则转向对正弦波的判断,如此反复。
如果选择的是方波,则用查表的方法求出相应的数据,并通过D/A转换
器将数据转换成模拟信号,形成所需波形信号。
图4.2子程序流程图
第五章总结与展望
这种基于单片机的信号发生器已经展示出很好的性能,而且有着很高的性价比。
此外,它产生的波形与模拟电路的波形相比,波形有着更好的平滑性,其周期性也更加稳定。
已经越来越多的应用到各种电子设备当中,给人们的日常生活带来了方便。
在论文中简单介绍了它的用途和发展趋势,根据它的一些基本知识,按照自己的想法设计了一类信号发生器,具体包括了设计方案以及相关参数的选取和计算,根据工作基本原理加入了一些相关的辅助电路,并编写了相关的应用程序。
有些指标还有待于进一步提高。
例如,在精度及其它功能的扩展上还有较大的潜力可以挖掘,这些都有待于我们通过对电路的改进和对元器件的最佳选择来进一步完善。
而且由于本人所学知识有限,很多知识点的学习不够深刻,我会在以后的学习中更加踏实、认真的学好各个知识点。
致谢
时光匆匆如流水,转眼便是大学毕业。
人最宝贵的年华有几个三年,在这里我度过了让我真正成长成熟的三年,记得刚进学校是我是多么的无助与陌生,三年的异地大学生活使我变的成熟,坚强和独立。
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!
感谢我的所有任课老师,他们严谨细致、认真讲解,他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。
感谢我大学三年中交我所有课的老师,三年的大学生活中,不管生活还是学习上都给我很大的帮助,让我从腼腆的小女孩变成能独立面对社会的毕业生。
首先向跟随我们三年的班主任杨婷婷老师致以最诚挚的感谢,她不仅是我们的老师,更是我们的益友,在我的三年大学生活中她不仅给予我们学习上的帮助还给我们生活上很多帮助,锻炼我的各方面能力,使我步入社会时能很快很好的融入。
还要感谢的是在我平时学习中给我很大帮助的老师们,他们渊博的知识,严谨的治学,让我不仅学到了扎实的专业知识,还教会了我如何做人,面对问题养成了沉着冷静,努力解决。
上班了,面对自己不熟悉的环境,我们要适应,上班了没有很多的时间看书,更没有多少时间来做毕业设计,在我们现在做这个设计时,离我们离开学校有半年多了,很多知识我们已经忘掉了,在这里我们要感谢谭伟东老师,在百忙之中抽出时间辅导我们,帮助我们做毕业设计辅导,使我们节省和很多时间,顺利完成毕业设计。
最后要感谢的是我的父母,因他们的给予我才能在这校园里完成我的大学梦想,使我的人生阅历提高,增长见识,提高了自己个方面的素质和涵养。
也要感谢我的同学。
,因为我们团结我们才能高效的完成毕业设计。
在未来的日子里,我会更加努力的学习和工作,不辜负父母对我的殷殷期望!
我一定会好好孝敬和报答他们!
这段时间里边非常感谢谭伟东导师对我们的细心照顾,热情地为我们解决设计中存在的问题。
真的很感谢您谭老师!
当然在设计过程中还得到了周围许多人和老师的帮助,以使我的毕业设计能顺利地完成,在这里也衷心地说声“谢谢了!
”
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!
参考文献
[1]程全.基于AT89C52实现的多种波形发生器的设计[J].周口师范学院学报,2005.22(5):
57~58.
[2]周明德.微型计算机系统原理及应用[M].北京:
清华大学出版社,2002.341~364.
[3]刘乐善.微型计算机接口技术及应用[M].北京:
北京航空航天大学出版社,2001.258~264.
[4]童诗白.模拟电路技术基础[M].北京:
高等教育出版社,2000.171~202.
[5]杜华.任意波形发生器及应用[J].国外电子测量技术,2005.1:
38~40.
[6]张友德.单片微型机原理、应用与实践[M].上海:
复旦大学出版社,2004.40~44.
[7]程朗.基于8051单片机的双通道波形发生器的设计与实现[J].计算机工程与应用,2004.8:
100~103.
[8]张永瑞.电子测量技术基础[M].西安:
西安电子科技大学出版社,2006.61~101.
[9]李叶紫.MCS-51单片机应用教程[M].北京:
清华大学出版社,2004.232~238.
附录1电路原理图
附录2源程序
源程序:
ORG0000H
AJMMAIN
ORG000BH
LJMPTC0
ORG0030H
MAIN:
MOVDPTR,#9FFFH指向DAC0832
(1)
MOVA,70H
MOVX@DPTR,ADAC0832
(1)输出
MOVDPTR,#7F00H指向8155命令字端口地址
MOVA,#06H设置A口为输入,B口、C口为输出
MOVX@DPTR,A送命令字
MOVDPTR,#7F01H指向A口地址
MOVXA,@DPTR读入A口的开关数据
JNBACC.4,K10H判断是否“4”号键,若是则转输出10Hz信号
JNBACC.5,K100H判断是否“5”号键,若是则转输出100Hz信号
JNBACC.6,K500H判断是否“6”号键,若是则转输出500Hz信号
JNBACC.7,K1K判断是否“7”号键,若是则转输出1KHz信号
AJMPMAIN
LED1:
MOVR3,#06H设置6个LED显示
MOVR2,#01H选通第一位LED数据
MOVR1,#30H送显示缓冲区首址
GN1:
MOVDPTR,#7F03H指向C口地址
MOVA,R2位选通数据送A
MOVX@DPTR,A位选通数据送C口
RLA选通下一位
MOVR2,A位选通数据送R2中保存
MOVA,@R1取键值
MOVDPTR,#TAB送LED显示软件译码表首址
MOVCA,@A+DPTR查表求出键值显示的段码
MOVDPTR,#7F02H指向B口地址
MOV@DPTR,A段码送显示
LCALLLOOP1调延时子程序
INCR1指向下一位显示缓冲区地址
DJNZR3,GN1循环显示6个LED
RET
LOOP1:
MOVR4,#08H延时子程序
LOOP:
MOVR5,#0A0H
DJNZR5,$
DJNZR4,LOOP
RET
K10H:
MOV30H,#00H显示10Hz
MOV31H,#00H
MOV32H,#00H
MOV33H,#00H
MOV34H,#01H
MOV35H,#00H
LCALLLED1调显示子程序
MOVTMOD,#00H
MOVTL0,#15H
MOVTH0,#9EH
AJMPPD
K100H:
MOV30H,#00H显示100Hz
MOV31H,#00H
MOV32H,#00H
MOV33H,#01H
MOV34H,#00H
MOV35H,#00H
LCALLLED1调显示子程序
MOVTMOD,#00H
MOVTL0,#08H
MOVTH0,#0F6H
AJMPPD
K500H:
MOV30H,#00H显示500Hz
MOV31H,#00H
MOV32H,#00H
MOV33H,#05H
MOV34H,#00H
MOV35H,#00H
LCALLLED1调显示子程序
MOVTMOD,#00H
MOVTL0,#01H
MOVTH0,#0FEH
AJMPPD
K1K:
MOV30H,#00H显示1KHz
MOV31H,#00H
MOV32H,#01H
MOV33H,#00H
MOV34H,#00H
MOV35H,#00H
LCALLLED1调显示子程序
MOVTMOD,#00H
MOVTL0,#01H
MOVTH0,#0FFH
PD:
JNBACC.0,KE0判断是否“0”号键按下,若是则转方波输出
JNBACC.1,KE1判断是否“1”号键按下,若是则转正弦方波输出
JNBACC.2,KE2判断是否“2”号键按下,若是则转三角波输出
JNBACC.3,KE3判断是否“3”号键按下,若是则转锯齿波输出
LJMPPD
KE0:
MOVR7,#00H
LCALLLED1调显示子程序
MOVR6,#00H
AJMPGN
KE1:
MOVR7,#02H
LCALLLED1调显示子程序
MOVR6,#00H
AJMPGN
KE2:
MOVR7,#02H
LCALLLED1调显示子程序
MOVR6,#00H
AJMPGN
KE3:
MOVR7,#02H
LCALLLED1调显示子程序
MOVR6,#00H
GN:
SETBTR0
SETBET0
SETBEA
LOP1:
JNBACC.4,K10H判断是否“4”号键,若是则转输出10Hz信号
JNBACC.5,K100H判断是否“5”号键,若是则转输出100Hz信号
JNBACC.6,K500H判断是否“6”号键,若是则转输出500Hz信号
JNBACC.7,K1K判断是否“7”号键,若是则转输出1KHz信号
AJMPLOP1
TC0:
CJNER7,#00H,TC1发送方波程序
MOVDPTR,#TAB1送方波数据表首址
MOVA,R6发送数据寄存器
MOVCA,@A+DPTR
MOVDPTR,#0AFFFH指向DAC0832
(2)
MOVX@DPTR,ADAC0832
(2)输出
MOVA,R6
INCA
MOVR6,A
CJNEA,#32,QL1
MOVR6,#00H
AJMPQL1
TC1:
CJNER7,#01H,TC2发送正弦波程序
MOVDPTR,#TAB2送正弦波数据表首址
MOVA,R6
MOVCA,@A+DPTR
MOVDPTR,#0AFFFH指向DAC0832
(2)
MOVX@DPTR,ADAC0832
(2)输出
MOVA,R6
INCA
MOVR6,A
CJNEA,#32,QL1
MOVR6,#00H
AJMPQL1
TC2:
CJNER7,#02H,QL1发送三角波程序
MOVDPTR,#TAB3送三角波数据表首址
MOVA,R6
MOVCA,@A+DPTR
MOVDPTR,#0AFFFH指向DAC0832
(2)
MOVX@DPTR,ADAC0832
(2)输出
MOVA,R6
INCA
MOVR6,A
CJNEA,#32,QL1
MOVR6,#00H
AJMPQL1
TC3:
:
CJNER7,#03H,QL1发送锯齿波程序
MOVDPTR,#TAB4送锯齿波数据表首址
MOVA,R6
MOVCA,@A+DPTR
MOVDPTR,#0AFFFH指向DAC0832
(2)
MOVX@DPTR,ADAC0832
(2)输出
MOVA,R6
INCA
MOVR6,A
CJNEA,#32,QL1
MOVR6,#00H
QL1:
RETI
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,82H,0F8H,80H
TAB1:
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,