课程设计简易波形发生器

更新时间:2024-06-14 09:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

郑州轻工业学院

电子技术课程设计

题 目 学生姓名 专业班级 学 号 院 (系)指导教师 完成时间

简易波形产生器 自动化 电气信息工程学院 2012年06月 24日

郑州轻工业学院

课程设计任务书

题目 简易波形产生器

专业 学号 姓名

主要内容、基本要求、主要参考资料等: 主要内容

1.阅读相关科技文献。 2.学习protel软件的使用。 3.学会整理和总结设计文档报告。 4.学习如何查找器件手册及相关参数。 技术要求

1. 要求电路能够产生正弦波、方波和三角波三种波形。 2. 要求电路能够调节输出波形的频率,范围自定。 3. 要求电路能够显示输出波形的类型。

主要参考资料

1.何小艇,电子系统设计,浙江大学出版社,2001年6月

2.姚福安,电子电路设计与实践,山东科学技术出版社,2001年10月 3.王澄非,电路与数字逻辑设计实践,东南大学出版社,1999年10月 4.李银华,电子线路设计指导,北京航空航天大学出版社,2005年6月 5.康华光,电子技术基础,高教出版社,2003

完 成 期 限: 2012年6月25日 指导教师签章 : 专业负责人签章:

2012 年 6 月 18日

简易波形产生器

摘 要

波形发生器亦称函数发生器,作为实验用信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿、正弦、方波、三角等波形。本系统利用单片机AT89S52采用程序设计方法产生正弦波、方波、三角波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生1Hz—3kHz的波形并且可调。系统通过键盘来控制三种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分, 达到了用单片机控制产生三种波形并且显示的功能目的。

关键词 89S52 信号发生 D/A转换器 液晶屏1602

I

目 录

摘 要 ....................................................................................................................................... I 一 、 引言 .................................................. 1 二、 系统方案的设计与选择 .................................... 2 2.1 系统方案的比较 ..........................................2 2.2 显示电路的选择 ..........................................2 三、 电路主要元器件与软件介绍 ................................................................................ 3 3.1 AT89S52单片机 ...........................................3

3.1.1 AT89S52简介 ......................................3 3.1.2 AT89S52 主要特性..................................3 3.1.3 AT89S52各引脚功能介绍 ............................3

3.2 DAC0832 .................................................4

3.2.1 DAC0832简介 ......................................4 3.2.2 DAC0832的结构 ....................................5 3.2.3 DAC0832的引脚特性 ................................6

3.3 三端稳压集成电路7805 ....................................6 3.4 NE4558 ..................................................7 3.5 1602液晶 ...............................................7 3.6 Alitim designer介绍 .....................................8 3.7 Proteus介绍.............................................8 3.8 keil介绍 ...............................................9

四、 单元电路的硬件设计 ............................................................................................. 10 4.1 基本原理 ...............................................10 4.2 单片机 .................................................10

4.2.1 单片机的介绍 ....................................10 4.2.2 时钟电路 ........................................11

4.3 键盘电路原理 ...........................................12 4.4 LCD显示电路............................................12 4.5 数、模转换电路 .........................................13 五、 系统软件设计 ........................................................................................................... 14 5.1 主程序流程图 ...........................................14 5.2 子程序流程图 ...........................................15

5.2.1 三角波程序流程图 .................................15 5.2.2 正弦波程序流程图 .................................15 5.2.3 方波程序流程图 ..................................16

六、 测试结果 ..............................................17 七、设计心得 ...............................................19 致 谢 ....................................................20 参考文献...................................................21 附 录 ....................................................22

一 、 引言

波形发生器亦称函数发生器,作为实验用信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,如采用555振荡电路发生正弦波、三角波和方波的电路便是可取的路径之一,不用依靠单片机。但是这种电路存在波形质量差、控制难、可调范围小、电路复杂和体积大等缺点,且波形种类有限。

在科学研究和生产实践中,如工业过程控制、生物医学、地震模拟机械振动等领域常常要用到低频信号源,而由硬件电路构成的低频信号其性能难以令人满意,而且由于低频信号源所需的RC很大。大电阻、大电容在制作上有困难,参数的精度亦难以保证,体积大、漏电、损耗显著更是其致命的弱点,一旦工作需求功能有增加,则电路复杂程度会大大增加。现代电子领域中,单片机的应用正在不断的走向深入,单片机构成的仪器具有高可靠性、高性能价格比,在智能仪表系统和办公自动化等诸多领域得以极为广泛的应用,并已经走入家庭。因此,单片机技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。

一块单片机芯片就是一台计算机,由于单片机的这种特殊的结构形式,在某些应用领域中,它承担了大中型计算机和通用微型计算机无法完成的一些工作。使其具有很多显著的优点和特点,单片机的特点归纳起来有以下几个方面: 1) 具有优异的性能价格比:单片机尽可能地把应用所需的存储器,各种功能的

I/O 接口集成在一块芯片内,因而其性能很高,而价格却相对较低廉。 2) 集成度高、体积小、可靠性高:单片机把各种功能部件集成在一块芯片上,

因而集成度高,均为大规模或超大规模集成电路。内部又采用总线结构,减少了芯片之间的连线,这大大提高了单片机的可靠性与抗干扰能力。同时,其体积小,对于强磁场环境易于采取屏蔽措施,适合于在恶劣环境下工作。

3) 控制功能强:单片机体积虽小,但“五脏俱全” ,它非常适用于专门的控

制用途,一般单片机的指令系统中有极丰富的转移指令,I/O口的逻辑操作指令以及位操作指令,其逻辑控制功能及运行速度均高于同一档次的微机。 4) 低压、低功效:目前,许多单片机已可在2.2V电压下运行,有的已能在1.2V

或0.9V下工作,功耗降至μA级,一粒钮扣电池就可长期使用。 利用单片机采用程序设计方法来产生低频信号,其下限频率很低。具有线路相对简单,结构紧凑,价格低廉,频率稳定度高,抗干扰能力强,用途广泛等优点,并且能够对波形进行细微调整,改良波形,使其满足系统的要求。只要对电路稍加修改,调整程序,即可完成功能升级。

1

二、 系统方案的设计与选择

2.1 系统方案的比较

方案一:采用函数信号发生器ICL8038集成模拟芯片。ICL8038是一种可以同时产生方波、三角波、正弦波的专用集成电路。但是这种模块产生的波形都不是纯净的波形,会寄生一些高次谐波分量,采用其他的措施虽可滤除一些,但不能完全滤除掉。

方案二:采用分立元件实现非稳态的多谐振振荡器,然后根据需要加入积分电路等构成正弦、矩形、三角等波形发生器。这种信号发生器输出频率范围窄,而且电路参数设定较繁琐,其频率大小的测量往往需要通过硬件电路的切换来实现,操作不方便。

方案三:采用单片机和DAC0832数模转换器生成波形,由于是软件滤波,所以不会有寄生的高次谐波分量,生成的波形比较纯净。它的特点是价格低、性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。

经比较,方案三既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比较高,所以采用该方案。

2.2 显示电路的选择

方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼就感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,但要显示内容多,而且数码管不能显示字母。

方案二:采用LCD液晶显示器1602。其功率小,效果明显,显示编程容易控制,可以显示字母。

以上两种方案综合考虑,选择方案二。

2

三、 电路主要元器件与软件介绍

3.1 AT89S52单片机

3.1.1 AT89S52简介

AT89S52为 ATMEL 所生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flsah存储器。

3.1.2 AT89S52 主要特性

1) 拥有灵巧的8位CPU和在系统可编程Flash。

2) 晶片内部具时钟振荡器(传统最高工作频率可至 12MHz)。 3) 内部程序存储器(ROM)为 8KB。 4) 内部数据存储器(RAM)为 256字节。 5) 32 个可编程I/O 口线。 6) 8 个中断向量源。

7) 三个 16 位定时器/计数器。 8) 三级加密程序存储器。 9) 全双工UART串行通道。

3.1.3 AT89S52各引脚功能介绍

VCC:AT89S52电源正端输入,接+5V。 VSS:电源地端。 XTAL1:

单芯片系统时钟的反相放大器输入端。 XTAL2:

系统时钟的反相放大器输出端,一般 在设计上只要在 XTAL1 和 XTAL2 上接上一只 石英振荡晶体,系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统

更稳定,避免噪声干扰而死机。 图3-1 AT89S52各引脚 RESET:

AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置

3

的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。 EA/Vpp:

“EA”为英文“External Access”的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。 ALE/PROG:

ALE是英文\的缩写,表示地址锁存器启用信号。 PSEN:

此为\Program Store Enable\的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。 PORT0(P0.0~P0.7):

端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。

端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。

PORT1(P1.0~P1.7):

端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。

PORT3(P3.0~P3.7):

端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。

3.2 DAC0832

3.2.1 DAC0832简介

DAC0832是美国资料公司研制的8位双缓冲器D/A转换器。芯片内带有资料锁存器,可与数据总线直接相连。电路有极好的温度跟随性,使用了COMS电流开关和控制逻辑而获得低功耗、低输出的泄漏电流误差。芯片采用R-2RT型电阻网络,对参考电流进行分流完成D/A转换。转换结果以一组差动电流IOUT1

4

和IOUT2输出。

DAC0832主要性能参数有: 辨率8位; 转换时间1μs; 参考电压±10V; 单电源+5V~+15v; 功耗20mW。

3.2.2 DAC0832的结构

图3-2 DAC0832的内部结构

DAC0832的内部结构如图3-2所示。DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的锁存信号为ILE;第二级锁存器称为DAC寄存器,它的锁存信号为传输控制信号XFER。因为有两级锁存器,DAC0832可以工作在双缓冲器方式,即在输出模拟信号的同时采集下一个数字量,这样能有效地提高转换速度。此外,两级锁存器还可以在多个D/A转换器同时工作时,利用第二级锁存信号来实现多个转换器同步输出。

图3-1中LE为高电平、CS和WR1为低电平时,LE1为高电平,输入寄存器的输出跟随输入而变化;此后,当WR1由低变高时,LE1为低电平,资料被锁存到输入寄存器中,这时的输入寄存器的输出端不再跟随输入资料的变化而变化。对第二级锁存器来说,XFER和WR2同时为低电平时,LE2为高电平,DAC寄存器的输出跟随其输入而变化;此后,当WR2由低变高时,LE2变为低电平,将输入寄存器的资料锁存到DAC寄存器中。

5

3.2.3 DAC0832的引脚特性

DAC0832是20引脚的双列直插式芯片。各引脚如图3-3所示,特性如下:

CS:片选信号,和允许锁存信号ILE组合来决

定WR1是否起作用。

ILE:允许锁存信号。

WR1:写信号1,作为第一级锁存信号,将输入

WR1必须和CS、资料锁存到输入寄存器(此时,ILE

同时有效)。

WR2:写信号2,将锁存在输入寄存器中的资料:传输控制信号,用来控制WR2。

送到DAC寄存器中进行锁存。 图3-3 DAC0832引脚

XFERDI7~DI0:8位数据输入端。

IOUT1:模拟电流输出端1。当DAC寄存器中全为1时,输出电流最大,当DAC寄存器中全为0时,输出电流为0。

IOUT2:模拟电流输出端2。IOUT1+IOUT2=常数。

RFB:反馈电阻引出端。DAC0832内部已经有反馈电阻,所以,RFB端可以直接接到外部运算放大器的输出端。相当于将反馈电阻接在运算放大器的输入端和输出端之间。

VREF:参考电压输入端。可接电压范围为±10V。外部标准电压通过VREF与T型电阻网络相连。

VCC:芯片供电电压端。范围为+5V~+15V,最佳工作状态是+15V。 AGND:模拟地,即模拟电路接地端。 DGND:数字地,即数字电路接地端。

3.3 三端稳压集成电路7805

三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。它的样子像是普通的三极管,TO- 220 的标准封装,也有9013样子的TO-92封装。7805引脚序号、引脚功能如图3-4所示:

从正面看①②③引脚从左向右按顺序标注,接入电路时①脚电压高于②脚,③脚为输出位。如对于78**正压系列,①脚高电位,②脚接地,;对与79**负压系列,①脚接地,②脚接负电压,输出都是③脚。

6

用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7909表示输出电压为负9V。 因为三端固定集成稳压电路的

使用方便,电子制作中经常采用。 图3-4 7805引脚

3.4 NE4558

NE4558 引脚图如图3-5所示。它是一片双运放,带内部补偿电路。它的内部包含两组形式完全相同的运算放大器,除电源共用外,两组运放相互独立。引脚功能为:

AOUT:放大信号输出(1)。 AIN-:反相信号输入(1)。 AIN+:同相信号输入(1)。 GND:接地。

BIN+:同相信号输入(2)。

BIN-:反相信号输入(2)。 图3-5 NE4558引脚 BOUT2:放大信号输出(2)。 Vcc:电源。

4558特性有很多,2MHz单位增益带宽保证,NE4558 的电源电压为 ±18v,具备短路保护功能,无需频率补偿,无闩锁效应,宽广的共模和差动电压范围,低功耗。因此被广泛运用在各种电路中。

3.5 1602液晶

1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以它不能显示图形。 管脚如图3-6,功能如下: 第1脚:VSS为电源地 第2脚:VDD接5V电源正极

7

第3脚:V0为液晶显示器对比度调整端, 接正电源时对比度最弱,接地电源时对 比度最高(对比度过高时会 产生“鬼影”, 使用时可以通过一个10K的电位器调整对比度)。

第4脚:RS为寄存器选择,高电平1时 选择数据寄存器、低电平0时选择指令寄

存器。 图3-6 1602液晶 第5脚:RW为读写信号线,高电平(1)时 进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端。 第7~14脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。

3.6 Alitim designer介绍

Altium Designer 提供了唯一一款统一的应用方案,其综合电子产品一体化开发所需的所有必须技术和功能。Altium Designer 在单一设计环境中集成板级和FPGA系统设计、基于FPGA和分立处理器的嵌入式软件开发以及PCB版图设计、编辑和制造,并集成了现代设计数据管理功能,使得Altium Designer成为电子产品开发的完整解决方案-一个既满足当前,也满足未来开发需求的解决方案。

3.7 Proteus介绍

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、

8

PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

3.8 keil介绍

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

9

四、 单元电路的硬件设计

4.1 基本原理

系统框图如图4-1所示 电 源 键 盘 单片机 D/A转换 电流、电压转换 输 出 波形指示

图4-1 低频信号波形发生器系统结构框图

低频信号发生器系统主要由CPU、D/A转换电路、基准电压电路、电流/电压转换电路、按键和波形指示电路、电源等电路组成。

4.2 单片机

4.2.1 单片机的介绍

低频信号发生器采用AT89S52单片机作为控制核心,AT89S52的引脚图如图4-2所示。

U139383736353433322122232425262728P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P27P10P11P12P13P14P15P16P17INT1INT0T1T0EA/VPX1X21234567813121514311918VCC 109RSTRXDRESET11TXD 3017ALE/PRD

29PSENAT89S52WR16

图4-2 AT89S52引脚图

10

4.2.2 时钟电路

CPU工作时都必须有一个时钟脉冲。有两种方式可以向89S52提供时钟脉冲:一是外部时钟方式,即使用外部电路向89S52提供时钟脉冲;二是内部时钟方式,即使用晶振由89S52内部电路产生时钟脉冲。一般常用第二种方法,其电路见图4-3所示。

图4-3 89S52的时钟脉冲

4.2.3 复位电路

复位是单片机的初始化操作, AT89S52复位操作有3种方式:上电复位、上电按钮复位和系统复位。上电复位电路如图4-4所示。对于CMOS型单片机因RST引脚的内部有一个低电阻,故电阻R可不接。单片机在上电瞬间,RC电路充电,RST引脚端出现正脉冲,只要RST端保持两个机器周期以上的高电平,就能使单片机有效地复位。当晶体振荡频率为12MHz时,RC的典型值为C=10uF,R=8.2K欧姆。简单复位电路中,干扰信号易串入复位端,可能会引起内部某些寄存器错误复位,这时可在RST引脚上接一去耦电容。

通常因为系统运行等的需要,常常需要人工按钮复位,复位电路如图4-5所示,其中R2>>R1,只需将一个常开按钮开关并联于上电复位电路,按下开关一定时间就能使RST引脚端为高电平,从而使单片机复位。设计电路如图4-6。

+5V C

R RST 89S52 C +5V RST 89S52 R1 R2

图4-4 上电复位电路 图4-5 上电按钮复位电路

11

图4-6 89S52的复位电路

4.3 键盘电路原理

在单片机应用系统中为了控制系统的工作状态,以及向系统输入数据,应用系统应设有按键或键盘,实现简单的人机会话。键盘是一组按键的组合,按键通常是一种常开型按钮开关,平时按键的两个触点处于断开状态,按下键时它们才闭合。

根据设计的电路特点,只需要用到4个按钮来选择波形,按键S1~S4分别和单片机P1口的P1.0~P1.3相连,实现的功能也比较简单,键盘电路图如图4-7所示。

图4-7 键盘电路图

S1SW-PBS2SW-PBS3SW-PBS4SW-PBVCCR11KR21KR31KR41K4.4 LCD显示电路

通过液晶1602显示输出的波形、频率,其电路图如图4-8所示:

12

图4-8 液晶显示

如上图所示,1602的八位数据端接单片机的P1口,其三个使能端RS、RW、E分别接单片机的P3.2—P3.4。通过软件控制液晶屏可以显示波形的种类以及波形的频率。

4.5 数、模转换电路

制作低频信号发生器有许多方案:主要有单缓冲方式,双缓冲方式和直通方式。

单缓冲方式具有适用于只有一路模拟信号输出或几路模拟信号非同步输出的情形的优点,但是电路线路连接比较简单。而双缓冲方式适用于在需要同时输出几路模拟信号的场合,每一路模拟量输出需一片DAC0832芯片,构成多个DAC0832同步输出电路,程序简单化,但是电路线路连接比较复杂。根据以上分析,选择了单缓冲方式使用方便,程序简单,易操作。

这里采用DAC0832与单片机89S52的典型的单缓冲方式接口电路。DAC0832的输出是电流,使用运算放大器可以将其电流输出线性地转换成电压输出。根据运算放大器和DAC0832的连接方法,运算放大器的输出可以分为单极性和双极性两种。这里采用双极性方式如图4-9所示。

图4-9 DAC0832双极性电压输出电路

13

五、 系统软件设计

软件设计上,根据功能分了几个模块编程。模块主要有:主程序模块、三角波模块、正弦波模块、方波模块、延时子程序模块等。

显示波形模块是利用DAC0832的8位特点,把波形的数据以8位数据的形势送进CPU中,只要一按键就能显示波形。

5.1 主程序流程图

主程序流程图如图5-1所示。本软件设计过程中主要实现利用按键来控制不同波形的输出,当按键1按下时,函数发生器就输出三角波;当按键2按下时,函数发生器就输出正弦波;当按键3按下时,函数发生器就输出方波。通过按键可以以任意循环方式输出不同波形。

N

图5-1 主程序流程图

Y 输出三角开始 Key1按下吗? N 波 Key2按下吗? N Y 输出正弦波 Key3按下吗? N Y 输出方波 Y 14

5.2 子程序流程图

5.2.1 三角波程序流程图

三角波流程图如图5-2所示。当进入三角波产生流程后,首先将DAC0832口地址置为4000H,通过A中数值的加一递升,当A中的内容为0时,与0FFH相比,相等时A中的内容减一递减,从而循环产生三角波。

开始 置DAC0832口地址Y 输入一个数字量A=0? (A)→0832A-1A+1(A)→0832A=0? N Y 输入一个数字量N

图5-2 三角波流程图

5.2.2 正弦波程序流程图

正弦波程序流程图如图5-3所示。正弦波波形设计通过查表指令得出。当进入正弦波产生程序后,首先将寄存器R1赋值为00H,将DAC0832口地址置为4000H,然后将查表得到的数据送0832。

15

开始 取表格初值R1←00H 置DAC0832口地址4000H 查表格取数送0832 R1+1 →R1 图5-3 正弦波程序流程图

5.2.3 方波程序流程图

方波程序流程图如图5-4所示。当进入方波产生流程后,首先将DAC0832

口地址置为4000H,当A中的内容为0时,输出对应模拟量,然后延时,当A中的内容为0FFH时,同样输出对应模拟量,再延时,从而得到方波。

开始 置DAC0832口地址4000H

输出对应模拟量 00H→A

输出对应模拟量 延时 FFH→A

延时 图5-4 方波程序流程图

16

六、 测试结果

在确定编程思路以后将各部分的程序及各子程序编好,使用keil进行编译,根据提示的错误对程序进行修改。除了语法差错和逻辑差错外,当确认程序没问题时,通过直接加载到protues软件电路中进行仿真。

当按键1拨下时,波形为三角波,同时LCD1602显示为train。仿真图如图6-1所示。

图6-1 三角波仿真图

当按键2拨下时,波形为正弦波,同时LCD1602显示为sine。仿真图如图6-2所示。

图6-2 正弦波仿真图

当按键3拨下时,波行为方波,同时LCD1602显示为squrae。仿真图如图6-3所示。

17

图6-3 方波仿真图

在对系统进行波形仿真时可以在示波器上观察到三角波、正弦波和方波的波形。其中三角波以及正弦波的输出误差较大,方波波形较为理想。这一方面与电路设置的参数有关,另一方面也与使用的仿真软件有关。对于上述问题的解决办法是:改变仿真电路的参数或着换用版本较高的仿真软件。当然一般产生这种情况的原因多由于电路的参数设计不合理所制。当仿真时,由于存在一定的系统误差,波形效果不是很好。

18

七、设计心得

经过将近一周的课程设计,终于完成了我们的简易波形发生器的设计,基本达到设计要求,从心底里来说,还是很高兴的。但高兴之余不得不深思呀!

在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。

通过这次的课程设计,让我真正的认识到课程设计的重要性,不但可以通过具体课题的设计工作学习到相关的新知识,而且可以课堂上所学习的知识用于实践。当在实际运用单片机的时候,才发现原来自己所学的知识并不熟悉,运用起来更是生疏,没有实现学以致用的目的,而且还发现了原来很多存在的疏忽,如简单的指令一直都用错了。这次波形发生器的课程设计基本运用了单片机学习中的很多知识,如单片机的结构及基本原理,指令系统和C语言程序设计,D/A转换接口技术等等。电路设计和程序设计都 参考了教材上的实例,但是在实际仿真的过程中却发现有些不妥只处,不能实现预期的结果,这样也提醒了自己书本不一定都是对的,所学的知识必须要充分理解再加以灵活的运用,更要注意具体问题具体分析解决。此外,通过实际的仿真操作,更加熟悉了PROTEUS 、Keil和Altium designer软件的操作流程,为以后的更好地学习和运用创造了条件。

要设计一个成功的电路,必须要有耐心,在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我仔细比较分析其原理以及可行的原因。这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。同时在本次设计过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整,这就要求我们应更加注重实践环节。

19

致 谢

在课程设计期间,经各位老师的悉心指导和耐心启发,学习到了科学研究的基本方法,具备了一定的科研能力,使本人得以顺利地完成课程课题设计。老师渊博的学识,严谨的治学态度,和蔼的为人,忘我工作的奉献精神,使我深受感染。在此我要特别感谢各位老师对我的设计报告修改提出了宝贵的意见。衷心感谢我的室友和学长在从文献资料的收集到开题,在具体研究工作的开展与深入及论文的撰写各个阶段他们都给予了我莫大的帮助。最后,感谢我的家人在生活上对我的关心和照顾以及对我的学业的莫大支持。感谢所有关心和帮助过我的人。由于作者水平有限,文中难免有不妥和错误之处,恳请各位老师、专家及同学批评指正!

20

参考文献

[1] 陈光东. 单片微型计算机原理与接口技术. 武汉:华中理工大学出版社.1999 [2] 袁启昌. 单片机原理及应用教程. 北京:科学出版社. 2005.3

[3] 江志红. 51单片机技术与应用系统开发案例精选. 北京: 清华大学出版社.2008.12 [4] 周润景. 单片机电路设计、分析与制作. 北京: 机械工业出版社. 2010.8 [5] 赵建领. 51单片机开发与应用技术详解.北京: 电子工业出版社..2009.1 [6] 谭浩强.C程序设计.北京:清华大学出版社.2005

[7] 李银华.电子线路设计指导.北京航空航天大学出版社.2005年6月 [8] 康华光.电子技术基础.高教出版社.2003 [9] 其他互联网资源

21

附录1 总的电路图

附 录

22

附录2 主要元器件清单 元器件名称 单片机 D/A转换器 运算放大器 显示器 三端稳压集成器 型号与规格 AT89S52 DAC0832 NE4558 LCD1602 7805 IN4007 数量 1 1 1 1 1 4 作用 主控电路 数模转换电路 信号放大电路 波形显示电路 三端稳压集成电路 整流桥

整流电路 23

附录3 程序清单

#include

#define uchar unsigned char #define uint unsigned int sbit lcdrw=P3^3; sbit lcdrs=P3^2; sbit lcde=P3^4; sbit d=P2^7; sbit s1=P2^0; sbit s2=P2^1; sbit s3=P2^2; sbit cs=P3^5; sbit wr=P3^6;

uchar s1num,a,ys,j; uint fre;

uchar code tosin[256]={

0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2, 0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5, 0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1, 0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5, 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd, 0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1, 0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda, 0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc, 0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99, 0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76, 0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51, 0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16, 0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06, 0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05, 0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15, 0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e, 0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e, 0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72, 0x76,0x79,0x7c,0x80 };/*正弦波码 */

void delay(uint z) //延时子程序 {

uchar i,j;

for(i=z;i>0;i--)

24

for(j=110;j>0;j--); }

void delay1(uint y) {

uint i;

for(i=y;i>0;i--); }

void write_com(uchar com) //1602写指令 {

lcdrs=0; P1=com; delay(5); lcde=1; delay(5); lcde=0; }

void write_data(uchar date) //1602数据 {

lcdrs=1; P1=date; delay(5); lcde=1; delay(5); lcde=0; }

void init() //初始化 {

lcdrw=0; lcde=0; wr=0; cs=0;

write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);

write_com(0x80+0x00);

write_data(0x77); //写wave: write_data(0x61); write_data(0x76); write_data(0x65); write_data(0x3a);

write_com(0x80+0x40); //写 f:

25

write_data(0x66);

write_data(0x3a); }

void write_f(uint date) //写频率 {

uchar qian,bai,shi,ge; qian=date/1000; bai=date/100; shi=date/10; ge=date;

write_com(0x80+0x42); write_data(0x30+qian); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); write_data(0x48); write_data(0x5a); }

void xsf() //显示频率 {

if(s1num==1) {

fre=(1000/(9+3*ys)); write_f(fre); }

if(s1num==2) {

fre=(100000/(3*ys)); write_f(fre); }

if(s1num==3) {

fre=(1000/(15+3*ys)); write_f(fre); } }

void keyscanf() {

d=0;

if(s1==0) {

delay(5);

26

if(s1==0) {

while(!s1); s1num++;

if(s1num==1) {

ys=0;

write_com(0x80+0x05);

write_data(0x73); //写sine: write_data(0x69); write_data(0x6e); write_data(0x65); write_data(0x20);

write_data(0x20); }

if(s1num==2) {

ys=10;

write_com(0x80+0x05); write_data(0x73); // write_data(0x71); write_data(0x75); write_data(0x61); write_data(0x72); write_data(0x65); } if(s1num==3) {

ys=0;

write_com(0x80+0x05); write_data(0x74); write_data(0x72); write_data(0x61); write_data(0x69); write_data(0x6e); write_data(0x20); }

if(s1num==4) {

s1num=0; P1=0;

write_com(0x80+0x05); write_data(0x20);

27

写squrae //写train

write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20);

write_data(0x20); write_com(0x80+0x42); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); } } }

if(s2==0) {

delay(5); if(s2==0) {

while(!s2); ys++; } }

if(s3==0) {

delay(5); if(s3==0) {

while(!s3); ys--; } } }

void main() {

init(); while(1) {

keyscanf();

if(s1num==1) //正弦波// {

for(j=0;j<255;j++)

28

{

P0=tosin[j]; delay1(ys); }

}

if(s1num==2) //方波// { P0=0xff;

delay1(ys); P0=0;

delay1(ys); }

if(s1num==3) //三角波// {

if(a<128) {

P0=a;

delay1(ys); } else {

P0=255-a; delay1(ys); } a++; }

if(!(s1&s2&s3)) {

xsf(); } } }

29

本文来源:https://www.bwwdw.com/article/9iu6.html

Top