您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页函数信号发生器 函数信号发生器论文

函数信号发生器 函数信号发生器论文

来源:意榕旅游网


毕业设计(论文)

题目: 函数信号发生器

学 部 信息与电子学部 专业名称 电子信息工程 班级学号 118501106 学生姓名 蔡伟攀 指导教师 邓洪峰

二O一 五 年 六 月

目录

1 绪论 ................................................. 1

1.1 单片机概述 ................................................. 1 1.2 信号发生器的介绍和分类.................................... 1 1.3 任务要求和设计内容 ........................................ 3

2 函数信号发生器的方案选择与设计 .................... 4

2.1 函数信号发生器设计方案的选择............................. 4

2.1.1 信号发生器电路方案 ...................................... 4 2.1.2 显示电路方案 ............................................ 5 2.1.3 按键控制电路方案 ........................................ 5

2.2 总体设计 ............................................ 6

3 系统硬件电路的设计 ............................... 7

3.1 单片机核心控制电路 .................................. 7

3.1.1 单片机芯片简介 .......................................... 7 3.1.2 引脚及功能说明 .......................................... 8 3.1.3 单片机硬件原理框图 ...................................... 9

3.2 D/A数模转换电路及波形产生模块 ..................... 10

3.2.1 DAC0832简介 ........................................... 10 3.2.2 DAC0832的特点 ......................................... 11 3.2.3 DAC0832与MCS-51的接口 ................................ 11

3.3 时钟电路模块 ....................................... 11 3.4 复位电路模块 ....................................... 12 3.5 液晶显示电路模块 ................................... 13 3.6 按键接口控制模块 ................................... 14

4 系统软件的设计 .................................. 15

4.1 程序流程图 ......................................... 15 4.2 波形设计 ........................................... 18

4.2.1 正弦波的设计 .......................................... 18 4.2.2 三角波的设计 .......................................... 18 4.2.3 方波的设计 ............................................ 18 4.2.4 锯齿波的设计 .......................................... 19

4.2.5 梯形波的设计 .......................................... 19

5 系统调试 ........................................ 20

5.1 硬件调试 .......................................... 20 5.2软件调试 ........................................... 20 5.3联机调试 ........................................... 21

结论 ............................................... 22 参考文献 ........................................... 23 致谢 ............................................... 24 附录A:硬件电路原理图 .............................. 25 附录B:PCB图 ...................................... 26 附录三:C51源程序 .................................. 27

南昌航空大学科技学院2015届学士学位论文

1 引言

1.1 单片机概述

单片机简单的说就是单片的计算机,又可以称为微处理器、微控制器或者嵌入式控制器。它是把计算机的基本部件微型化并且集成到一块芯片上的微型计算机,一般来说,片内包含中央处理器CPU、并行输入输出、串行输入输出、定时器/计数器、ROM、RAM、中断控制系统、系统时钟和系统总线等等。单片机有很多的优点,它的体积小使用起来方便,不仅功能强功耗还很低,对于使用者来说性价比很高价格也低廉,能够用到的领域也很多等等,比如说在自动化装置上、使用智能仪器或仪表使得测量数据更精确、通信领域、现代化家用电器、医疗器械等等各个领域成为不可或缺的一部分。

单片机系统的特点: (1)寿命长

什么是寿命长呢?一般分两个层面来说。一个层面上是指通过单片机制造出来的产品可以稳定可靠的的工作很多年,另一层面上是指和其他处理器使用起来的做对比,寿命长很多。 (2)8/16/32位共同发展 (3)运算速度越来越高 (4)低电压和低功耗

(5)抗干扰能力强、低噪声和高可靠性

1.2 信号发生器的介绍和分类

信号发生器(signal generator)又称信号源或振荡器。是输出供给量,产生频率、幅度、波形等主要参数都可调的信号。信号发生器其作用是:测量网络的幅频特性、相频特性;测量网络的瞬态响应;测量接收机;测量元件参数等。用于测量的信号发生器指的是能够产生不同频率、不同幅度的规则或不规则的信号源,在电子系统的测量、实验、校准和维护中等等方面有着很大的应用范围。它本身可以产生很多种不同的波形,如锯齿波、矩形波(含方波)、三角波、正弦波等甚至任意波形,各种波形曲线均可用三角函数方程式表示。如在制作和调试音频功率放大器时,就需要人为的输入一个标准音频信号,才能测量功率放大器的输出,得到功率放大器的相关参数,此时要用到的这个标准音频信号就是由信号发生器提供的,可见信号发生器的应用很广泛。

信号源可以分为通用和专用两种,通用信号源包括:正弦信号源、脉冲信号源、

1

南昌航空大学科技学院2015届学士学位论文

函数信号源、高频信号源、噪声信号源;专用信号源包括:电视信号源、编码脉冲信号源。信号发生器根据输出波形可以分为:正弦信号发生器、函数信号发生器、脉冲信号发生器和噪声信号发生器。 1)正弦信号发生器

主要用于测量电路和系统的频率特性、非线性失真、增益及灵敏度等。我们根据它不同用途和它的自身性能还可以分为低频(20Hz~10MHz)信号发生器、高频(100kHz~300MHz)信号发生器、微波信号发生器、扫频和程控发生信号发生器、频率合成式信号发生器等。 2)函数(波形)信号发生器

会产生特定的周期性时间函数波形(正弦波、方波、三角波、锯齿波和脉冲波等)信号,频率范围能从几微赫兹到几十兆赫兹。除供通信、仪表和自动控制系统测试外,还广泛用于其他非电测量领域。 3)脉冲信号发生器

能产生宽度、幅度和重复频率可调的矩形脉冲的发生器,可用以测试线性系统的瞬态响应,或用作模拟信号来测试雷达、多路通信和其他脉冲数字系统的性能。 4)随机信号发生器

它一般还细分为两种:噪声信号发生器和伪随机信号发生器。前者信号发生器的主要用途为:在待测系统中引入一个随机信号,以模拟实际工作条件中的噪声而测定系统性能;外加一个已知噪声信号与系统内部噪声比较以测定噪声系数;用随机信号代替正弦或脉冲信号,以测定系统动态特性等。当用噪声信号进行相关函数测量时,若平均测量时间不够长,会出现统计行误差,可用伪随机信号来解决。

信号发生器按照用途分可以分为专用信号发生器和通用信号发生器等;按照性能有普通信号发生器和标准信号发生器;按照调制类型可以分为调幅信号发生器、调频信号发生器、调相信号发生器、脉冲调制信号发生器及组合调制发生器等;按照频率调节方式可以分为扫频信号发生器、程控信号发生器等。

2

南昌航空大学科技学院2015届学士学位论文

1.3 任务要求和设计内容

本次的任务要求如下:

(1)设计函数发生器,利用51单片机作为控制电路,使该函数发生器能产生正弦波、三角波、方波、锯齿波、梯形波。

(2)使用同一按键选择五个波形,依次输出。要求幅度范围控制在0~5V,正弦波的频率范围控制在10~50Hz,步进值为10Hz;三角波的频率范围控制 在50~250Hz,步进值为50Hz;方波的频率范围控制在200~1000Hz,步进值为200Hz;锯齿波的频率范围控制在100~500Hz,步进值为100Hz;梯形波的频率范围控制在50~250Hz,步进值为50Hz。

(3)输出波形的同时LCD上显示波形名称和波形频率数值。 第一行显示内容为:

输出正弦波时显示:Sine Wave; 输出三角波时显示:Triangle Wave; 输出方波时显示:Square Wave; 输出锯齿波时显示:Sawtooth Wave; 输出梯形波时显示:Trapezoidal Wave; 第二行显示内容为:Frequency: *** Hz 。

本次设计的内容分为硬件和软件两个部分结合起来,得到所要五种比较典型的波形。

(1)系统的硬件设计:利用51单片机作为控制电路和DAC0832芯片进行数模转换结合成简易的函数信号发生器。这样电路可以产生所需要的五种波形,正弦波、三角波、方波、锯齿波和梯形波,同时对幅度和频率进行相应的控制。

(2)系统的软件设计:在本次设计中要用到Altium Designer软件进行PCB制图,然后编写程序要在Keil uVision环境中编译,再把程序导入STC89C51芯片中,最后利用示波器观察所要得到的波形结果。

3

南昌航空大学科技学院2015届学士学位论文

2 函数信号发生器的方案选择与设计

2.1 函数信号发生器设计方案的选择

2.1.1 信号发生器电路方案

目前实现简易信号发生器的方法挺多的,但是主要有以下几种: 方案一:用分立元器件组成的函数发生器

该方案的缺点比较明显,不好控制,需要靠手动来转换量程。除此以外,输出的信号频率较低,波形质量差,输出频率可以的调节范围小,设计的电路繁琐复杂并且体积很大不方便操作。

方案二:利用专门的函数发生器集成芯片组成的函数发生器

该方案能够方便的产生多种波形,还能达到较高的频率,设计的外围电路不仅简单且容易调试,但缺点就是功能比较少,精确度不高,调节起来的时候会发现方式不够灵活。

方案三:基于单片机结合DAC0832数模转换的函数信号发生器

该方案的优点是设计的电路简单明了,输出的信号频率稳定可靠也能达到一定的频率,并且抗干扰的能力也强,相对于其他方式来说很容易实现很多种不同的波形。可惜不足的地方是因为单片机处理数据的速度还是有限,当使用者需要它产生频率较高的信号时,输出波形的质量将会有所影响,造成下降。

方案四: 利用专用直接数字合成( DDS) 芯片输出频率的函数发生器 该方案具有输出频率高并且输出的频率稳定度高,除此之外输出的分辨率也高,易于实现全数字控制等优点,是目前设计高精度高性能信号发生器的首选方案,但是成本较高。

为了符合本次设计的要求和任务,需要从性价比方面和实现难以程度来考虑,比较上面的方案,可以看出方案一和方案二比较难以实现,缺点比较明显不太能够达到我们所要的效果,方案四虽然更容易实现达到设计的要求,功能也比较强大,但是成本比较高。最后,综合所有的考虑,选择方案三是最合适。

4

南昌航空大学科技学院2015届学士学位论文

2.1.2 显示电路方案

方案一:采用LED数码管显示。

LED数码管也称为半导体数码管,是很常用的显示器件。它是以发光二极管做笔段显示,按共阴极或共阳极方式连接后封装而成的。八段LED数码管是由8个发光二极管组成,每个数码管轮流显示各自的字符。显示二极管的内容通过单片机一般有两种方式:动态扫描显示和静态显示。使用静态显示可以使单片机的CPU开销小,但是需要有能带锁存的I/O接口电路。而动态扫描显示则是利用视觉暂留的原理,不断刷新显示码,这样给人的感觉显示的字符是一直静止的,它的外围电路简单不需要附加锁存电路。虽然数码管编程控制起来比较简单方便,但要显示的内容比较多,还有一个数码管的缺点就是不能显示字母。

方案二:采用液晶LCD1602显示。

LCD1602是一种很省电的电子设备,功耗也小,透过屏幕可以直接观察到数据,能同时显示出波形的类型、频率和步进值。LCD同样是利用编程来控制其输入,编程灵活方便,另外多于数码管的优点就是能够显示字母 。 以上方案综合考虑,方案二更合适。 2.1.3 按键控制电路方案

方案一:矩阵式键盘。

矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,这样一个端口就可以构成4*4=16个按键。采用矩阵键盘可以用较少的端口控制出比较多的按键。虽然可用于节省不少单片机的I/O口资源,但是编程起来比较复杂。

方案二:独立键盘。

独立键盘是一个I/O口控制一个键盘比起矩阵式键盘来说需要的接口更多点,但其硬件和软件编程上也比较简单、价格也便宜。

以上方案综合考虑,方案二更合适。

5

南昌航空大学科技学院2015届学士学位论文

2.2 总体设计

函数信号发生器系统主要由硬件系统和软件系统两部分组成。这次设计的函数信号发生器由单片机(STC89C51)作为主控制电路和DAC0832芯片进行数模转换构成函数信号发生器。另外由复位电路、稳压电源控制电路、整流部分、波形放大电路、按键控制部分、LCD液晶显示电路等构成,系统框图如图2.1所示:

图2.1 硬件系统框图

波形由所编程序控制产生,由单片机作为核心控制电路,向D/A的输入端按照一定的规律传送数据,将数字信号转变成模拟信号,再由DAC0832的输出端输出信号,输出的信号经过波形转换电路运算放大器LM324得到不同的波形。通过程序和按键控制部分来选择波形的类型、调制波形的幅度和频率。最后在LCD1602上显示波形的类型及数值。

6

南昌航空大学科技学院2015届学士学位论文

3 系统硬件电路的设计

3.1 单片机核心控制电路

3.1.1 单片机芯片简介

设计中采用了STC89C51芯片,和AT89C51一样都是51系列单片机但是属于增强型。不仅如此,功能更强大运行速度更快,使用寿命更长。可以不用昂贵的编程器,只用自己做一个编程即可,也都有20引脚和40引脚两种单片机,采用双列直插DIP-40封装。STC可以支持ISP在线编程功能可是AT系列的不能, 还有一个不同的是,STC的在线编程方式是通过串口进行的,AT的是并口编程方式,相对来说STC的在线编程方式简单点。 从经济实惠上来说,STC芯片比AT的更便宜一些。 所以综合功能和实际原因来说选用STC是为了减少成本,提高性能,并且原有的程序可以直接使用,硬件也不用改动。STC89系列芯片特性如图3.2所示。

图3.1 STC芯片特性图

7

南昌航空大学科技学院2015届学士学位论文

3.1.2 引脚及功能说明

图3.2 STC89C51引脚图

主要几个引脚的简单介绍: 1.电源线:VCC(+5V)、VSS(地)

2.振荡电路:XTAL1、XTAL2分别为反相器的输入和输出端

3.复位引脚:RST。当单片机一开始上电后,在该引脚上就会出现两个机器周期(24个振荡周期)宽度以上的高电平,就会使单片机复位。 4.并行口:P0~P4端口引脚

5.EA:访问程序存储器控制信号,当EA等于1时,CPU从片内程序存储器开始读取指令,当等于0时,CPU只访问外部程序存储器。 6.PSEN:外部ROM读选通信 7.ALE:地址锁存控制信号

8

南昌航空大学科技学院2015届学士学位论文

3.1.3 单片机硬件原理框图

图3.3 单片机最小系统

9

南昌航空大学科技学院2015届学士学位论文

3.2 D/A数模转换电路及波形产生模块

由于单片机只能输出数字信号,但是对于控制而言,常常就需要输出模拟信号,例如本次设计的函数信号发生器产生波形,这时候就需要单片机系统具有输出模拟信号的能力了。因此,采用了8位双缓冲D/A转换器DAC0832数模转换器。

D/A数模转换电路及波形的产生模块如下图3.4所示。

图3.4 数模转换及波形输出电路图

3.2.1 DAC0832简介

DAC0832是用先进的CMOS工艺做成的位数是8位的双列直插式D/A转换器。转换速度为1us,可直接与微机接口,DAC0832的内部结构框图如3.5所示。

图3.5 DAC0832内部结构

片内有R-2R的T型网络,网络自身产生的两个输出电流信号IOUT1和IOUT2分别是由两条对参考电压供应的两条回路产生的。芯片采用了8位DAC寄存器两次缓冲

10

南昌航空大学科技学院2015届学士学位论文

方式,这样做的目的是为了在D/A输出的同时,还能够送入下一个数据,这样可以提高转换的速度;也可以实现多片D/A转换器的同步输出。 3.2.2 DAC0832的特点

(1)有三种方式:双缓冲、单缓冲和直接输入数字方式; (2) 可以与12位D/A转换器DAC1230系列芯片引脚兼容; (3) 直接的数字接口可以与任何一款单片机相连; (4) 参考电压可以达到+10V;

(5) 可以用于电压开关模式;

(6) 输出的是电流信号,电流的建立时间为1us; (7) 单电源供电电压为5~15DC,功耗为20mW。 3.2.3 DAC0832与MCS-51的接口

DAC0832是电流输出型的,当D/A转换的结果要输入电压时,可以在DAC0832的两个电流输出端接上一个运算放大器,把电流信号转变成电压来输出。

3.3 时钟电路模块

时钟电路为整个单片机的运行产生“节奏”,让单片机内部所有的部分都随着这个节奏“起舞”。MCS—51芯片的内部本身也有时钟电路,可是石英晶体和微调电容要外接,系统允许的晶振频率为12MHZ。本次设计的晶振电路如下图3.6所示。这次的设计选用了12MHZ的晶振,分别接引脚 XTAL1 和 XTAL2,电容 C2.1和C2.2都选择了20pF,对振荡器的频率有稳定作用。

图3.6 晶振电路

11

南昌航空大学科技学院2015届学士学位论文

3.4 复位电路模块

方案一:RC复位电路

复位电路由芯片的复位引脚RST与VCC直接接上一个10uf的电容,再经过一个10K的下拉电阻接GND。复位电路通常有两种复位的方式:上电复位和按钮复位。本次电路设计里面加了一个按键开关,选择的按钮复位。是在系统运行的时候,按一下这个按键,RST处就会出现一段高电平,使系统复位。按键复位电路如下图3.7所示。

图3.7 复位电路

方案二:二极管RC复位电路

复位电路增加了二极管,在电源电压瞬间下降时使电容迅速放电, 一定宽度的电源毛刺也可令系统可靠复位。按键复位电路如下图3.8所示。

图3.8二极管RC复位电路 综合所有因素考虑,选取方案一。

12

南昌航空大学科技学院2015届学士学位论文

3.5 液晶显示电路模块

本次设计采用的是液晶LCD1602显示。LCD1602是一种很省电的电子设备,功耗也小,透过屏幕可以直接观察到数据,能同时显示出波形的类型、频率和步进值。LCD1602同样是利用编程来控制其输入,编程灵活方便,另外多于数码管的优点就是能够显示字母 。液晶显示部分如下图3.8所示。

图3.8 液晶显示电路

字符型LCD1602通常有16个引脚,也有少数有14个引脚,当选用14个引脚的LCD1602时,该LCD1602没有背光。

13

南昌航空大学科技学院2015届学士学位论文

3.6 按键接口控制模块

本次设计采用的是独立键盘。独立键盘是一个I/O口控制一个键盘,比起矩阵式键盘来说需要的接口更多点,但其硬件和软件编程上也比较简单、价格也便宜。这次按键部分共有3个按键组成,其中按键S4.0控制选择五种波形的类型,按键S4.1控制波形频率的递增,按键S4.2控制波形频率的递减。按键电路如下图3.9所示。

图3.9 按键电路

14

南昌航空大学科技学院2015届学士学位论文

4 系统软件的设计

4.1 程序流程图

首先对让系统上电,对程序初始化,紧接着判断按键是否按下?若按下,则开始计算相关的参数,计算的同时一方面是利用定时中断来查询选择波形输出的类型后紧接着输出波形;另一方面是把计算后的相关参数送到显示的端口处,传送来的数据使得液显LCD第一行显示波形的类型,第二行显示波形的频率。若按键没有按下,依旧跳到系统初始化处等待着按键是否按下。在按键按下执行完一系列的步骤使得波形输出后,最后又反馈回去构成循环,判断按键的相关信息。

主程序流程图如4.1所示。

开始 液晶初始化 定时器初始化 中断初始化 否 按键是否按下 是 计算参数输出 相对应的波形 液晶显示

图4.1 主程序流程图

15

南昌航空大学科技学院2015届学士学位论文

定时器0流程图如4.2所示。 开始 定时器0产生中断 是 是否输出 正弦波? 查表DAC0832输出特性相对应的电压值 否 是 是否输出 三角波? 查表DAC0832输出特性相对应的电压值 否 是 是否输出 方波? 否 是 是否输出 锯齿波? 查表DAC0832输出特性相对应的电压值 取反DAC0832输出特性相对应的电压值 否 否 是否输出 梯形波 是 查表DAC0832输出特性相对应的电压值 结束 图4.2 定时器0流程图 16

南昌航空大学科技学院2015届学士学位论文

外部中断0:控制按键,流程图如图4.3所示。 开始 外部中断0中断请求 是 是否”选择” 键按下 输出波形改变 否 是 是否”加” 键按下 频率加 否 是 是否”减” 键按下 频率减 否 更新液晶显示 开关断 结束 图4.3 外部中断0流程图 17

南昌航空大学科技学院2015届学士学位论文

4.2 波形设计

4.2.1 正弦波的设计

本次设计中正弦波设定为256个采样点,即均匀地分为256份。每个采样点之间的间隔时间是相同的,由定时器来控制间隔时间,计算公式为:tT。当第256一个采样点开始时,系统自动查表获取采样点对应的电压,送给DAC0832的输入端后保持一段时间,再根据定时器所设定的时间间隔来进行第二个采样点的工作,同样地是系统自动查表获取所采样点对应的电压送入到DAC0832的输入端。由此循环,到第256采样个点时结束第一次循环。这时候,我们在示波器,上就可以看见一个正弦波了。

4.2.2 三角波的设计

三角波设定为64个采样点,即均匀地分为64份。每个采样点之间的间隔时间是相同的,由定时器来控制间隔时间,计算公式为:tT。当第一个采样点开64始时,系统自动查表获取采样点对应的电压,送给DAC0832的输入端后保持一段时间,再根据定时器所设定的时间间隔来进行第二个采样点的工作,同样地是系统自动查表获取所采样点对应的电压送入到DAC0832的输入端。由此循环,到第64采样个点时结束第一次循环。这时候,我们在示波器上就可以看见一个三角波了。 4.2.3 方波的设计

方波设定为2个采样点,即均匀地分为2份。每个采样点之间的间隔时间是相同的,由定时器来控制间隔时间,计算公式为:tT。当第一个采样点开始时,2系统自动查表获取采样点对应的电压,送给DAC0832的输入端后保持一段时间,由于是方波的采样点比较少,使用保持的时间可以久点。再根据定时器所设定的时间间隔来进行第二个采样点的工作,同样地是系统自动查表获取所采样点对应的电压送入到DAC0832的输入端。由此循环,到第2采样个点时结束第一次循环。这时候,我们在示波器上就可以看见一个方波了。

18

南昌航空大学科技学院2015届学士学位论文

4.2.4 锯齿波的设计

锯齿波设定为32个采样点,即均匀地分为32份。因为锯齿波的形状是三角波的一半,所以我们在设定采样点可以直接采用三角波采样点的一半,这样比较方便。每个采样点之间的间隔时间仍然是相同的,由定时器来控制间隔时间,计算公式为:

tT。当第一个采样点开始时,系统自动查表获取采样点对应的电压,送给32DAC0832的输入端后保持一段时间,再根据定时器所设定的时间间隔来进行第二个采样点的工作,同样地是系统自动查表获取所采样点对应的电压送入到DAC0832的输入端。由此循环,到第32采样个点时结束第一次循环。这时候,我们在示波器上就可以看见一个锯齿波了。 4.2.5 梯形波的设计

梯形波设定为65个采样点,即均匀地分为65份。每个采样点之间的间隔时间是相同的,由定时器来控制间隔时间,计算公式为:tT。当第一个采样点开65始时,系统自动查表获取采样点对应的电压,送给DAC0832的输入端后保持一段时间,再根据定时器所设定的时间间隔来进行第二个采样点的工作,同样地是系统自动查表获取所采样点对应的电压送入到DAC0832的输入端。由此循环,到第65样个点时结束第一次循环。这时候,我们在示波器上就可以看见一个梯形波了。

19

南昌航空大学科技学院2015届学士学位论文

5 系统调试

5.1 硬件调试

通电前先检查硬件焊接质量,例如无短路、无虚焊、无连焊等故障。确认无故障后,随后上电检查。硬件调试主要有电源模块检查、电源工作指示灯、晶振模块检查、复位电路检查、按键控制模块检查、LCD1602显示屏模块检查。以下是我在硬件调试过程中碰到的问题及解决方案:

(1)上电冒烟,9V电源模块的工作指示灯没亮

首先通过肉眼观察,确认是稳压管7809烧了,随后查找电路图,经过反复检查,确定是稳压管7809焊反了。重新换过稳压管7809并上电,发现9V电源模块的工作指示灯没亮。因为没办法通过肉眼初步判定是哪个地方出了问题,所以我立即用万用表检查稳压管7809的输出电压,万用表显示输出电压为9V,大致判定稳压管7809没有问题,而是9V电源模块的工作指示灯那一路电路出了问题。随后立即查找电路图,经过反复检查,确认是LED工作指示灯焊反了。将LED工作指示灯重新焊过,随后重新上电,电源模块一切正常。 (2)LCD1602显示屏不亮

首先通过肉眼观察,初步判定是短路了。随后拿来万用表,打到二极管档,边查找电路图边检查电路,经过反复检查,最终确认是LCD1602显示屏的VCC引脚与GND引脚短路了。后来用烙铁将短路的焊锡挑开,重新上电,LCD1602显示屏工作正常。

硬件调试到此结束,硬件工作正常。

5.2软件调试

软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除的过程。软件调试一般采用先独立后联机、先分块后组合、先单步连续的调试方法。在软件调试中,首先调试子程序或函数,其次调试中断服务程序或函数,最后调试主程序或函数。许多子程序和目标硬件无关,对这部分程序完全可以和硬件进行同步调试或先于硬件进行调试。

20

南昌航空大学科技学院2015届学士学位论文

5.3联机调试

可以产生五种不同的波形,调试时只需要测芯片不同输出信号的对应引脚。测试结果:可以产生正弦波、三角波、方波锯齿波和梯形波五种不同的波形。

正弦波

三角波

梯形波

方波 锯齿波 21

南昌航空大学科技学院2015届学士学位论文

结论

随着社会的快速发展,电子科技发展的也特别迅速使得现在的世界有了一个本质的转变,但在电子给我们带给我们的便捷的同时,我们也必须要了解掌握更深层次的研究才能才能更好的为社会带来进步。信号发生器是一种基本也是常用到的电子仪器,我们在实验、调试系统、和对产品的开发和研究中也是必不可少的,所以这次设计的函数信号发生器是针对比较基本典型的功能来实现的。本次设计的函数信号发生器由两个部分组成:硬件和软件两个部分。在硬件上的设计是采用51单片机作为控制电路和DAC0832芯片进行数模转换构成函数信号发生器。使得电路能产生正弦波、三角波、方波、锯齿波和梯形波。系统的软件设计是在要用到Altium Designer软件进行PCB制图,然后编写程序要在Kcil uVision环境中编译,再把程序导入STC89C51芯片中,最后,通过调节示波器来观察设计所要得到的五种不同波形结果。

采用单片机设计的简易函数信号发生器,,该方案优点是设计简单,输出信号的频率稳定,抗干扰能力强,容易实现任意波形的信号,突出了简单、方便、实用等优势。但不足之处是由于单片机处理数据的速度有限,当需要产生频率较高的信号时,输出波形的质量将下降。另外当时为了电路图看起来简单一些,设计了一个按键控制五种波形的展示,其余按键控制频率或者复位等等,可是操作起来的时候发现应该每一种波形对应一个按键,这样的话可以节省时间,当需要那种波形的时候就可以直接按倒哪个波形不需要波形按照设定的顺序轮流显示。

22

南昌航空大学科技学院2015届学士学位论文

参考文献

1 2 3 4 5 6 7

江志红. 51单片机技术与应用系统开发案例精选[M].北京:清华大学出版社.2008.12 .283.

臧春华,邵杰,魏小龙. 综合电子系统设计与实践[M].北京:北京航空航天大学出版社.2009.11.271~272.

王松武,于鑫,武思军. 电子创新设计与实践[M].北京:国防工业出版社.2005.1. 235~ 236.

宁武,唐晓宇,闫晓金. 全国大学生电子设计竞赛基本技能指导[M].北京:电子工业出版社.2009.5.194~197.

马玉丽,康丽娟. 函数信号发生器制作方法的比较与分析[J].青岛远洋船员学院学 报.2007,28( 2) :34~37.

张少辉. 基于DDS技术构建信号发生器[J].中国科技信息.2007,(1) :94~96. Qiu Hui taught you learn 51 SCM Beijing: Electronic Industry Press [M] .2009,1 47,152 ~ 153,158.

8 Zhaoquan Li, Xiao Xingda Principles and Applications Guide (second edition) [M] Beijing: Mechanical Industry Press .2010.1.

9 蓝和慧,宁武,闫晓金. 全国大学生电子设计竞赛单片机应用技能精解[M].北京:电子工业 出版社.2009.4 39,96.

10 樊昌信. 通信原理[M].北京:国防工业出版社.2006.

11 蔡美琴. MCS-51系列单片机系统及应用[M].北京:高等教育出版社.2004,2.

12 徐惠民,安德宁丁玉珍. 单片微型计算机原理接口及应用第三版[M].北京:北京邮电大学出版社.2007.8.

13 纪宗南. 单片机外围器件实用手册[M].北京:北京航空航天大学出版社.1999. 14 姚福安. 电子电路设计与实践[M].济南:山东科学技术出版社.2001.

15 陈言俊. 大学生创新竞赛实战:凌阳16位单片机应用[M].北京:北京航空航天大学出版 社.2009.8.

16 侯玉宝. 基于proteus的51系列[M].北京:电子工业出版社.2008.9. 17 冯育长. 单片机设计与实例分析[M].西安:西安电子科技大学出版社.2007.5. 18 李泉溪. 单片机原理与应用实例仿真[M].北京:北京航空航天大学出版社.2009.8.

23

南昌航空大学科技学院2015届学士学位论文

致谢

时间总是过得悄无声息,一转眼就到了我们毕业的时候。回顾大学四年,无论是在学习还是生活中有很多的苦与乐。通过毕业设计让我明白所学的知识不仅要掌握熟练还得和实践结合起来才能更好的运用到今后的工作中。

完事开头难,做事情要有始有终。最开始很头痛,可是在做毕业设计的过程中,我真的是少不了我的导师耐心指导,有不足的时候及时帮我指出,同时还要感谢同学的热情帮助和鼓励,把自己会的知识教给我,让我能够顺顺利利的完成毕业设计。通过设计也让我学会在丰富全面的网络资源上找到需要的相关资料。首先要感谢的是我的导师邓老师,每次在我遇到有关毕业设计上的问题时总是会很耐心的为我解答,每次当我们要和老师见面的时候,老师不管天气怎样,地点在哪里,都会带着为我们解疑的心来到学校和我们见面。我的开题报告、外文翻译、论文等等都是在邓老师悉心的指导和改进下完成的,在此非常感谢他,虽然毕业设计就只有短短的几个月,但是对我的影响很大,不论是邓老师的渊博知识和崇高的人格品质,都再次让我觉得老师这个职业很神圣伟大。邓老师为人随和,严谨求实的作风与工作态度,还有对工作对学生的指导,也深深的影响了我。再次感谢我的指导老师。

再者,我还要感谢帮助过我的同学们,当我忘记买一些零散的元器件时,他们会帮我买回来;当在我制作电路有问题时他们会运用他们比我懂的知识来帮助我解决;当在调试过程中,我的硬件焊接部分找不出原因,编程遇到瓶颈时,他们都会很热心的来帮助我并教我不懂的部分,我真的也很感谢他们!

最后,我还得感谢我的父母,虽然不在身边,但是他们关切的话语一直围绕在我身边还给予我物质和精神上的支持和鼓励。感谢母校四年的栽培,不仅让我获得知识,悉心的栽培我们,还教会我在社会中做人的道理,衷心感谢母校为我们所做的一切,我要更加努力,实现自我的价值来报答父母和母校!

24

南昌航空大学科技学院2015届学士学位论文

附录A:硬件电路原理图

25

南昌航空大学科技学院2015届学士学位论文

附录B:PCB图

26

南昌航空大学科技学院2015届学士学位论文

附录三:C51源程序

/*******************************************************/ #include

#define uchar unsigned char #define uint unsigned int

#define DAdata P1 //DA数据端口

sbit DA_S1= P3^1; // 控制DAC0832的8位输入寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存 sbit key= P3^2;

uchar wavecount; //'抽点'计数

uchar THtemp,TLtemp;//传递频率的中间变量

uchar judge=1; //在方波输出函数中用于简单判别作用 uchar waveform; //当其为0、1、2时,分别代表三种波

uchar code freq_unit[5]={10,50,200,100,50}; //三种波的频率单位

uchar idata wavefreq[5]={1,1,1,1,1}; //给每种波定义一个数组单元,用于存放单位频率的个数

uchar code lcd_hang1[]={\"Sine Wave \" \"Triangle Wave \" \"Square Wave \" \" sawtooth wave \" \"trapezoidal wave\" \"Select Wave: \" \"press No.1 key! \

uchar idata lcd_hang2[16]={\"f= Hz \

/***********这两组数组很重要,需要根据波形来调试,选择合适的值,使输出波形达到频率要求************/ uchar code waveTH[]={

0xfe,0xff,0xff,0xff,0xff, 0xfe,0xff,0xff,0xff,0xff, 0xf6,0xfb,0xfc,0xfd,0xfe, 0xfe,0xff,0xff,0xff,0xff, 0xfe,0xff,0xff,0xff,0xff};

27

南昌航空大学科技学院2015届学士学位论文

uchar code waveTL[]={

0x8a,0x4e,0x93,0xb3,0xc6, //正弦波频率调整中间值 0xde,0x7a,0xaf,0xc8,0xee, 0x50,0x32,0xbe,0xa3,0x2c, 0x8a,0x4e,0x93,0xb3,0xc6,

0x8a,0x4e,0x93,0xb3,0xc6}; //方波频率调整中间值

/*************************************************************************************************/

uchar code triangle_tab[]={ //每隔数字8,采取一次

0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78,

0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8,0xf0,0xf8,0xff,

0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x98,0x90,0x88,0x80,

0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x18,0x10,0x08,0x00};

uchar code sine_tab[256]={

//输出电压从0到最大值(正弦波1/4部分)

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, //输出电压从最大值到0(正弦波1/4部分)

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,0

//三角波频率调整中间值

28

南昌航空大学科技学院2015届学士学位论文

xd1,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, //输出电压从0到最小值(正弦波1/4部分)

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, //输出电压从最小值到0(正弦波1/4部分)

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(uchar z) {

uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void triangle_out() {

DAdata=triangle_tab[wavecount++]; if(wavecount>64) wavecount=0; DA_S1=0; //打开8位输入寄存器 DA_S1=1; //关闭8位输入寄存器

//三角波输出

29

南昌航空大学科技学院2015届学士学位论文

}

void sawtooth_out() {

DAdata=triangle_tab[wavecount++]; if(wavecount>32) wavecount=0; DA_S1=0; //打开8位输入寄存器 DA_S1=1; //关闭8位输入寄存器 }

void trapezoidal_out() //梯形波输出 {

if(wavecount<22) { }

else if(wavecount>41)

DAdata=triangle_tab[wavecount++]; DAdata=triangle_tab[wavecount++];

//锯齿波输出

else

if(wavecount>64) wavecount=0; DA_S1=0; //打开8位输入寄存器 DA_S1=1; //关闭8位输入寄存器 }

void sine_out() //正弦波输出 {

DAdata=sine_tab[wavecount++]; DA_S1=0; //打开8位输入寄存器 DA_S1=1; //关闭8位输入寄存器 }

wavecount++;

30

南昌航空大学科技学院2015届学士学位论文

void square_out() //方波输出 {

judge=~judge;

if(judge==1) DAdata=0xff; else DAdata=0x00;

DA_S1=0; //打开8位输入寄存器 DA_S1=1; //关闭8位输入寄存器 }

/************1602液晶的相关函数*************/ #define lcd_ports P0 sbit rs=P2^0; sbit rw=P2^1; sbit lcden=P2^2;

void write_com(uchar com) {

rs=0; //置零,表示写指令 lcden=0; lcd_ports=com; delay(5); lcden=1; delay(5); lcden=0; }

void write_date(uchar date) {

rs=1; //置1,表示写数据(在指令所指的地方写数据) lcden=0;

31

南昌航空大学科技学院2015届学士学位论文

lcd_ports=date; delay(5); lcden=1; delay(5); lcden=0; }

void disp_lcd(uchar addr,uchar *temp1) {

uchar num; write_com(addr);

delay(1); //延时一会儿??? for(num=0;num<16;num++) { } }

void init_lcd() {

//uchar num;

lcden=0; //可有可无???

rw=0; //初始化一定要设置为零,表示写数据 write_com(0x38); //使液晶显示点阵,为下面做准备 write_com(0x0c); //初始设置 write_com(0x06); //初始设置 write_com(0x01); //清零

write_com(0x80); //使指针指向第一行第一格

disp_lcd(0x80,&lcd_hang1[5*16]); //在第一行显示 disp_lcd(0xc0,&lcd_hang1[6*16]); //在第二行显示

write_date(temp1[num]);//或者这样写write_date(*(temp1+num)); delay(1);

32

南昌航空大学科技学院2015届学士学位论文

}

/********************1602液晶函数声明结束*********************/

void main() {

uchar i=0; DAdata=0;

DA_S1=1; //关闭8位输入寄存器 init_lcd(); waveform=0;

TMOD=0x01; //设置定时器0为16位工作方式 IT0=1; //设置外部中断0为下降沿触发 ET0=1; //开定时器中断 EX0=1; EA=1; while(1); }

void timer0() interrupt 1 {

TH0=THtemp; TL0=TLtemp;

if(waveform==0) sine_out(); //正弦波 else if(waveform==1) triangle_out(); //三角波 else if(waveform==2) square_out();

//方波

else if(waveform==3) sawtooth_out(); //锯齿波 else if(waveform==4) trapezoidal_out(); //梯形波 }

void key_int0() interrupt 0

33

南昌航空大学科技学院2015届学士学位论文

{

uchar keytemp;

uint total_freq; //总频率

EA=0; TR0=0; //关总中断与定时器 delay(5); //延时够吗???

if(key==0) //确实有按键按下而引发中断 {

case 0xa0: //频率按规定单位依次增加

wavefreq[waveform]++;

if(wavefreq[waveform]>5) wavefreq[waveform]=1; // /*这边要用

keytemp=P3&0xe0; //获取P3口高四位的值 switch(keytemp) {

case 0x60:

//选择波形

waveform++;

if(waveform>4) waveform=0; break;

“>10”,因为它比“=11”可靠

break;

// 性更高,使

加数有个上限,不会一直加下去*/

case 0xc0: //频率按规定单位依次衰减

wavefreq[waveform]--;

if(wavefreq[waveform]<1) wavefreq[waveform]=5; //这边要用

“<1”,因为它比“=0”可靠性更高

THtemp=waveTH[waveform*5+(wavefreq[waveform]-1)]; //方括号中选取第几个数后,并把该值赋给T_temp

}

break;

34

南昌航空大学科技学院2015届学士学位论文

TLtemp=waveTL[waveform*5+(wavefreq[waveform]-1)];

total_freq= wavefreq[waveform] * freq_unit[waveform]; //求输出频率(个数*单位)

lcd_hang2[5]=total_freq%10+0x30; //在液晶中显示个位,(0x30 在液晶显示中表示数字0)

total_freq/=10; lcd_hang2[4]=total_freq%10+0x30; //在液晶中显示时十位

total_freq/=10; lcd_hang2[3]=total_freq%10+0x30; //在液晶中显示时百位

total_freq/=10; lcd_hang2[2]=total_freq%10+0x30; //在液晶中显示时千位

disp_lcd(0x80,&lcd_hang1[waveform*16]); //在第一行显示 disp_lcd(0xc0,lcd_hang2); //在第二行显示 }

wavecount=0; //'抽点'计数清零 while(!key);

EA=1; TR0=1; //开启总中断与定时器 }

35

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务