用单片机实现波形发生器.docx
《用单片机实现波形发生器.docx》由会员分享,可在线阅读,更多相关《用单片机实现波形发生器.docx(22页珍藏版)》请在冰豆网上搜索。
用单片机实现波形发生器
中北大学信息商务学院
课程设计说明书
学生姓名:
李雅学号:
10050644X06
学生姓名:
梁钧兰学号:
10050644X10
学生姓名:
任媛学号:
10050644X12
学院:
信息与通信工程
专业:
电子信息工程
题目:
专业综合实践之单片机部分:
用单片机实现波形发生器
指导教师:
王浩全职称:
教授
2014年1月10日
中北大学
课程设计任务书
2013/2014学年第1学期
学院:
信息与通信工程
专业:
电子信息工程
学生姓名:
李雅学号:
10050644X06
学生姓名:
梁钧兰学号:
10050644X10
学生姓名:
任媛学号:
10050644X12
课程设计题目:
专业综合实践之单片机部分:
用单片机实现波形发生器
起迄日期:
2013年12月30日~2014年1月10日
课程设计地点:
5院楼201,510实验室
指导教师:
王浩全
下达任务书日期:
2013年12月30日
课程设计任务书
1.设计目的:
本课程设计主要针对电子信息工程专业课程体系设置的要求,安排的一种综合性的课程设计。
一方面为了培养学生在查阅资料、复习、学习知识的基础上,进行包括机、电系统的设计、计算、仿真、编程、调试等多个环节的综合能力培养;另一方面,也是对学生进行毕业设计前的一次大型练兵,进一步培养学生独立地分析、解决实际问题的实际能力。
另外还培养学生用专业的、简洁的文字,清晰的图表来表达自己设计思想的能力。
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):
单片机选用89C51
通过功能选择可以实现阶梯波、正弦波和三角波的输出
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:
(1)提供核心器件的工作原理与应用介绍;
(2)提供用Protel设计的电路原理图,印刷板电路图;
(3)提供用Multisim、MaxPlus、Proteus、Medwin、KeilC等软件对电路的仿真、编程与分析;
(4)提供符合规定要求的课程设计说明书;
(5)提供参考文献不少于15篇,且必须是相关的参考文献;
课程设计任务书
4.主要参考文献:
1张毅坤.单片微型计算机原理及应用.西安电子科技大学出版社,1998
2余锡存,曹国华.单片机原理及接口技术.西安电子科技大学出版社,2000
3吴黎明,王桂棠,洪添胜等.单片机原理及应用技术.科学出版社,2005
4韩克,柳秀山等.电子技能与EDA技术.暨南大学出版社,2004
5周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真.航空航天大学出版社,2006
6李俊谟.单片机中级教程.北京航空航天大学出版社,2006
7胡宴如.模拟电子技术.高等教育出版社,2004
8李朝青.单片机原理及接口技术(修订版).北京:
北京航空航天大学出版社,1998
9李广弟.单片机基础.北京:
北京航空航天大学出版社,1992
10何立民.单片机应用技术大全.北京:
北京航空航天大学出版社,1994
11朱定华,戴汝平等.单片微机原理与应用.北京交通大学出版社,清华大学出版社
12彭介华.电子技术课程设计指导.北京:
高等教育出版社,1997
13江思敏,陈明.Protel电路设计教程.北京:
清华大学出版社
14彭楚武.微计原理与接口技术.长沙:
湖南大学出版社
15张毅刚,彭喜源,谭晓昀,曲春波.MCS-51单片机应用设计.哈尔滨:
哈尔滨工业大学出版社,1997
5.设计成果形式及要求:
(1)电路原理图、程序、仿真结果、PCB图;
(2)课程设计说明书;
6.工作计划及进度:
2013年12月30日~2014年1月1日:
查阅资料;
2014年:
1月2日~1月7日:
方案设计、实验验证;
1月8日~1月9日:
完成课程设计说明书;
1月10日:
答辩。
系主任审查意见:
签字:
年月日
一引言…………………………………………………………………6
二设计目的……………………………………………………………7
三课题设计的内容……………………………………………………7
1实验原理……………………………………………………………7
2实验内容……………………………………………………………7
2.1系统硬件设计……………………………………………………7
2.2系统各个模块的………………………………………………8
2.2.1单片机系统模块…………………………………………8
2.2.2晶振时钟模块…………………………………………10
2.2.3复位电路模块…………………………………………11
2.2.4运用Protues软件模拟示波器进行仿真……………12
四设计过程及数据…………………………………………………13
1信号发生器程序流程图…………………………………………13
2硬件连线图………………………………………………………13
3系统波形控制的实现过程………………………………………13
4三角波的实现过程………………………………………………14
5正弦波的实现过程………………………………………………15
6阶梯波的实现过程………………………………………………17
五实验结果与分析…………………………………………………18
1实验现象、数据记录………………………………………………18
六设计总结与体会…………………………………………………19
七参考文献…………………………………………………………19
一引言
波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。
例如在通信、广播、电视系统中都需要射频发射,这就需要信号发生器,在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振图像等,都需要功率或大或小、频率或高过低的信号。
在现代社会中,自动化技术早已渗透到社会生产的各个领域中,高精度、宽频率、高稳定性的信号发生器对于所属整体系统的性能改善和提高起着至关重要的作用。
多波形的函数信号发生器是电子实验室的基础设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全,性能指标高,但是价格昂贵,本文所研究的信号发生器采用单片机和DAC0832结合起来,通过数字电子电路向模拟电路转化,该系统虽然性能指标不如标准产品,但是它体积小,成本低,便于携带等特点,亦可作为电子随身设备之一。
本次创新性实验将由AT89C51单片机和DAC0832数模转换器构成波形发生器,此波形发生器可产生方波、三角波、锯齿波、梯形波、阶梯波等多种波形,波形的幅值可以用程序进行改变,并可根据需要选择单极性输出,具有线路简单、结构紧凑、价格低廉、性能优越等优点。
在本设计的基础上,加上按键用来更改不同波形之间的切换,实现不同波形的输出。
二设计目的
本课程设计主要针对电子信息工程专业课程体系设置的要求,安排的一种综合性的课程设计。
一方面为了培养学生在查阅资料、复习、学习知识的基础上,进行包括机、电系统的设计、计算、仿真、编程、调试等多个环节的综合能力培养;另一方面,也是对学生进行毕业设计前的一次大型练兵,进一步培养学生独立地分析、解决实际问题的实际能力。
另外还培养学生用专业的、简洁的文字,清晰的图表来表达自己设计思想的能力。
三课题设计的内容
1实验原理
波形的产生是通过AT89C51单片机执行某一波形发生程序,向DAC0832转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。
AT89C51单片机的最小系统有三种联接方式。
一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送D/A转换电路。
第二种是单级缓冲器型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。
第三种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换,本设计采用单缓冲方式。
此次实验设计由硬件设计和软件设计两部分组成,硬件部分利用proteus软件进行模拟仿真验证设计的正确性并产生不同波形,软件设计将利用汇编语言进行编程,通过Protues软件进行编译调试仿真,通过模拟示波器观察输出波形。
实验原理框图如下所示:
2实验内容
(1)单片机选用89C51。
(2)通过功能选择可以实现阶梯波、正弦波和三角波的输出。
2.1系统硬件设计
本系统提供了三种不同的波形输出,通过三个按键控制相应的三角波、正弦波和阶梯波。
每次只能有一个键按下,没有按键按下时没有波形产生,按键输入信号给单片机,单片机对按键的情况进行处理,例如第一个按键按下时,系统需要产生一个三角波,那么单片机循环输出0和1,那么通过DAC0832就通过运放循环输出高低电平,这样系统就能够输出三角波,同样的道理,正弦波和阶梯波的产生也可以采用相似的道理。
本设计的硬件系统分为三个模块:
单片机系统模块,DA转换模块,软件设计模块。
2.2系统各个模块的设计
2.2.1单片机系统模块
(1)配置
●一个8位CPU,片内振荡器
●并行I/O口,32根I/O口线
●一个串行口
●两个定时/计数器
●4KByte的ROM
●128Byte的RAM
●5个中断源,两个中断优先级
●可寻址64KB外部数据存储器空间
单片机内部结构图如下所示:
图单片机内部结构图
(2)单片机管脚图及管脚功能介绍
单片机管脚图如下:
图AT89C51单片机管脚图及并行口分布
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。
P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(定时器0外部输入)
P3.5T1(定时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.2.2晶振时钟模块
单片机的工作过程是:
取一条指令、译码、进行微操作,再取一条指令、译码、进行微操作,这样自动的、一步一步的由微操作依序完成相应的指令规定的功能。
各指令的微操作在时间上有严格的次序,这种微操作的时间次序称作时序。
AT89C51单片机的时钟信号通常由两种方式产生。
一是内部时钟方式,二是外部时钟方式。
内部时钟方式如图2.2-3(a)所示。
只要在单片机的XTAL1和XTAL2引脚外接晶振即可。
图中,电容C1和C2的作用是稳定频率和快速起振,电容值在5-30pF,典型值为30pF。
晶振CYS的震荡频率要小于12MHz,典型值6MHz、12MHz或11.0592MHz。
外部时钟方式是把外部已有的时钟信号引入到单片机内,如图2.2-3(b)所示。
此方式用于多片AT89C51单片机同时工作,并要求各单片机同步运行的场合
图89C51单片机时钟方式
实际应用中通常采用外接晶振的内部时钟方式,晶振的频率高一些时可以提高指令的执行速度,但相应的功耗和噪声也会增加,在满足系统功能的前提下,应选择低一些的晶振频率。
当系统要与PC机通信时,应选择11.0592MHz的晶振,这样便于将波特率设定为标称值。
2.2.3复位电路模块
复位是使单片机或系统中的其他部件处于某种确定的厨师状态。
单片机的工作就是从复位开始的。
当AT89C51的RST引脚加高电平复位信号(保持2个以上机器周期)时,单片机内部就执行复位操作。
复位信号变低时,单片机开始执行程序。
实际操作中,复位操作有两种基本形式:
一种是上电复位,另一种是上电与按键均有效的复位,如图2.2-4(a)所示
图单片机复位电路
上电复位要求接通电源后,单片机自动实现复位操作。
常用的上电复位电路如图2.2-4(a)所示,上电瞬间RST引脚获得高电平,随着电容C1的充电,RST引脚的高电平将逐渐下降。
RST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。
该电路的典型的电阻和电容参数为:
晶振:
12MHz时,C1为10uF,R1为8.2KΩ;晶振为6MHz时,C1为22uF,R1为1KΩ,本电路选用C1为1nF,R1为10KΩ,R2为10KΩ。
按键与上电均有效的复位电路如图2.2-4(b)所示,上电复位原理与图2.2-4(a)相同,另外在单片机运行期间,还可以利用按键完成复位操作。
晶振为6MHz时,R2为200Ω。
实际应用中如果单片机断电后,有可能在较短的时间内再次加电,可以在R1上并接一个放电二极管,这样可以有效的提高此种情况下复位的可能性。
2.2.4运用Protues软件模拟示波器进行仿真
概述:
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译。
功能特点:
丰富的器件库:
超过27000种元器件,可方便地创建新元件;智能的器件搜索:
通过模糊搜索可以快速定位所需要的器件;智能化的连线功能:
自动连线功能使连接导线简单快捷,大大缩短绘图时间;支持总线结构:
使用总线器件和总线布线使电路设计简明清晰;可输出高质量图纸:
通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。
(1)Protues可提供的仿真元器件资源:
仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。
(2)Protues可提供的仿真仪表资源:
示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。
理论上同一种仪器可以在一个电路中随意的调用。
(3)除了现实存在的仪器外,Protues还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。
这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。
这些都尽可能减少了仪器对测量结果的影响。
(4)Protues可提供的调试手段Protues提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
软件仿真:
支持当前的主流单片机,如51系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、68000系列等。
(1)、提供软件调试功能。
(2)、提供丰富的外围接口器件及其仿真。
RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
这样很接近实际。
在训练学生时,可以选择不同的方案,这样更利于培养学生。
(3)、提供丰富的虚拟仪器,利用虚拟仪器在仿真过程中可以测量外围电路的特性,培养学生实际硬件的调试能力。
四设计过程及数据
1信号发生器程序流程图
2硬件连线图
3系统波形控制的实现过程
要实现的各种波形通过开关的切换过程的流程图如下,通过开关状态进行选择:
P1.0为0则输出三角波,P1.1为0输出正弦波,P1.2为0输出阶梯波。
4三角波的实现过程
三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作。
此程序输入的VREF的电压是+5V,因此该波形输出的最大频率是初值为00H和最终值为0FFH,且步数为1,这样输出的波形是最大的。
程序流程图如下图所示:
三角波发生子程序如下:
MOVDPTR,#7FFFH;设置D/A转换器的端口地址
L1:
MOVR7,#00H;A清零
MOVA,R7
L2:
MOVX@DPTR,A;写外部存储器
NOP;延时
NOP
NOP
INCA;A加1
JNZL1;不等与零则转L1
L3:
MOVX@DPTR,A;写外部存储器
5正弦波的实现过程
正弦波的实现则相对比较复杂,因为正弦波的实现是输出各个点的值就行了,可是各个点值则要通过正弦函数来求出。
输出的数据刚好是256个数据,这样则可以直接相加就行了
正弦波发生子程序如下:
MOVDPTR,#SINTAB;正弦表写入内部RAM6DH-7FH
MOVR0,#6DH
LOOP:
CLRA
MOVCA,@A+DPTR
MOV@R0,A
INCDPTR
INCR0
CJNER0,#80H,LOOP
MOVDPTR,#7FFFH;设置D/A转换器的端口地址
MOVR0,#6DH;设置正弦表指针
LOOP1:
MOVA,@R0;查表
MOVX@DPTR,A;D/A转换
ACALLDELAY;延时,等待转换结束
DECR0;正弦表位移量增量
CJNER0#6DH,LOOP1;第一象限输出完?
LOOP2:
MOVA,@R0;查表
MOVX@DPTR,A;D/A转换
ALCALLDELAY;延时,等待转换结束
DECR0;正弦表位移量减量
CJNER0#6DH,LOOP2;第二象限输出完?
LOOP3:
MOVA,@R0;查表
CPLA;表值取反
MOVX@DPTR,A;D/A转换
ACLALLDELAY;延时,等待转换结束
INCR0;正弦表位移量增量
CJNER0,#7FH,LOOP3;第三象限输出完?
LOOP4:
MOVA,@R0;查表
CPLA;表值取反
MOVX@DPTR,A;D/A转换
ALCALLDELAY;延时,等待转换结束
DECR0;正弦表位移量减量
CJNER0,#6DH,LOOP4;第四象限输出完?
SJMPLOOP1
DELAY:
MOVR7,#200;延时50ms
DEL1:
MOVR6,#123
NOP
DEL2:
DJNZR6,DEL2
DJNZR7,DEL1
RET
SINTAB:
DB7FH,89H,94H,9FH,0AAH,0B4H,0C8H,0D1H,0D9H
DB0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,,OFEH,0FFH
END
6阶梯波的实现过程
阶梯波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。
然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。
在本程序中初值为00H.最大值为OFFH。
流程图如下图所示。
阶梯形波的发生子程序如下:
JTB:
MOVA,#0
MOVR1,#0AH
LP:
MOVX@DPTR,A
ACALLDELAY2
DJNZR1,NEXT
SJMPJTB
NEXT:
ADDA,#10
JBP1.4,START
SJMPLP
DELAY2:
MOV31H,#0FFH
D2:
DJNZ31H,D2
RET
五实验结果与分析
1实验现象、数据记录
(1)、利用Keil软件进行编程调试
(2)、利用Protues软件进行原理图绘制及波形仿真
●三角波的调试
对三角波进行调试,调试过程如下图:
●正弦波波的调试
对正弦波进行调试,调试过程如下图:
●阶梯波的调试
对阶梯波进行调试,调试过程如下图:
六设计总结与体会
首先是proteus仿真软件的使用,从