已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖北汽车工业学院课程设计说明书课程名称 单片机原理与应用 设计题目 波形发生器设计 班号 T923-4 专业 电气工程及其自动化 学号 20090230430 学生姓名 陈超 指导教师(签字) 2019年2月19日湖北汽车工业学院电气与信息工程学院18课程设计说明书目 录一、设计功能要求及原理2二、题目的意义2三、方案论证3四、系统硬件电路的设计31、芯片功能介绍32、系统硬件总体电路设计7五、 系统程序的设计91、 锯齿波的实现过程92、 三角波的实现过程93、梯形波的实现过程104、方波的实现过程115、 正弦波的实验过程126、波形输出程序和切换:13六、 调试及性能分析151、调试步骤162、运行结果16七、课程设计总结19八、参考文献19一、设计功能要求及原理1. 设计要求 设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。2. 实验原理 产生指定波形可以通过DAC来实现,不同波形产生实质上是对输出的二进制数字量进行相应改变来实现的。 本题目中,方波信号是利用定时器中断产生的,每次中断时,将输出的信号按位反即可; 三角波信号是将输出的二进制数字信号依次加1,达到0xff时依次减1,并实时将数字信号经D/A转换得到; 锯齿波信号是将输出的二进制数字信号依次加1,达到0xff时置为0x00,并实时将数字信号经D/A转换得到的; 梯形波是将输出的二进制数字信号依次加1,达到0xff时保持一段时间,然后依次减1直至0x00,并实时将数字信号经D/A转换得到的; 正弦波是利用MATLAB将正弦曲线均匀取样后,得到等间隔时刻的y方向上的二进制数值,然后依次输出后经D/A转换得到。二、题目的意义(1)、我们这次的课程设计是以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、方波、梯形波等)且频率、幅度可变的函数发生器。(2)、在平时的学习中,我们所学的知识大都是课本上的,在机房的练习大家也都是分散的对各个章节的内容进行练习。因此,缺乏一种系统的设计锻炼。在课程所学结束以后,这样的课程设计十分有助于学生的知识系统的总结到一起。(3)、通过这几个波形进行组合形成了一个函数发生器,使得我对系统的整个框架的设计有了一个很好的锻炼。这不仅有助于大家找到自己感兴趣的题目,更可以锻炼大家单片机知识的应用。三、方案论证方案一:采用函数信号发生器ICL8038集成模拟芯片,它是一种可以同时产生方波、三角波、正弦波的专用集成电路。但是这种模块产生的波形都不是纯净的波形,会寄生一些高次谐波分量,采用其他的措施虽可滤除一些,但不能完全滤除掉。方案二:采用AT89C51单片机和DAC0832数模转换器生成波形,由于是软件滤波,所以不会有寄生的高次谐波分量,生成的波形比较纯净。它的特点是价格低、性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。经比较,方案二既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比高,所以采用该方案。四、系统硬件电路的设计1、芯片功能介绍 (1)、DAC0832芯片介绍:DAC0832为一个8位D/A转换器,单电源供电,在+5+15V范围内均可正常工作。基准电压的范围为10V,电流建立时间为1s,CMOS工艺,低功耗20mW。DAC0832的内部结构框图如下图所示。 DAC0832的外部引脚及功能介绍图如下: (2)、DAC0832的应用:DAC0832一是用作单极性电压输出,二是用作双极性电压输出,最后是用作程控放大器。 (3)、DAC0832与8031的连接方式: DAC0832的与单片机的连接方式有三种方式:一、单缓冲二、双缓冲、三是直通方式。本程序采用的是方式一即单缓冲方式,ILE为高电平,CS、WR1、WR2、XFER为低电平。电源及时钟引脚:Vcc、Vss;XTAL1、XTAL2控制引脚 PSEN、ALE、EA、RESET(即RST).I/O口引脚: P0、P1、P2、P3为4个8位I/O口的外部引脚.RST/VPD(9脚)RST:单片刚接上电源时,其内部各寄存器处于随机状态,在此脚输入24个时钟周期宽度以上的高电平将使单片机复位。单片机正常工作时,此脚应为0.5V低电平。VPD:备用电源输入端。当Vcc下降到低于规定的值,而VPD在其规定的电压范围内(50.5V)时,VPD就向内部RAM提供备用电源以保持内部RAM的数据。 ALE/PROG(30引脚)ALE引脚输出为地址锁存允许信号,当单片机上电工作 后,ALE引脚不断输出正脉冲信号. 当访问片外存储器时,ALE(地址锁存允许信号)输出脉冲的负跳沿用于16位地址的低8位锁存信号。不访问片外存储器,ALE端以时钟振荡器频率的1/6固定输出正脉冲。在访问外部数据存储器时(执行MOVX指令),ALE会丢失一个ALE脉冲。单片机AT89C51介绍 AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如下图所示:图2 AT89C51引脚图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)这是由于上拉的缘故。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、系统硬件总体电路设计 主要设计思想 课设需要各个波形的基本输出。如输出锯齿波、三角波、梯形波、方波、正弦波。这些波形的实现的具体步骤:锯齿波实现很简单,只需要一开始定义一个初值,然后不断的加1,当溢出后又重初值开始加起,就这样循环下去。三角波的实验过程是先加后减,我的一开始的实现方法是先是从00H开始加1直到溢出后就执行减1操作,就这样不断调用这个循环。梯形波的实现过程是前后加和减的速度不同而已,如你可以在上升加的步数大一些,减时少一些。方波的实现方法是连续输出一个数,到某个时候就改变一下值,可以把值定义为正极性的,也可以是负极性。正弦波的实现是非常麻烦的。它的实现过程是通过定义一些数据,然后执行时直接输出定义的数据就可以了。在设计之初,我一直都在尝试使用数学的泰勒级数展开来计算输出波形,使用这种方法,实现起来相对来说要比较困难一点,而且会使得频率会下降。要使得它达到更高的频率,就得另辟蹊径了。分析一下为什么频率上不去,主要原因在于,使用单片机进行正弦函数的运算时占去了不少时间,如果去掉这一计算过程波形的频率应该大有提高,另外就是CPU时钟频率没有调至最高,以及DAC转换过程需要时间。为了达到更高的频率,首先就要免去单片机的计算负担,我使用的解决方法是人为计算出要输出的点,然后建一个表通过查表来进行输出,这样主要工作任务就落到了建表的过程中。这样做的好处在于,查表所耗费的时钟周期相同,这样输出的点与点之间的距离就相等了,输出的波形行将更趋于完美,当然更让我们感到的高兴的是它输出波形的频率将近达到了100K赫兹,能够满足我们设计的扩展要求了。为了实现频率的调整,我在一个正弦波周期里建了两百个点,如果我们隔一个取点的话,且在CPU时钟频率不改变的情形下,正弦波频率将相对于前面的频率提高将近一倍。这样我们就得到了解决频率调整的方法,首先进行CPU时钟频率选择,再调整一个正弦函数一个周期输出的点数,幅度的调节是通过初始幅度设置再通过外部放大电路来调节。 硬件连线图5、 系统程序的设计1、 锯齿波的实现过程 锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。流程图如下所示:设置初值AMOV DPTR,#8000HMOVX DPTR,A加上设定的步数,ADD A,步数判断A是否已经满了?否重新设置初值A是开 始2、 三角波的实现过程 三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作,这个操作跟锯齿波的实现是相似的。此程序输入的VREF的电压是5V,因此该波形输出的最大频率是初值为00H和最终值为0FFH,且步数为1,这样输出的波形是最大的。程序流程图如下图所示:给A设置初值MOV DPTR,#8000HMOVX DPTR,AADD A,步数判断A是否已满?否是SUBB A,步数判断是否等于初值?否/是开 始3、梯形波的实现过程 梯形波输出跟锯齿波和三角波相似,只不过当加到顶峰后的一段时间内不改变A的值,过了一段时间后再将减少A的值,不过先后的步数可以一样也可以不一样。然后减到初始的值后也要持续一段时间,然后再进行加数,如此循环下去。开 始给A设置初值MOV DPTR,#8000H是持续一段时间SUBB A,步数2判断是否等于初值?否是 持续一段时间MOVX DPTR,AADD A,步数1判断A是否已满?否4、方波的实现过程 此波形的实现更加简单,只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。流程图如下图所示:开 始给A设置初值MOV DPTR,#8000H MOVX DPTR,A设置输出的时间再设置一个初值放入A中MOVX DPTR,A输出一段时间5、 正弦波的实验过程 正弦波的实现则相对比较复杂,因为正弦波的实现是输出各个点的值就行了,可是各个点值则要通过正弦函数来求出,不过这些值直接去网上下载下来使用就可以了。输出的数据刚好是256个数据,这样则可以直接相加就行了。开 始MOV A,#00HMOV R7,AMOV DPTR,#SINMOVC A,A+DPTRMOV DPTR,#8000HMOVX DPTR,AMOV A,R7INC A 6、波形输出程序和切换: ORG 0000H ;程序开始 MOV SP,#60H ;设置堆栈MOV DPTR,#8000H ;0832的地址LOP: JB P3.5,TIAO ;是否需要调频 MOV R6,#01H ;设置步长 MOV R5,#01H START:JB P3.0,JCHI ;输出锯齿波程序 JB P3.1,SJIAO ;输出三角波程序 JB P3.2,TXING ;输出梯形波程序 JB P3.3,FBO ;输出方波程序 JB P3.4,ZXUAN ;输出正弦波程序 SJMP LOP ;循环检测 JCHI:MOV A,#00H ;设置初值 LOOP:MOVX DPTR,A ;把数据送到端口转换 ADD A,R6 ;通过步长改变数据,上升波形 CJNE A,#00H,LOOP ;A值是否到最高点 ; DJNZ R5,LOOP SJMP LOP ;返回检测开关SJIAO:MOV A,#00H ;设置初值 LOOP3:MOVX DPTR,A ;把数据送到端口转换 ADD A,R6 ;通过步长改变数据上升波形 CJNE A,#00H,LOOP3 ; A值是否到最高点 DEC A ;减少步长改变数据下降波形 LOOP2:MOVX DPTR,A ;把数据送到端口转换 DEC A ;减少步长改变数据下降波形 CJNE A,#00H,LOOP2 ;A值是否到最低点 DJNZ R5,LOOP3 ;波形周期 SJMP LOP ;返回检测开关TXING:MOV A,#00H ;设置初值 LOOP4:MOVX DPTR,A ;把数据送到端口转换 ADD A,R6 ;增加步长改变数据上升波形 CJNE A,#00H,LOOP4 ;A值是否到最高点 ;SUBB A,R6 ;下降波形做准备 DEC A MOV R7,0EEH ;循环次数 LOP2:MOVX DPTR,A ;进行延时 DJNZ R7,LOP2 LOOP1:MOVX DPTR,A ;把数据送到端口转换 ;SUBB A,R6 DEC A CJNE A,#00H,LOOP1 ;是否到最低点 MOV R7,0EEH ;循环次数 LOP1:MOVX DPTR,A ;把数据送到端口转换 DJNZ R7,LOP1 ;进行延时 SJMP LOP ;返回检测开关 FBO: MOV A,#00H ;设置初值最低点 MOV R7,#0EEH ;循环次数 LOOP5:MOVX DPTR,A ;进行数据转换 DJNZ R7,LOOP5 ;进行延时 MOV A,#0FFH ;设置最高点 MOV R7,#0EEH ;循环次数 LOOP6:MOVX DPTR,A ;进行数据转换 DJNZ R7,LOOP6 ;进行延时 MOV A,#00H SJMP LOP ;返回检测开关变化ZXUAN: MOV A,#00H ;设置初值LOOP7: MOV R7,A ;保存当前的数据 MOV DPTR,#SIN ;读取表的地址 MOVC A,A+DPTR ;读取表中的数据 MOV DPTR,#8000H ;D/A0832的端口地址 MOVX DPTR,A ;进行数据转换 MOV A,R7 ;恢复当前数据 INC A ;为读取表的下一个值做准备 CJNE A,#00H,LOOP7 是否读完表的数据 SJMP START ;返回检测开关TIAO: MOV R6,#04H ;改变调频/调幅 MOV R5,#02H SJMP START ;返回检测开关;-以下是通过正弦的值所建立的一个表SIN: DB 80H,83H,86H,89H,8DH,90H,93H,96H DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH DBB1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H DB0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H END6、 调试及性能分析 本次的设计主要应用了protues和keil c软件进行系统设计和仿真,经过仿真后,结果较好,示波器可以正确的输出方波、正弦波、三角波、锯齿波、梯形波。1、调试步骤(1)、按照实验原理图及电路图和接线步骤连好实验线路。(2)、把设计好的程序放在两个地方:一是在系统监控中,二是在上位机实验系统软件中。(3)、运行“DVCC实验系统”,稍后出现“DVCC实验系统”菜单。打开存放的课设程序。(4)、打开实验箱外置电源,显示器显示闪动的“P.”,按下“RESET 复位键,然后按下“PCDBG”功能键,再点击系统菜单中的“联接”,此时出现“寄存器窗口”、“反汇编窗口”和“数据窗口”等,说明联机成功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育科研方法十年期末考试简答题题库(分学期版)
- 我设计的服装 教学设计
- 2025 年大学管理心理学(领导心理)试题及答案
- 新版江苏银行ai面试题库大全及答案
- 新闻记者专业技术水平考核试题及答案
- 晋中师范高等专科学校教师招聘考试笔试试题及答案
- 月嫂证的理论试题及答案
- 机关工会考试试题及答案
- 产科危重抢救应急预案(3篇)
- 2025年金融年终工作总结样本(5篇)
- BIM-建筑信息模型
- GB/T 22415-2008起重机对试验载荷的要求
- 火力发电工程建设标准强制性条文执行表格锅炉分册
- 中国地质大学武汉软件工程专业学位研究生实践手册
- 《投资银行》或《资本运营》风险投资业务课件
- DBJ50T-163-2021 既有公共建筑绿色改造技术标准 清晰正式版
- 低阶煤、褐煤干法制备气化用高浓度水煤浆技术
- GB∕T 37458-2019 城郊干道交通安全评价指南
- 盘锦浩业芳烃抽提装置操作规程
- DB33_T 2301-2020番茄水肥一体化技术规程(高清正版)
- 路面病害处理专项施工组织方案
评论
0/150
提交评论