加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机的信号发生器设计

09/05 09:59
1498
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
  • 方案介绍
    • 引言
    • 1  课题背景意义及研究内容
    • 2  设计方案选择
    • 3  系统硬件设计
    • 4  系统软件设计
    • 5  系统调试与测试
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

引言

随着电子技术的迅猛发展,电子设备如雨后春笋般出现,给人们的生活各个方面都带来了极大的改善。在各个领域都有函数信号发生器的身影,广泛应用于通信、工业、农业、医学、科研、无线电等领域。随着各个行业逐渐提高了对信号源的要求[1],信号发生器慢慢地难以满足人们的需求。

优质的信号发生器在实验研究中有着举足轻重的地位。在实验室中,许多实验都与信号发生器紧密相关。一次实验能否成功,与信号源的性能有着很大的联系。甚至在一些对信号源的要求较高的实验中,只要信号源有一点误差,就可能会导致整个实验产生很大的偏差,最终就可能造成这次实验得到不正确的结论,甚至导致需要重新开始实验。

因此,稳定的函数信号发生器非常符合基本的实验需求。目前广泛使用的是由数字电路构成的新型函数信号发生器,此类信号发生器精度可控,性能较于传统信号发生器更加稳定可靠。新型信号源采用DDS技术,通过控制电路输出信号的频率、幅度等参数进行控制[2]。

随着集成电路的迅速发展,单片机的体积变小,功能增多,单片机的设计成本和生产成本更低,所以其应用范围变得更加广泛,一般功能的单片机已经能满足函数信号发生器基本的控制要求。在人机交互方面,新型信号发生器因为单片机的使用也变得更加简单高效。这种价格便宜、功能齐全、运算迅速的新型函数信号发生器,在实际应用中能产生更高的经济效益。

本文首先介绍了该课题的背景和研究内容,接着比较了各方案的优劣,提出信号发生器的总体设计方案,也介绍了DDS芯片的基本工作原理。继续依次介绍了系统的硬件电路设计软件程序设计。最后,介绍了成品的调试过程和测试结果分析,并给出了结论和改进计划。

1  课题背景意义及研究内容

1.1 课题背景及研究意义

此次毕业设计的课题是《信号发生器的设计》,是工程设计类的课题。

当今社会,信息时代带来的全面飞速发展,强力地推动着各个领域的进步,尤其是电子设备。在实验中,总是伴随着参数测量的过程,而参考信号都由信号发生器来提供,是经常使用的仪器。

由于社会发展进程加快,许多实验对信号发生器的要求逐渐提高,不仅要求输出波形有较高的精度,还要求能输出多种波形,同时要避免复杂的操作,并且幅值和频率及占空比都要可以调节,还要求相位可调等功能。新型信号发生器既能符合不断提高的市场需求,还能减小经济成本。传统模拟信号发生器有着结构简单,输出频率范围宽的优点,但输出信号单一,且不稳定。当对信号要求较高时,就需要新型信号发生器,传统模拟信号发生器已经难以满足实验测试要求。

因此传统模拟信号发生器正在慢慢地退出历史舞台。而新型信号发生器具有精度高、稳定度高、相位可调等优越的性能,能够满足电子实验的高要求,因此飞速地发展着。

本次课题所设计的信号发生器,控制器使用的是单片机,用DDS芯片产生三种频率可调的波形信号,加入数字电位器运算放大器来调节幅度。通过按键来设定输出信号的相关参数,并用LCD液晶屏显示。能以较少的经济支出,设计出满足基本的实验测试要求的信号发生器。

1.2 课题研究内容

设计信号发生器,输出一定频率范围的正弦波三角波方波

设计要求:

(1)输出信号频率范围:10Hz-5MHz;

(2)输出信号幅值范围:0-10V;

(3)使用液晶屏显示信号种类、频率及幅度。

2  设计方案选择

2.1 系统控制芯片选择

方案一:使用STC89C52单片机作为控制芯片。该单片机是8位单片机,操作简单,外围硬件电路也简单,高速,功耗低,有较强的抗干扰能力,并且价格低,因此在市场上被广泛销售。编程方式十分灵活,程序可通过通信串口直接下载,程序调试也十分方便。能满足作为主控芯片的要求。

方案二:使用STM32系列微控制器,该系列是ARM Cortex-M内核的32位微控制器,外设功能一流。程序方面,厂家提供了丰富的函数库,能胜任更加繁重的工作。相较于52系列单片机,性能更加强大,但是,成本更高,电路设计和操作更复杂,编程的难度也更大,性价比也不高。

综合以上方案,考虑到器件成本和开发难度以及性能问题,对于本课题而言,STC89C52单片机已经能够满足作为主控芯片的要求。因此,控制芯片选择为STC89C52单片机。

2.2 信号发生方式选择

方案一:由分立元器件搭建而成的函数信号发生器,一般是单信号发生器,频率较低,工作起来也不稳定,且难以调试。

方案二:由集成芯片构成的函数信号发生器,可产生较多类型的信号,频率较高,也易于调试。例如MAX038芯片,精度好,但是输出信号也难以达到很高的频率。

方案三:由DDS芯片构成的函数信号发生器,可生成多种类型的波形信号,通过程序控制频率的方式也十分灵活,频率上限高,产生的波形信号不失真,有较高的精度,但成本相对较高。

综合以上方案,使用DDS芯片来产生信号是最好的选择,用单片机控制DDS芯片也较为方便,因此选择DSS芯片来生成信号。

2.3 系统整体设计方案

综上所诉,系统整体设计方案最终确定为:以STC89C52单片机为系统主控芯片,使用DDS芯片来生成信号,以独立按键和LCD1602液晶显示屏来做人机交互,调节信号频率和幅度及显示相关参数。整体硬件电路设计共5个模块:单片机最小系统、DDS信号发生模块、电源模块、功能按键模块、液晶显示模块。其中最小系统主要包括STC89C52单片机、晶振电路复位电路和下载口等部分,处理按键输入和发送控制指令及数据;DDS信号发生模块有AD9833芯片、有源晶振、数字电位器、运算放大器等部件,能产生设定频率和幅度的信号;电源模块由滤波电容、自锁开关和LED指示灯组成,能提供5V直流电,供电给各模块;功能按键模块由5个独立按键组成,负责调节信号频率和幅度以及信号波形种类;液晶显示模块由LCD1602显示屏和可调

组成,能显示相关的参数信息。总体系统框图如图2-1所示。

3  系统硬件设计

3.1 单片机最小系统

3.1.1单片机STC89C52

STC89C52系列单片机是国产的单片机,高速,功耗较低,抗干扰能力也很强,性能稳定,价格便宜,有着相当广泛的应用。

该单片机共有四组准双向I/O口,分别是P1、P2、P3、P4。MCU包含8KB程序存储器(Flash)、512字节数据存储器(SRAM)、3个定时器/计数器、8个中断源。

3.1.2单片机最小系统

单片机最小系统由单片机、晶振电路、复位电路、下载口组成,其中使用的单片机是STC89C52,该单片机是8位的,能提供简单、灵活、有效的解决途径给较复杂的控制应用系统。

晶振电路由一个12MHz晶振和两个30pF瓷片电容组成。晶振并联在单片机的18脚与19脚,再分别串联一个瓷片电容接到地端就构成了晶振电路。电容的主要作用是使晶振更加容易起振,称为谐振电容[3]。单片机STC89C52工作所需要的稳定时钟是由此电路提供的。

MCS-51单片机通常采用上电复位和按键复位这两种复位方式[4]。复位电路是由一个10μF电解电容和一个4.7KΩ电阻及一个按键组成的。在单片机的RST复位引脚串联一个电容至电源端,再串联一个电阻接到地端,接着把一个按键并联在电容两端,这样复位电路就连接好了。52单片机的复位引脚RST只要能维持24个时钟周期的高电平信号即可完成复位。此电路使STC89C52单片机开机自动复位和按下按键手动复位。

3.2 DDS信号发生模块

DDS信号发生模块的组成主要有AD9833芯片和MCP41010数字电位器以及AD8065运算放大器。

3.2.1AD9833芯片介绍

AD9833芯片是一种可通过程序控制的DDS芯片,需要由外部晶振来提供工作时钟,能够输出的波形信号有正弦波信号、三角波信号和方波信号[5]。可通过程序来调节输出波形信号的频率,十分方便。通过串行接口将数据写入AD9833芯片,该串行接口能与微控制器接口标准兼容[6]。

3.2.2AD9833芯片工作原理

正弦波信号一般是用幅度来表示,即 。由于正弦波曲线不是线性的,除非一段一段地生成,否则很难构建。但是,正弦波相位角度的变化是线性的。也就是说,在单位时间内,正弦波相位角度的变化量是一个固定不变的值。角速率跟信号频率之间存在一定的数学关系,即 。正弦波波形和相位关系如图3-2所示。


已知正弦波的相位变化是线性的[7],在确定了时间间隔的情况下,就可以确定该时间间隔内的相位变化情况。

由 ,可导出 ,再导出 。再将时间间隔替换为时钟频率,即 ,最后导出 ,AD9833根据这个简单公式来构建输出信号频率。

3.2.3AD9833芯片结构与功能

芯片AD9833的内部主要包括了电压调整器、频率寄存器和相位寄存器、相位累加器、正弦存储器(SIN ROM)、数模转换器(DAC)等电路[8]。AD9833功能框图如图3-3所示。

AD9833芯片的主要部件是相位累加器,存在频率寄存器中的频率控制字送到相位累加器进行处理后,又由相位累加器送到正弦存储器中[9]。正弦存储器中储存了完整的1个周期内的正弦波信号幅度信息,每一个信息都与0°-360°相位角度内的正弦波信号的每个点相对应[10]。正弦存储器把输入的相位信息对应转换成正弦波信号幅度的数字量,再送到DAC转换成模拟量后输出。这一过程经过了 个MCLK的时间,正弦存储器完成了所有相位点的转换,一个周期的正弦波信号这样便产生了。输出正弦波频率为: 。其中, 为频率控制字,由程序计算得出,其范围为 。 是外部晶振的频率值,通常是25 。

AD9833采用10引脚MSOP封装。引脚配置图如图3-4所示。

根据AD9833芯片的引脚配置,设计的AD9833芯片外围电路如图3-5所示。

在AD9833外围电路中,最重要的是防止信号干扰。

电压输入到COMP引脚,为了滤除电压上的高频噪声,串联了一个0.1μF去耦电容,使得AD9833的供电电压更加稳定,以起到保护芯片的作用。

VDD引脚是芯片模拟和数字接口部分的正电源。连接一个0.1μF和一个10μF的去耦电容[11],两个电容配合使用能更好地滤除干扰噪声。

芯片的数字部分供电为2.5V。当芯片VDD上的电压达到2.7V时,芯片中的电压调整器将会产生2.5V的稳定电压供给芯片的数字电路。本设计中,VDD引脚上的电压为5V,已经超过了2.7V,因此芯片CAP/2.5V引脚不必再额外供电,为了滤除干扰噪声,只连接了一个0.1μF和一个10μF的去耦电容。

芯片的工作时钟从MCLK引脚输入,选用的是25MHz的有源晶振,需要为该有源晶振供电,供电电压为5V。

芯片的SDATA、SCLK、FSYNC三个引脚都与数据传输和控制有关,串行数据从SDATA端输入,串行时钟从SCLK端输入[12],FSYNC是传输控制端,分别连接到单片机的P1口的P1.0、P1.1和P1.2,用单片机发送控制数据到AD9833芯片中,以产生不同频率和不同种类的波形信号。

3.2.4DDS模块整体设计

由于AD9833芯片输出的信号幅度固定不可调节,且峰峰值只有600mV。因此在AD9833芯片信号输出端连接了一个数字电位器MCP41010和一个运算放大器AD8065。运放能够放大输出信号的幅度,设计为同相比例放大器,放大倍数由 计算得出。本设计中, 为5.1KΩ, 为820Ω,计算得出该同相比例放大器的放大倍数为7.2倍,理论上最终输出的电压能达到4.3V。

通过单片机程序控制来调节数字电位器的抽头PW到电阻两端PA和PB的电阻比例来调整输出信号的幅度。AD9833芯片的后级电路如图3-6所示。

3.3 电源模块

从电源输入口输入5V直流供电。自锁开关控制电源通断,按下时导通,弹起时断开。两个电容起到滤波的作用,使供电电压质量更好。电源的工作指示灯用了一个发光二极管电源电路如图3-7所示。

3.4 功能按键模块

功能按键由5个独立按键组成。K1为数值加,K2为数值减,K3为频率/幅度调节切换,配合K1和K2可分别调节频率或幅度的数值;K4为步进值切换,按下可切换频率步进值;K5为波形切换,按下可切换输出波形信号的种类。按键占用了单片机P3口的P3.2~P3.6。功能按键电路如图3-8所示。


3.5 液晶显示模块

显示模块主要用LCD1602液晶屏来显示信号参数信息,该液晶屏是一种点阵式LCD显示屏,一般用于字母和数字的显示,具有两行显示,每行能显示16个字符,共有16×2个字符显示功能,能显示较丰富的信息,价格比较便宜,性价比高,因此被广泛应用于单片机电路中。

LCD1602液晶屏的工作电压为4.5V~5.5V。LCD1602模块一共有16个引脚接口,其中,数据/命令选择端RS,读/写选择端R/W和使能端E三个主要控制端口,分别连接到了单片机P2口的P2.5、P2.6和P2.7。8位数据总线连接到了单片机的P0口,值得注意的是,当单片机的P0口作为I/O口使用时,必须串联一个上拉电阻,以提高单片机P0口的驱动能力。第3引脚VO是LCD1602的对比度调整端,调整该引脚上的电压可以调节LCD1602的对比度,当接到VCC时对比度最弱,接到GND时对比度最高,而对比度太高就会产生“鬼影”[13],因此需要将电压调整到一个合适的值。串联了一个10K的可调电位器进行对比度的调节,使显示清晰。液晶显示电路如图3-9所示。

4  系统软件设计

4.1 程序语言及软件开发环境

此次课题制作要使用软件编程,因此需要对程序语言和开发环境进行选择。程序语言方面选择的是C语言,该语言是一门通用的程序设计语言,是面向过程的语言,兼具了汇编语言和高级语言的特点,更加地接近系统底层,对于单片机来说,该语言优势较大,层次鲜明,可以按照模块化的方式编写程序代码,模块化编程可使程序调试变得便捷。在数据处理方面也十分强大,可使用多种数据类型和丰富的运算符,可以轻松构建多种不同的数据结构,通过指针可以直接寻址和操作硬件,因此C语言非常适合用来开发单片机控制程序。

在开发环境方面,选用的是Keil-C51,是一个高度集成的开发软件,集成了代码编辑器和C语言解释器,无需做很多的环境配置工作,便可以直接使用,进行C语言编程。该软件的使用也并不繁琐,只需要几个简单的操作便可以生成hex文件为硬件服务。同时自带的仿真器功能强大,可用于调试程序代码。

4.2 系统总体程序流程


总程序设计主要分为main主函数,AD9833信号发生函数,LCD1602显示函数这三个函数模块。系统程序流程图如图4-1所示。

整个系统流程为:电源打开后,单片机将进行系统初始化,同时初始化AD9833芯片与LCD1602显示屏,此时DDS模块将会产生默认设定的频率和幅度的波形信号。然后程序进行按键扫描,检测是否按下了按键,如果按下某个按键,单片机会进行处理,控制LCD1602显示出按键操作,并发送数据和命令给DDS模块,控制AD9833芯片产生按键设定的频率和幅度的波形信号。

5  系统调试与测试

绘制好PCB,完成制板,焊接好电路后,进行调试。

整体系统采用5V直流电源,用移动电源电路板供5V直流电,按下开关,观察到电源指示灯亮起,说明电源模块没有问题。将万用表的两表笔搭在单片机的20脚GND和40脚VCC进行测量,测得电压为4.5V;测量LCD1602的1脚GND和2脚VCC,测得电压为4.55V;测量AD9833模块的VCC和GND,测得电压为4.6V,至此,说明电路板各模块的供电均没有问题,可以进行进一步的测试。

程序的编写使用Keil-C51软件完成,编译通过后,用下载器将单片机跟电脑连接,通过STC-ISP烧录软件将程序烧录到单片机中。进行按键功能测试和显示屏测试,一开始,发现没有字符显示,按下各按键也不能显示出字符。对原理图进行检查后,没有发现电路问题。便怀疑是程序问题,检查程序后,原来是显示程序的三个控制端口的定义反了,调整过来后,重新编译并生成新的hex文件,再下载后继续测试按键和显示屏,成功地显示出了参数信息,按下不同按键,在显示屏上也正确地反馈显示了。至此,说明按键功能和显示程序没有问题。

继续进行下一步的示波器实测输出信号,主要是测量信号的频率和峰峰值。

测试仪器:GDS-1102B数字示波器(100MHz,1GS/s)、TFG6920A函数信号发生器(20MHz)。

电路板上除了最后的运放放大信号输出外,设计还预留了DDS芯片的原始信号输出,以便DDS芯片的测试。原始信号的幅度是不可调节的,正弦波和三角波的理论峰峰值为600mV,方波的理论峰峰值为5V。

DDS模块输出的原始信号,是AD9833芯片直接输出的没有经过后级运算放大器放大的信号。原始信号经示波器实测,结果为:正弦波、三角波的峰峰值约为600mV,方波的峰峰值约为5V,如图5-1、图5-2、图5-3所示。

用示波器实际测量了输出正弦波放大信号的频率和正弦波频率为1KHz时的幅度,下表整理了测量结果,同时也计算出了实测值与理论值的差值,给出了不同频率和不同幅值的误差,实测分析结果如表5-1所示。

表5-1 频率/幅值实测分析
理论频率(Hz) 实测频率(Hz) 频率误差(Hz) 理论幅度(V) 实测幅度(V) 幅度误差(V)
10 9.960 0.04 0.1 0.088 0.012
100 99.95 0.05 0.5 0.468 0.032
1000 1000 0 1 0.944 0.056
10000 1002000 20.00 1.5 1.42 0.08
100000 100000 0 2 1.88 0.12
1000000 1000000 0 2.5 2.36 0.14
2000000 2004000 4000 3 2.86 0.14
3000000 3026000 26000 3.5 3.34 0.16
4000000 4019000 19000 4 3.8 0.2
5000000 5034000 34000 4.4 4.12 0.28

测试结果分析:

波形信号输出不同的频率时,幅值误差并不是一定的。随着输出的频率升高,幅度误差也在变大。总体来说,方波信号的幅度误差最小,正弦波信号的幅度误差比方波稍大,三角波信号的幅度误差最大。这与AD9833芯片的结构有关,DDS芯片输出高频信号时会导致信号幅度衰减,并且输出信号频率越高,幅度衰减程度会越大。

从示波器实测信号波形来看:输出正弦波信号可以达到很高的频率,并且信号质量很好,不失真。输出三角波信号频率较高,在频率为1MHz时,信号质量很好,不失真,在频率为2MHz时,信号已经失真,波形类似于正弦波了。输出方波信号频率相较于其他两种信号低些,方波信号在1MHz频率以下,信号质量较好,不失真,频率达到1MHz时,方波的上升沿和下降沿开始产生弧度,不是方方正正的波形了。测试TFG6920A函数信号发生器输出的信号,发现它生成方波信号的频率达1MHz时也会失真,在上升沿和下降沿产生弧度。多方面查找资料分析后,这种现象是DDS信号源的普遍现象,受到DDS内部的数模转换器和波形存储器的速度限制。在达到一定频率时,都难以给生成正常的波形信号,都会产生一定程度的变形或失真。

部分程序:

#include "reg51.H"

#include "ad9833.h"

#include "LCD1602.h"

#define  MAX_VOLT 44

sbit key1 = P3^2;

sbit key2 = P3^3;

sbit key3 = P3^4;

sbit key4 = P3^5;

sbit key5 = P3^6;

void DelayMs( unsigned int ms)

{

unsigned int i,j;

for (i = 0; i < ms; i++)

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

}

void main()

{

unsigned long FreqData=100000;

unsigned int volt=MAX_VOLT;

unsigned int ratio;

float      ratioF;

unsigned int AmpData=255;

unsigned char WaveModle=0;

unsigned char SetModle=0;

unsigned long Fstep=100000;

ratio=2550/MAX_VOLT;  //5.7= 255/44; ratio放大10倍了取整数

ratioF=6.12;//2550*(0.6/5)=306;306/50=6.12;方波增减0.1V幅度对应的数字电位器调节量。

//9833输出方波5V,正弦波是0.6V,要把方波调回到0.6V时需要数字电位器调节量是30.6。

RW_LCD=0;

E_LCD=0;

InitLCD();

DelayMs(100);

DispStrAt("S", 0, 0);DispDecSpaceAt(Fstep, 1, 0, 7);

DispStrAt("sinWave", 9, 0);

AD9833_WaveSeting(FreqData,0,SIN_WAVE,0 );

AD9833_AmpSet(AmpData);

DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("HZ", 7, 1);

DispStrAt("am   V", 10, 1);

DispDecShiftAt(volt, 12, 1, 1);

while(1)

{

DelayMs(50);

if(key1==0)  //频率+ 幅度+

{

if(SetModle==1)

{

FreqData=FreqData+Fstep;

AD9833_WaveSeting(FreqData,0,WaveModle,0 );

DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("HZ", 7, 1);

}

else  if(SetModle==0)

{

if(WaveModle==1)  //方波幅度模式

{

if(volt<50)

volt=volt+1;

else

volt=0;

AmpData=volt*ratioF/10;

AD9833_AmpSet(AmpData);

}

else  //正弦,三角波幅度模式

{

if(volt<MAX_VOLT)

volt=volt+1;

else

volt=0;

AmpData=volt*ratio/10;

AD9833_AmpSet(AmpData);

}

DispDecShiftAt(volt, 12, 1, 1);

}

while(key1==0);

}

else if(key2==0)  //频率-  幅度-

{

if(SetModle==1)

{

if(FreqData>Fstep)

FreqData=FreqData-Fstep;

AD9833_WaveSeting(FreqData,0,WaveModle,0 );

DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("HZ", 7, 1);

}

else if(SetModle==0)

{

if(volt>0)

volt=volt-1;

else

{

if(WaveModle==1)volt=50;

else  volt=MAX_VOLT;

}

if(WaveModle==1)        //方波幅度模式

{

AmpData=volt*ratioF/10;

AD9833_AmpSet(AmpData);

}

else  //正弦,三角波幅度模式

{

AmpData=volt*ratio/10;

AD9833_AmpSet(AmpData);

}

DispDecShiftAt(volt, 12, 1, 1);

}

while(key2==0);

}

需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传点击用微信打开即可,过程有点繁琐请见谅。

 

 

  • 有需要资料的可了解一下.docx

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ECS-320-8-47-JTN-TR 1 ECS International Inc CRYSTAL 32.0000MHZ 8PF SMD

ECAD模型

下载ECAD模型
$7.38 查看
ECS-120-20-30B-TR 1 ECS International Inc Parallel - Fundamental Quartz Crystal, 12MHz Nom, ROHS COMPLIANT, MINIATURE, SMD, 4 PIN

ECAD模型

下载ECAD模型
$1 查看
XUL518100.000000X 1 Integrated Device Technology Inc LVDS Output Clock Oscillator
暂无数据 查看

相关推荐

电子产业图谱