基于单片机的多功能信号发生器的设计Word下载.docx
《基于单片机的多功能信号发生器的设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的多功能信号发生器的设计Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
![基于单片机的多功能信号发生器的设计Word下载.docx](https://file1.bdocx.com/fileroot1/2023-2/3/7a5938f4-faa4-43fe-9f66-566a11f02bf3/7a5938f4-faa4-43fe-9f66-566a11f02bf31.gif)
(2)本系统需要设计键盘电路,用以调节信号发生器输出波形的幅度值和频率值;
(3)本系统需要设计的信号发生器可以输出三种不同的波形,波形类型分别为矩形波、正弦波和三角波;
(4)本系统需设计的信号发生器可以实现输出频率在1Hz和100MHz之间。
1.2系统方案设计
目前,波形发生器设计方案主要有以下几种:
1.方案一
用分立元件组成的函数发生器。
分立器件是相对于集成芯片而言的。
随着科学技术的不断发展,人们渐渐步入电子时代,分立器件也被也被广泛应用到消费电子、计算机及外设、网络通信,汽车电子、LED显示平等领域。
它包括:
半导体二极管、半导体三极管、电容、电阻、逻辑器件、传感器、敏感器件以及装好的压电晶体类似半导体器件等。
用分立器件组成的函数信号发生器通常机构简单、成本较低。
但是由于元器件的分散性及环境条件的改变等因素,致使波形频率产生偏差,它通常是单函数发生器且平率不高,其工作不很稳定,不易调试。
2.方案二
制作函数信号发生器可用运放IC、晶体管等通用元器件。
晶体管、运放IC等通用器件均可以制作函数信号发生器,用专业的发生器产生信号则是普遍选择。
函数信号发生器IC在早些时候,如M8045、CA102、XR5547等,不仅精度不够高,功能也比较少,频率上限只有200kHz,若想产生更高的频率信号是难以实现的,再加上不够灵活的调节方式,频率,占空比无法单独调节。
由于用通用器件制作的信号发生器同样具有频率不高的缺点,因此,在本论文设计中,此种方案也不宜采用。
3.方案三
利用专用直接数字合成DDS芯片制作的函数信号发生器。
DDS有如下优点:
(1)速度快,可达到μs数量级;
(2)频率分辨率较高,输出频点多,可达多个频点切换;
(3)能够输出正交信号;
(4)频率切换时能实现相位连续;
(5)可以产生任意的波形;
(6)输出噪声低,对参数频率源的噪声有改善作用;
(7)全数字化实现便于集成,体积小,重量轻。
DDS芯片的时钟频率从几十兆赫兹到几百赫兹不等,芯片从一般功能到集成有D/A转换器和正交调制器。
DDS有上述诸多优点,而且利用直接数字合成DDS芯片实现的函数信号发生器能够产生任意波形并达到很高的频率,克服了方案一、方案二的多数缺点,故本设计采用方案三。
1.3系统模块设计思路
根据毕业设计要求,以及方案的比较结果,拟采用DDS芯片实现设计内容。
本设计采用模块化思想,即将不同功能器件分别做成不同模块。
根据功能要求,共分为五大模块:
输入模块、显示模块、造波模块、调幅模块和控制模块。
其中输入模块为键盘,输出模块为LCD1602液晶显示器。
主控模块的选择
方案一:
用单片STC89C52作为系统的主控核心。
单片机具有体积小,使用灵活的,易于人机对话和良好的数据处理,有较强的指令寻址和运算功能等优点。
且单片机功耗低,价格低廉的优点。
方案二:
C8051F005单片机是完全集成的混合信号系统级芯片,具有与8051兼容的微控制器内核,与MCS-51指令集完全兼容。
片内集成了控制系统和数据采集中常用的模拟部件和其他数字外设及功能部件,还具有标准8052的数字外设部件,而且执行速度快,但其价格较贵。
在此系统中,采用STC89C52单片机作为控制比采用C8051F005单片机、FPGA实现更简便。
基于综合性价比,确定选择方案一。
显示模块的选择
采用LED数码管。
LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。
由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。
使用数码管显示编程较易,但要显示内容多,而且数码管不能显示字母。
采用LCD液晶显示器1602。
其功率小,效果明显,显示编程容易控制,可以显示字母。
优点是显示信息非常丰富,可以很形象的显示信号发生器的各个参数。
占用的I/O资源比较少,不需要循环扫描,节省了大量的程序开销。
以上两种方案综合考虑,本设计选择方案二。
功率放大模块的选择
采用多级放大电路。
由两个晶体管构成共射——共集放大电路如图1.3所示,第一级起到电压放大作用,达到正弦信号峰-峰值输出,第二级为跟随器,主要为了能够带50欧的负载,使其负载上的正弦信号的输出电压的峰-峰值达到题目的要求。
此电路只是在调试选定具体参数中比较麻烦,但工作比较稳定,比较易于实现。
图1.3共射-共基放大电路的交流通路
采用可变增益放大器。
增益放大器直接与AD9833相接,用来实现电压的放大并且控制波形的失真,精确度高,且较稳定,实现简单。
系统可以采用AD603,这种芯片具有程控增益调整功能。
是一个90MHz带宽增益可调、低噪的集成运放,如用分贝表示增益,则控制电压与增益成线性关系,压摆率为275V/μs。
可编程的增益范围由管脚间的连接方式决定,增益在-11~+30dB时的带宽为90Mhz,增益在+9~+41dB时具有9MHz带宽,改变管脚间的连接电阻,可使增益处在所需范围内。
综上所述,本设计采用方案二。
1.4开发工具和开发环境
本文件系统采用单片机C语言实现,编译器为KeiluVision2。
C语言具有可读性好的优势,更容易使大家相互借鉴,提高自己的程序设计水平。
C语言具有模块化程序结构的特点,使程序模块化,不断丰富。
采用C语言,可针对常用的功能模块、算法等编制相应的函数可针对单片机,常用的接口芯片编制通用的驱动函数。
这些函数经过整理可形成库函数,供广大的单片机爱好者使用和完善。
目前,8051系列单片机上的C语言的代码长度,在未加入优化的条件下做到了最优汇编程序水平的1.2—1.5倍,达到了中等程序员的水平。
在仿真器水平提高的前提下,优化水平还会继续提高。
在软件质量和开发速度及结构严谨性等方面,C语言的优势绝非汇编语言所能比拟。
KEIL公司的C51编译器DOS版本曾通过美国Franklin公司在市场上畅销多年,最早传入我国并得到广泛使用的是FranklinC51V3.2版本。
随着时间的推移,KEIL公司的产品不断升级,V5.0以上版本C51编译器就配有基于Windows的uVision集成开发环境和dScope软件模拟调试程序。
现KEIL公司的编译器有支持经典8051和8051派生产品的版本,统称为Cx51。
新版本uVision2把uVision1用的模拟调试器dScope与集成开发环境无缝结合起来,界面更友好,使用更方便,支持的单片机品种更多。
因此,KeiluVision2是单片机程序开发的理想环境。
1.5系统设计总框图
本系统的设计总框图如图1.4所示。
图1.4系统总体框图
本系统主要包括以下几个模块:
主控制器及其接口电路模块,键盘及液晶显示模块,波形产生模块,幅值调节模块。
其中,主控制器负责接收并处理来自键盘的命令输入,驱动液晶显示当前波形的频率值或幅值,向波形产生模块发送当前波形的频率值数据,向幅值调节模块发送当前波形的幅值数据,以此实现对整个系统的统一协调管理。
2系统硬件电路设计
根据系统框图可知,本系统的硬件电路设计应包括单片机最小系统设计、信号发生模块设计、显示电路设计、D/A转换电路与功率放大模块设计和按键提示电路设计等。
2.1单片机最小系统设计
单片机最小系统是指在保证控制器正常工作的前提下,所需的最小计硬件电路,它主要包括:
晶振电路、复位电路、供电电路。
晶振电路在单片机系统中的作用非常大,它为单片机电路内部工作提供时钟频率。
时钟频率越高,系统工作越快,它是单片机内部一切指令的时钟基础。
在正常条件下,普通的晶振频率绝对精度可达百万分之五十,可靠性很高,通常外部晶振电路与系统内部锁相环电路配合使用,用来提供系统所需的时钟频率。
对于级联系统,如果不同子系统需要不同频率的时钟基准信号,可以用与同一个晶振相连的不同锁相环来提供。
复位电路主要功能是让系统恢复到初始状态,如果程序跑飞,系统无法运行,可以使用复位电路让其再次启动,恢复系统功能。
供电电路主要是为系统提供能量,保证系统能正常工作。
STC89C52RC单片机
本文选择的单片机型号为STC89C52系列,MCS-51单片机由美国INTEL公司推出,它比之前推出的MCS-48单片机功能更强,结构更先进,指令和电路单元都在原有的基础上增加了。
MCS-51系列单片机主要包括8031、8051和8751等通用产品。
STC89C52单片机与经典的MCS-51单片机具有相同的内核结构,在应用上可以当作传统的MCS-51单片机使用。
该系列单片机主要特性:
(1)与C51单片机指令系统相兼容
(2)8k的FLASH可反复擦写使用;
(3)256x8bit内部Ram;
(4)三十二个双向输入输出接口;
(5)3个16位可编程定时计数器;
(6)系统时钟范围0-24MHz;
(7)2个UART串行通道;
(8)8个中断源含两个外部中断;
(9)2个读写线;
(10)具有低功耗空闲模式和掉电模式,通过软件设置睡眠和唤醒功能;
(11)有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。
单片机最小系统
单片机最小系统如图2.1所示。
(1)单片机晶振电路:
单片机外围的晶振电路是通过单片机的第18(X2)、19(X1)引脚接入。
X1脚为振荡器反相放大器和内部时钟发生电路的输入端,X2脚为振荡器反相放大器的输出端。
对于MSC-51一般的晶振频率可以在1.2MHz—12MHz之间选择,这时电容C可以对应的选择10pF—30pF。
当使用89C52时晶振频率可以提高到24MHZ。
对于本设计的电容C用30pF,晶振选用12MHz。
晶振电路原理图如图2.1所示,一条引脚接在X1,另一条接在X2。
(2)KG:
复位信号。
当无源晶振工作时,RST脚将持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
为了防止程序执行过程中失步或运行紊乱,本系统采用了上电复位及手动复位电路。
图2.1单片机最小系统
(3)
/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,
必须接GND。
若只是用内部程序存储空间,该引脚悬空即可。
2.2信号发生模块电路设计
AD9833是一款低功耗器件,采用MSOP封装,非常小巧,外围电路简单,仅需要1个外部参考时钟、一个低精度电阻器和一个解耦电容器,通过SPI接口和单片机相连,可编程波形发生器;
能够产生正弦波、三角波、方波输出。
AD9833的引脚图如图2.2所示。
图2.2AD9833的引脚图
各引脚功能如表2.1所示。
表2.1AD9833的引脚功能
引脚号
符号
功能说明
1
COMP
为DAC偏移解耦的DAC偏移引脚
2
VDD
电源电压
3
CAP/2.5V
数字电路的电源端
4
DGND
数字地
5
MCLK
主频数字时钟的输入端
6
SDATA
串行数字输入
7
SCLK
串行时钟输入
8
FSYNC
控制输入,低电平有效
9
AGND
模拟地
10
VOUT
输入频率(
)
AD9833可运作的主时钟频率高达25MHz。
一般25Hz的振荡器包含在外部电路中,但是这振荡器也可以删除,如有需要可以连接到外部CMOS时钟上。
图2.5为AD9833的外围电路。
图2.5AD9833的外围电路
2.3系统显示电路设计
本系统设计的显示电路用以显示信号发生器输出的波形类型,以及输出波形的频率和幅值。
LCD1602液晶显示屏
液晶显示器(LCD)的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面,各种液晶显示器简称液晶。
不能显示汉字的液晶命名规则是以点阵的列数和行数来命名的。
如本设计使用的LCD1602的意思是每行显示16个字符,共有2行。
可以显示汉字的液晶称为图形液晶,图形液晶是以点阵的数目命名的,每个点都可以单独控制。
例如12232代表该液晶有122行,32列的点阵。
LCD1602内置含128个字符的ASCII字符集字库,显示控制用ASCII码即可。
接口信号说明
1602液晶接口的信号说明如表2.2所示。
表2.21602液晶接口的信号说明
编号
引脚说明
VSS
电源地
D2
数据口
电源正极
D3
VO
液晶显示的对比度调节
11
D4
RS
数据/命令选择(H/L)
12
D5
R/W
读/写选择(H/L)
13
D6
E
使能信号
14
D7
D0
15
BLA
背光电源的正极
D1
16
BLK
背光电源的负极
系统显示电路
本系统设计的显示电路如图2.7所示,1602液晶显示器的三个控制端口分别通过P2.5、P2.6、P2.7三个I/O口控制,8位数据端口与单片机的P0口相连。
1602液晶显示器背光亮度通过如图所示的滑动变阻器RP1调节控制。
图2.7系统显示电路原理图
2.4D/A转换电路与功率放大模块设计
本设计采用串行10位数/模转换器TLC5615采集信号电压,为下一级的功率放大器AD603提供控制电压。
TLC5615芯片
TLC5615为美国德州仪器公司1999年推出的产品,是具有串行接口的数模转换器,其输出为电压型,最大输出电压是基准电压值的两倍。
其带有上电复位功能,即把DAC寄存器复位至全零。
TLC5615性能价格比高,目前在国内市场很方便购买。
TLC5615的时序如图2.8所示。
图2.8TLC5615的时序图
由TLC5615的时序图,当片选CS为低电平时,输入数据DIN由时钟SCLK同步输入或输出,而且在前为最高有效位,在后为低有效位。
输入时串行输入数据DIN被SCLK的上升沿移入内部的16位移位寄存器,串行数据DOUT由SCLK的下降沿输出,数据被片选CS的上升沿传送至DAC寄存器。
当片选CS为高电平时,时钟同步不能把串行输入数据DIN送入移位寄存器;
输出数据DOUT不进入高阻状态通过保持最近的数值不变。
因此必须满足两个条件方可串行输出数据和输入数据:
第一时钟SCLK的有效跳变;
第二片选CS为低电平。
当片选CS为高电平时,输入时钟SCLK应当为低电平。
系统的D/A转换电路原理图如图2.9所示。
图2.9TLC5615硬件连接图
单片机通过P36口控制串行数模转换器TLC5615的3脚片选端,1脚串行数据输入端与2脚串行时钟输入端分别通过单片机的P34和P35端口控制。
串行数模转芯片7脚输出端接下一级的功率放大的控制端。
AD603芯片
AD603这种芯片正具有程控增益调整功能。
由美国ADI公司生产,是一个90MHz带宽增益可调、低噪的集成运放。
AD603内部结构图如图2.10所示。
由图可知芯片内部包括增益控制部分,精密无源输入衰减器,固定增益放大器,梯形电阻网络几大部分组成。
AD603由一个可通过外部反馈电路设置固定增益GF(31.07~51.07)的放大器、40dB/V的线性增益控制电路和0~-42.14dB的宽带压控精密无源衰减器构成。
图2.10AD603内部结构图
本系统利用AD603设计的功放电路硬件原理图如图2.10所示。
AD603芯片的一脚GPOS电压控制信号来自串行数模转换器TLC5616的输出端,2脚GNEG控制电压信号通过一个分压电路使其为固定值+2V,3脚VINP信号输入端与AD9833芯片的输出端相接。
图2.10增益调节模块
2.5声光提示电路设计
当有调频、调幅、复位或者光标移动按键按下时,为了达到提示使用者的目的,在电路硬件设计时,加入了按键声光提示电路。
按键声光提示硬件连接图如图2.12所示。
图2.12按键声光提示硬件连接图
在此硬件电路设计中,选用PNP三极管8550作为开关,单片机通过P37端口控制三极管基极,当有调频、调幅、复位或者光标移动按键其中的一个按下时,P37口置为低电平,使得蜂鸣器和LED灯电路出去导通状态。
2.6按键电路设计
按键电路如图2.13所示。
图2.13按键电路图
由图可知,按键S1与单片机的P10口相连,按键S2与单片机的P11口相连,按键S3与单片机的P12口相连,按键S4与单片机的P13口相连,按键S5与单片机的P14口相连,按键S6与单片机的P15口相连。
具体功能如表2.5所示。
表2.5按键功能表
按键
功能
S1
控制光标左移
S2
控制光标右移
S3
频率加
S4
频率减
S5
幅值加
S6
幅值减
3系统软件设计
3.1系统软件流程图
主控制器软件设计
主控制器负责接收并处理来自键盘的命令输入,驱动LCD液晶显示当前波形的频率值或幅值,向波形产生模块发送当前波形的频率值数据,向幅值调节模块发送当前波形的幅值数据。
主控制器对键盘的操作是通过不断地扫描来完成的,当有按键按下,并根据键值调用相应的功能函数。
主控制器其他功能的实现,也是分别调用相应的功能函数。
具体细节在后面每个模块的软件设计分析中详细介绍。
主程序设计
主控制器的主程序设计完成以下功能:
监视键盘,驱动LCD液晶的显示,发送频率值数据到波形发生模块,发送幅值数据到幅值修改模块。
本系统的主流程图如图3.1所示。
在图3.1中,初始化模块完成对中断控制寄存器的设置,LCD1602液晶显器的初始化设置和AD9833模块初始化设置。
系统使用了主控制器的定时器T0中断来控制光标的隐藏与显示。
图3.1主控制器主程序流程图
LCD液晶显示驱动程序设计
显示模块采用1602液晶显示器,1602液晶显示器控制器内部带有80个字节的缓冲区,控制器设有数据地址指针,为实现显示的内容,我们可以通过数据地址指针来访问全部80个字节的RAM,我们把缓冲分成三个部分,分别用于显示波形类型,显示幅值和当前正在被显示波形的频率。
其程序流程图如图3.2所示。
N
Y
图3.2液晶显示模块主程序流程图
3.2波形产生模块的软件设计
本模块设计实现的功能为:
接收来自主控制器的频率值数据,模拟DDS原理输出波形。
按照系统整体设计要求,本模块软件部分设计实现如下功能:
(1)接收来自主控制器的频率值数据;
(2)响应来自辅助键盘的波形选择输入;
(3)查表输出波形。
波形产生模块主程序设计
波形产生模块的主程序完成的操作包括对本模块的单片机进行初始化,接收来自主控制器的频率值数据,并利用接收到的频率值数据完成对波形频率的修改。
该主程序的流程图如图3.3所示。
在图3.3中,初始化模块完成对中断控制寄存器的设置。
系统使用了主控制器的INT0中断来响应操作者的按键输入;
使用了定时器T0控制相邻两次查表操作之间的时间间隔。
图3.3波形产生模块主程序流程图
因此在初始化模块中,需要完成如下功能:
(1)开CPU中断;
(2)开INT0中断;
(3)设置触发方式为负边沿触发;
(4)开定时器T0中断;
本系统使用定时器T0控制相邻两次查表操作之间的时间间隔,因此,定时器的定时初值与输出波形的频率是一一对应的。
能否精确地调节输出波形的频率,关键就在于能否精确地设定定时器的定时初值。
本系统设置定时器工作于方式1下。
在本方式下,该计数器由高8位TH0和低8位TL0组成。
定时器是按16位加1计数器工作的,计满为0时自动向CPU发出溢出中断请求,若要求它再次计数,则CPU必须在其中断服务程序中为它重装初值。
假设定时时间为tms,本系统设计输出波形的采样点数为32个,那么,输出波形的频率就可以表示为:
f=1000/(32*t)。
因此,要通过频率值得到定时器的定时初值,需要经过若干乘、除运算。
对于单片机来说,它内部的资源有限,在其内部做乘