单片机课程设计正弦波发生器论文 .doc
《单片机课程设计正弦波发生器论文 .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为B时输出-5V,为B时输出0V,为B是输出+5V。这样可以产生既有正脉波又有服脉波的正弦波。图3 DAC0832的单极性输出和双极性输出3.如何产生正弦波 (a) (b)图4 正弦波的分解 用单片机控制DAC0832来产生正弦波有个问题,就是数
11、模转换总是有其分辨率的,输出的电压并不是连续变化的。例如: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, 227, 236, 244, 250, 2
12、54, 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,那么定时器的
14、分辨率为2S即0.000002S。单片机执行指令是需要时间的,当定时器溢出产生中断时,需要执行一系列指令,包括对断点地址进行压栈、给PC赋值等操作,都是需要占用时间的,这一部分占用的时间是不可避免的。除此之外,进入中断服务子程序中,顺序执行里面的程序,在执行MOVX DPTR,A 给DAC0832送数据让其输出电压之前会有一些必须的程序,包括赋初值给定时器的TH0和TL0,查表程序等。综合上面几个因素,这时定时器的定时时间并不是理论上计算出的时间,而大于这个时间,这样输出波形的频率就会有误差。为了减小误差,第一,尽量减少定时中断服务程序中的指令,以减少其占用的时间;第二:给TH0,TL0幅值时
15、,减去延时的时间,以抵消掉指令占用的时间。幅值的影响因素从前面介绍的DAC0832的原理可知,只要改变DAC0832数字量输入就可以改变其输出模拟量的幅度。由于产生波形的幅度是在存储于单片机内部ROM的表中,按顺序取出的。因此我们需要从新建立一个表,这样定时中断服务程序中,该表所查的表,就改变了输出波形的幅度。本设计要求幅值1V5V可调,因此需要建立5个表。建立5个表的时候如果一个元素一个元素的算,未免太麻烦。可以用MATLAB分别算出5个表,然后粘贴到程序中,稍作修改就可以使用(图5为输出幅值为4V时表的计算方法算法)。算法: (U为需要得的到的幅值,此时b数组就是对应的表)图5 表的计算方
16、法(输出幅值为4V时) 综合上面改变频率和幅值的方法,就可以得到符合本设计的设计要求的波形。3.频率与幅值的设置方案:利用单脉冲发生器,当需要设置幅值和频率时,产生中断,暂停正在工作的定时器,停止波形输出,进入外部中断0中断服务程序,通过按键,对波形进行设置。按键0:频率/幅值切换;按键1:频率/幅值增加;按键2:退出外部中断,开启定时器,输出波形4.键盘与显示 利用WAVE6000 实验环境中的显示程序和键盘扫描电路及程序。改程序提供了三个子程序:TestKey;GetKey;DispLedBuf。三、硬件设计1硬件电路本设计由单片机、D/A转换电路、键盘及显示电路几个组成部分,各部分采用的
17、电路形式及主要器件确定如下:(1)单片机部分选用89C51单片机作为主机,同时要设计89C51单片机的晶振电路和复位电路,具体电路略。(2)D/A转换电路部分直接利用单片机实验箱上的D/A转换电路正弦波信号的输出。电路如图6所示。图6 DAC0832连接电路(3)按键与显示部分 直接利用单片机试验箱上的按键与显示电路。如图7、图8所示 图7 显示器电路连接图图8 键盘电路连接图四、程序设计 1程序流程图 主程序流程图:开始初始化(中断允许、定时器初始化等)SJMP $ 循环等待图9 主程序流程图 定时器0中断服务程序流程图:是否开始定时器重赋初值Mov TH0,CTH0Mov TL0,CTL0
18、表的首地址赋DPTRMov DPH,#CDPHMov DPH,#0根据R0内容进行查表把查表的内容送到0832INC R0R0等于50?Mov R0,#0图10定时器0中断服务程序流程图否开始停止定时器0的中断初始化工作F0清零显示清空调用显示程序DisplayLED检测有无按键TestKey无按键有按键取键值GetKey键值为#0?CPL F0 并且根据F0来显示U或F是键值为#1?键值为#2?否否F0为零INC CU否则INC CHZ并把显示被容送入LEDBuf是允许定时器0中断RETI结束外部中断0中断服务程序流程图:图11外部中断0中断服务程序流程图2程序模块功能主程序:进行一系列初始
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机课程设计正弦波发生器论文 单片机 课程设计 正弦波 发生器 论文
限制150内