单片机课程设计正弦波发生器论文.doc

上传人:灯火****19 文档编号:136884824 上传时间:2020-07-03 格式:DOC 页数:32 大小:580KB
返回 下载 相关 举报
单片机课程设计正弦波发生器论文.doc_第1页
第1页 / 共32页
单片机课程设计正弦波发生器论文.doc_第2页
第2页 / 共32页
单片机课程设计正弦波发生器论文.doc_第3页
第3页 / 共32页
单片机课程设计正弦波发生器论文.doc_第4页
第4页 / 共32页
单片机课程设计正弦波发生器论文.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《单片机课程设计正弦波发生器论文.doc》由会员分享,可在线阅读,更多相关《单片机课程设计正弦波发生器论文.doc(32页珍藏版)》请在金锄头文库上搜索。

1、北 华 航 天 工 业 学 院课程设计报告(论文) 设计名称: 单片机技术课程设计 设计地点: 单片机实验室(教7209) 班 级: B09221 姓 名: 学 号: 指导教 师: 完 成 时 间: 2012 年 4 月 18 日北华航天工业学院电子工程系课程设计任务书姓 名:学号:班 级:指导教师:职 称:教授课程设计题目:正弦信号发生器的设计主要课程支撑:模拟电子技术、数字电子技术、微机原理与接口技术设计目标:1 熟练掌握单片机汇编指令的使用方法2 熟练掌握行列式键盘、LED显示器的控制与管理方法3 掌握A/D、/D/A的应用4掌握单片机应用系统设计方法、软硬件调试方法5熟练使用单片机仿真

2、软件基本要求:1完成单片机综合设计(每人选做一个题目)2编程实现题目要求的基本功能,程序运行通过。3撰写课程设计报告(设计思路、实现方法、硬件资源分配、程序流程图、运行结果分析等),要求用A4纸打印设计报告。所需仪器设备:伟福Lab6000综合实验仿真系统一台套微机一台成果验收形式:程序上机运行、现场回答问题参考文献:Lab6000综合实验仿真系统说明书时间安排(1) 8周:完成选题、方案设计(2) 第1-4次上机调试程序(3) 第5次上机课题验收(4) 第10周上交实践报告指导教师: 教研室主任: 年 月 日 一、概述 1、设计目的 了解单片机系统中实现D/A(数字、模拟)转换的原理及方法

3、详细了解D/A转换芯片0832的性能及编程方法 了解单片机系统中扩展D/A转换的基本原理,了解单片机如何尽行数据采集 掌握DAC0832,AT89C51输入/输出接口电路设计方法 掌握DAC0832转换实现的程序设计方法 掌握WAVE 软件的操作,掌握单片机程序设计的流程2、设计要求 正弦波频率范围:1HZ100HZ,100HZ1000HZ 频率步进值:1HZ100HZ档步进是10HZ,100HZ1000HZ档步进是100HZ 输出电压:15V幅值可调(1V步进) 具有显示输出波形频率和幅度的功能 显示位数:6位 键盘设置频率值二、方案设计与论证(设计思路、题目分析、解决方法)1编程语言的选择

4、进行单片机开发,既可以用C语言,也可以用汇编语言。在本设计中选择合适的语言进行设计很重要。汇编语言是一种用文字助记符来表示机器指令的符号语言。其主要优点是占用资源少,执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是一种普遍使用的计算机语言,缺点是占用资源较多,没有汇编语言执行效率高。对于目前普遍使用RISC架构的8位单片机来说,其内部ROM、 RAM、STACK等资源有限,如果使用C语言编写,一条C语言编译后就会变成很多机器码,很容易出现ROM空间不够、堆栈溢出等问题。而汇编语言,一条指令就对应一条机器码,每一步的

5、执行动作都很清楚,并且程序大小和堆栈条用情况都容易控制,调试起来也比较方便。就正弦波发生器设计而言,对程序指令执行的精度、时间要求比较严格,因此本次设计采用汇编语言进行编程较为合理。2如何利用单片机进行控制输出-5V+5V电压-5V+5V为模拟量输出,单片机本身并不具备此功能,单片机只能进行数字量输出,因此需要用到DAC(数模转换)芯片DAC0832简要介绍DAC转换器是一种将数字量转换成模拟量的器件,其特点是接受、保持和转换的是数字信息,不存在温度和事件的漂移问题,因此电路的抗干扰性能较好。DAC0832是8位分辨率的D/A转换集成芯片,它具有价格低廉、接口简单及转换控制容易等特点。它由8位

6、输入锁存器、8位DAC寄存器、8位DIA转换电路及转换控制电路组成,能和CPU数据总线直接连接,属中速转换器,大约在1uS内将一个数字量转换成模拟量输出。DAC0832的结构D0D7: 8位数据输入线,TTL电平,有效时间应大于90nS(否则锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线(选通数据锁存器),低电平有效;WR1:数据锁存器写选通输入线,负脉冲(卖宽应大于500nS)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER: 数据传输控制信号输入线,低电

7、平有效,负脉冲(脉宽应大于500nS)有效;WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500nS)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;IOUT2:电流输出段2,其值与IOUT1值之和为一常数;Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程度;Vcc:电源输入端,Vcc的范围为+5V+5V;VREF:基准电压输入线,VREF的范围为-10V+10V;AGND:模拟信号地;DGN

8、D:数字信号地; 0832的引脚图和内部结构图如图1、图2所示图1 DAC0832引脚图图2 DAC0832内部结构图DAC0832的三种工作方式1、直通方式直通方式是使DAC0832内部的两个寄存器(输入寄存器和DAC寄存器)处于不锁存状态,数据一旦到达输入端DI7DI0,就直接送入D/A转换器,被转换成模拟量。当ILE为高电平,CS和WR1、WR2和XFER端都接数字帝,这时锁存信号LE1、LE2均为高电平,输入寄存器和DAC寄存器均处于不锁存状态,即直通方式。2、单缓冲方式单缓冲方式就是使两个寄存器中的一个处于缓冲方式,另一个处于锁存方式,数据只同故宫一级缓冲器送入D/A转换器。通的做法

9、是将CS和XFER均姐弟,使DAC寄存器处于直通凡事,而把ILE接高电平,接端口地址译码信号。WR1接CPU系统总显线的IOW信号,是输入寄存器处于锁存方式。但换种方式只需执行一次写操作即可完成D/A转换。一般不需要多个模拟量同时输出,可采用单缓冲方式。3、双缓冲方式双缓冲方式就是使两个寄存器均处于锁存方式,数据要经过两级锁存(即两级缓冲)后再送入D/A转换器,就是说,要执行两次写操作才能完成一次D/A转换。只要将ILE接高电平,WR1和WR2接CPU的IOW,CS和XFER分别接两个不同的I/O地址译码信号即可。在本设计中,令0832工作在单缓冲方式,其片选端接138译码器单元的CS1,其地

10、址为0x9000H。DAC0832的输出方式DAC0832为电流型输出,若需要电压输出可使用运算放大器构成单极性输出和双极性,图3 中a、b分别为0832的单极性输出和双极性输出的电路连接方式。若采用单极性输出,则只能产生0V5V电压,不能得到既有正脉波又有负脉波的正弦波。因此本设计采用DAC0832的双极性输出,其输出电压为-5+5V;当DI0DI7为0000000B时输出-5V,为10000000B时输出0V,为11111111B是输出+5V。这样可以产生既有正脉波又有服脉波的正弦波。图3 DAC0832的单极性输出和双极性输出3.如何产生正弦波 (a) (b)图4 正弦波的分解 用单片机

11、控制DAC0832来产生正弦波有个问题,就是数模转换总是有其分辨率的,输出的电压并不是连续变化的。例如:8位DAC输出为-5V+5V,那么分辨率就是:,所以产生的正弦波会有一定的误差。如何利用单片机控制DAC0832产生正弦波呢?我们可以先把一个正弦波按横轴等间距分别为若干个点(如图 4分为51个点)。把每个点电压幅值所对应的8位二进制数值做成表,放在CPU的ROM中。例如:图4中左起第一个点幅值是0V,对应的送给DAC0832的8位二进制数为80H,所以表的第一元素为80H制成下表:(下表中数据以十进制表示)TAB1: DB 128, 144, 160, 175, 190, 203, 216

12、, 227, 236, 244, 250, 254, 255, 255, 254, 250, 244, 236, 227, 216, 203, 190, 175, 160, 144, 128, 112, 96, 81, 66, 53, 40, 29, 20, 12, 6, 2, 0, 0, 2, 6, 12, 20, 29, 40, 53, 66, 81, 96, 112, 128 先取表中第一个元素送给0832,0832输出第一个电压0V,再取第二个数送给0832输出下一个电压,依次类推,取到表的最后一个元素时,从头开始取表的第一个元素。循环往复,就输出了一个连续的正弦波形。只产生一个正弦波

13、是不够的,我们还要求其频率和幅值可调。可以看一下哪些因素会影响输出波形的频率和幅值频率的影响因素由图4可知,该正弦波的频率 (为所取的两个点之间的间隔),所以只要改变就可以改变输出波形的频率。我采用的方案是:用一个定时器,每隔产生一次中断,在中断服务程序里控制DAC0832输出。如果想要改变只要改变定时器的时间就行了。也就改变了输出波形的频率。采用这个方案需要验证两个问题: 本设计要求输出频率在1HZ1000HZ可调,所以定时器的定时时间需要达到S,即定时器的定时时间要在S之间可调,并且其分辨率满足要求。经验证51单片机的定时器0工作在方式1时,其性能满足要求,故采用定时器的方案可行。 不可能无限小,假设单片机晶振为6MHZ,那么定时器的分辨率为2S即0.000002S。单片机执行指令是需要时间的,当定时器溢出产生中断时,需要执行一系列指令,包括对断点地址进行压栈、给PC赋值等操作,都是需要占用时间的,这一部分占用的时间是不可避免的。除此之外,进入中断服务子程序中,顺序执行里面的程序,在执行MOVX DPTR,A 给DAC0832送数据让其输出电压之前会有一些必须的程序,包括赋初值给定时器的TH0和TL0,查表程序等。综合上面几个因素,这时定时器的定时时间并不是理论上计算出的时间,而大于这个时间,这样输出波形的频率就会有误差。为了减小误差,第一,尽量减少定时中断服务程序中的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号