交流信号发生器设计.docx
《交流信号发生器设计.docx》由会员分享,可在线阅读,更多相关《交流信号发生器设计.docx(27页珍藏版)》请在冰豆网上搜索。
交流信号发生器设计
摘要
信号发生器是一种常用的信号源,广泛应用于科学研究、生产实践和教学实验等领域。
特别是通信系统的科研实验中,常常需要用到多种不同频率和相位的信号,如正弦波、三角波、方波和锯齿波等,因此多功能信号发生器应用十分广泛。
在数字化时代的今天,经典的有模拟电路组成的信号发生器已经渐渐远离了人,取而代之的事电路简洁、功能多样、功耗低的数字电路。
在以后的时间里,将会有越来越多的数字化的信号发生器运用在各种科学技术领域和工程实践中,给人们的日常生活带来更多的便利。
本文设计低频信号发生器,以AT89C51单片机为核心,通过键盘输入控制信号类型和频率的的选择,采用DA转换芯片输出相应的波形。
我们采用C语言进行编程,可实现正弦波的产生,且波形的频率和幅值可调。
经测试该设计方案线路优化,结构紧凑,性能优越,满足设计要求。
关键字:
单片机,DA转换,信号发生器
交流信号发生器的设计
1设计任务及分析
1.1设计任务
本次设计是一个超低频交流信号发生器,初始条件为计算机、Max+plusⅡ、EDA实验箱,控制产生1-99Hz(精度0.1Hz)的正弦交流信号,通过DAC0832转换后输出。
系统设计要有按键部分,能够通过键盘控制输出模拟幅度和模拟频率。
1.2要求分析
正弦信号发生器是信号中最常见的一种,它能输出一个幅度可调、频率可调的正弦信号在这些信号发生器中,又以低频正弦信号发生器最为常用,在科学研究及生产实践中均有着广泛应用。
,而如今对频率稳定度、频谱纯度、频率范围和输出信号的频率微调分辨率有着很高的要求,传统的正弦信号源根据实际需要一般价格昂贵,低频输出时性能不好且不便于自动调节,工程实用性较差。
交流信号发生器主要由信号发生器和产生调幅、调频、键控信号两部分组成。
正弦波信号发生器可采用多种方法实现,比如采用直接数字频率合成DDS技术,通过单片机进行控制,输出得到正弦信号,也可以通过单片机编程的方法实现,经D/A输出可得到正弦信号。
具有频率稳定度高,频率范围宽,容易实现频率步进0.1Hz。
全数字化结构便于集成,输出相位连续,频率、相位和幅度均可实现程控。
2方案比较及认证
方案一:
直接数字合成法,简称DDS。
DDS是DirectDigitalFrequencySynthesis的简称,通常将此视为第三代频率合成技术,它突破了前几种频率合成法的原理,从”相位”的概念出发进行频率合成。
这种方法不仅可以产生不同频率的正弦波,而且可以控制波形的初始相位,还可以用DDS方法产生任意波形(AWG)。
但是直接数字频率合成式(DDS)信号发生器,其电路实现起来不是很容易,需用的集成芯片较复杂,且需要其他外围器件,因而其成本较高.它所使用硬件描述语言实现脉宽输出简化编程复杂度,其输出显示需要LED数码管与单片机合作使用,实现起来甚是困难。
下面是整个系统的流程图:
图2-1直接数字合成法系统结构图
方案二:
采用锁相环频率合成技术,将压控振荡器的VCO的输出频率锁定在所需的频率之上,次方法具有很好的窄带跟踪性,可以较好的选择所需的频率,抑制杂散的分量,其基本模型如图1所示。
然而锁相环本身是一个惰性的环节,锁定时间长,频率串换时间长,并且模拟产生的正弦波,频率和相位都难以控制。
下图是所想环频率合成技术的系统结构图:
图2-2锁相环节频率合成系统结构图
方案三:
通过函数产生芯片产生所需信号。
采用MAX038函数产生芯片,通过设置管脚参数的输入,可设计组成产生幅频精度高而且易于调整的波形信号,得到的波形失真较小,而且能够得到较宽的频率范围很大,可应用于对电路参数要求苛刻的工作场所。
方案四:
采用单片机编程的方法来实现。
即采用AT89C51单片机和DAC0832芯片以一定的模拟数字电路,通过编程可以产生正弦交流信号。
不但设计简单,而且可以很简便的通过编程的方法来控制信号波形的频率和幅度,在硬件电路不变的情况下,通过改变程序来实现频率的变换。
此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。
调节幅度和频率,扩展性强。
方案一所产生的信号信号频率准确,频率分辨率高,易于控制,但是用到的元件较多,而且线路连接较为复杂,对单片机的编程要求也过高,方案二和方案三应用的是对电路参数要求较高的场合,电路连接复杂,转换时间长,而且频率精度达不到要求,方案四通过软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证。
综合以上考虑,本设计采用方案四较合适。
3硬件简介
3.1单片机AT89C51
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51的主要特性:
⑴8031CPU与MCS-51兼容
⑵4K字节可编程FLASH存储器(寿命:
1000写/擦循环)
⑶全静态工作:
0Hz-24KHz
⑷三级程序存储器保密锁定
⑸128*8位内部RAM
⑹32条可编程I/O线
⑺两个16位定时器/计数器
⑻5个中断源
⑼可编程串行通道
⑽低功耗的闲置和掉电模式
⑾片内振荡器和时钟电路
MCS-51系列单片机芯片均为40个引脚,HMOS工艺制造的芯片采用双列直插(DIP)方式封装,其引脚示意及功能分类如图3-1所示:
图3-1AT89C51引脚图
MCS-51系列单片机的40个引脚中有2个专用于主电源的引脚,2个外接晶体的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。
VCC:
供电电压。
GND:
接地。
①P0口(P0.0~P0.7)为双向8位三态I/O口,当作为I/O口使用时,可直接连接外部I/O设备。
它是地址总线低8位及数据总线分时复用口,可驱动8个TTL负载。
一般作为扩展时地址/数据总线口使用。
②P1口(P1.0~P1.7)为8位准双向I/O口,它的每一位都可以分别定义为输入线或输出线(作为输入时,口锁存器必须置1),可驱动4个TTL负载。
③P2口(P2.0~P2.7)为8位准双向I/O口,当作为I/O口使用时,可直接连接外部I/O设备。
它是与地址总线高8位复用,可驱动4个TTL负载。
一般作为扩展时地址总线的高8位使用。
④P3口(P3.0~P3.7)为8位准双向I/O口,是双功能复用口,可驱动4个TTL负载。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
P3口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
综上所述,MCS-51系列单片机的引脚作用可归纳为以下两点:
⑴单片机功能多,引脚数少,因而许多引脚都具有第2功能;
⑵单片机对外呈3总线形式,由P2、P0口组成16位地址总线;由P0口分时复用作为数据总线;由ALE、PSEN/、EA/与P3口中的INT0/、INT1/、T0、T1、WR/、RD/共10个引脚组成控制总线。
3.2DAC0832简介
DAC0832的分辨率为8位,输出为电流信号,电流的建立时间为1us,可单缓冲、双缓冲或直接数字输入,只需在满量程下调整其线性度,通过单一电源供电(+5V~+15V),低功耗,20mW,参考电压可以达到±10V,直接的数字接口可以与任何一款单片机相连。
其引脚图如下图3-2所示:
图3-2DAC0832引脚图
D0~D7:
8位数据输入线,TTL电平,通常与单片机的数据总线相连,用于输入CUP送来的待转换数字量。
有效时间应大于90ns(否则锁存器的数据会出错);
ILE:
数据锁存允许控制信号输入线,高电平有效;
————CS:
片选信号输入线(选通数据锁存器),低电平有效;
——————WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、————CS、——————WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
————————XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
——————WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由——————WR1、————————XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
—当DAC寄存器内容全为1时,IOUT1为最大,IOUT2=0;
—当DAC寄存器内容全为0时,IOUT1=0,IOUT2为最大;
为了保证输出电流的线性,应将IOUT1及IOUT2接到外部运算放大器的输入端上。
Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:
芯片工作电源,范围为+5V~+15V;
VREF:
基准电压输入线,VREF的范围为-10V~+10V;
AGND:
模拟信号地,为模拟信号和基准电源的参考地;
DGND:
数字信号地,为工作电源地和数字逻辑地;
4系统原理
4.1设计原理
该设计设计一个低频信号发生器,我们采用的是AT89C51单片机用软件实现信号的输出。
该单片机是一个微型计算机,包括中央处理器CPU,RAM,ROM、I/O接口电路、定时计数器、串行通讯等,是波形设计的核心。
该信号发生器原理框图如图2.1,总体原理为:
利用AT89C51单片机构造低频信号发生器,可产生正弦波,通过C语言对单片机的编程即可产生相应的波形信号,并可以通过键盘进行各种功能的转换和信号频率的控制,当输出的数字信号通过数模转换成模拟信号也就得到所需要的信号波形,通过运算放大器的放大输出波形,同时让显示器显示输出的波形信息。
系统的结构图如下图4-1所示:
图4-1系统原理结构图
本设计可以分为以下几个模块:
复位电路、振荡电路、键盘控制、D/A转化。
其各个模块的工作原理如下:
(1)复位电路
是为单片机复位使用,使单片机接口初始化;89C51等CMOS51系列单片机的复位引脚RET是施密特触发输入脚,内部有一个上拉低电阻,当振荡器起振以后,在RST引脚上输出2个机械周期以上的高电平,器件变进入复位状态开始,此时ALE、PSEN、P0、P1、P2、P4输出高电平,RST上输入返回低电平以后,变退出复位状态开始工作。
该方案采用的是人工开关复位,在系统运行时,按一下开关,就在RST断出现一段高电平,使器件复位。
电路图如图4-2所示,采用上电复位,由极性电容C3和电阻组成。
复位电路具有上电自动复位功能,高电平有效,在正常工作状态下复位管脚为低电平。
图4-2复位电路图
(2)振荡电路
单片机必须在时钟的驱动下才能工作。
在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度,常用于CPU定时和计数。
系统所采用的振荡电路如图4-3所示。
图4-3振荡电路图
系统选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:
一是帮助振荡器起振;二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。
其大小是时钟信号频率的倒数,常用fosc表示。
如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs。
(3)键盘模块
用于控制信号输入的类型,当按键按下时,可以通过单片机编程读取闭合的键号,实现相应的信号输出。
其步骤主要是a、判断是否有键按下;b、去抖动,延时20ms左右;c、识别被按下的键号;d、处理,实现功能。
键盘电路如图4-4所示,P2.0对应的按键有启动和停止作用,P2.1对应的按键是减少频率,P2.1对应的按键是加频率。
图4-4键盘电路
(4)D/A转换
把数字量变换成模拟量的线性电路。
单片机产生的数字信号通过DAC0832转化成模拟信号,输出相应的电流值,通过OP07集成运算放大器可以取出模拟量得电压值,最后利用示波器获得输出的模拟信号的波形。
D/A转换电路如下图4-5所示:
图4-5D/A转换图
4.2设计思想
(1)正弦波的产生
利用单片机产生正弦波信号波形,实现信号的频率和幅度可控,但是如何利用单片机控制DAC0832产生正弦波呢?
我们可以先把一个正弦波按横轴等间距分别为若干个点(如分为256个点)。
把每个点电压幅值所对应的8位二进制数值做成表,放在CPU的ROM中。
例如:
第一个点幅值是0V,对应的送给DAC0832的8位二进制数为0x80H,所以表的第一元素为0x80H,每两点之间的时间间隔为
T,用单片机的定时器产生,其表示式为:
T=T/256。
先取表中第一个元素送给0832,0832输出第一个电压0V,再取第二个数送给0832输出下一个电压,依次类推,取到表的最后一个元素时,从头开始取表的第一个元素。
循环往复,就输出了一个连续的正弦波形。
所求得的正弦波码如下所示:
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
根据题目要求只产生一个正弦波是不够的,我们还要求其频率和幅值可调。
可以看一下哪些因素会影响输出波形的频率和幅值。
(2)频率调节分析
该正弦波的频率
(
为所取的两个点之间的间隔),所以只要改变
就可以改变输出波形的频率。
我采用的方案是:
用一个定时器,每隔
产生一次中断,在中断服务程序里控制DAC0832输出。
如果想要改变
只要改变定时器的时间就行了。
也就改变了输出波形的频率。
本设计要求输出频率在1HZ-100HZ可调,所以定时器的定时时间需要达到
S,即定时器的定时时间要在
S之间可调,并且其分辨率满足要求。
经验证51单片机的定时器0工作在方式1时,其性能满足要求,故采用定时器的方案可行。
为了减小误差,尽量减少定时中断服务程序中的指令,以减少其占用的时间,给TH0,TL0幅值时,减去延时的时间,以抵消掉指令占用的时间。
(3)幅值的调节分析
从前面介绍的DAC0832的原理可知,只要改变DAC0832数字量输入就可以改变其输出模拟量的幅度。
由于产生波形的幅度是在存储于单片机内部ROM的表中,按顺序取出的。
正弦波的模拟信号是D/A转换器的模拟量输出,其计算公式为:
(4.1)
(N=1~256)(4.2)
那么对应着存放在计算机里的这一点的数据为:
(4.3)
因此我们可以通过改变计算机中存储的数据来改变了输出波形的幅度
4.3电路原理图
图4-6电路原理图
5软件设计流程图
图5-1软件设计流程图
首先对程序初始化,再判断若有按键按下,则计算相关参数,通过键盘扫描程序,判断哪个按键被按下,然后进行相关操作,输出的数字量通过DA转换器转换放大之后在示波器上输出
6仿真
6.1调试记录
(1)利用keil进行程序的调试和编译
KeilVision是一款可用于多种8051MCU集成开发环境,它集编辑、编译、连接、调试、仿真于一体,支持汇编语言PL/M语言和C语言的程序设计,具有较好的C++风格界面,易学易用。
本设计采用Keil软件进行编译,检测其程序正确与否,下面就是利用Keil进行编译的图6-1。
图6-1编译界面
对程序进行编译正确后,再生成hex文件,留在模拟仿真中进行使用。
hex文件生成的过程如下图6-2所示:
图6-2设置生成hex文件
当程序调试出现零错误,零警告时,程序的调试完成。
图6-3零错误、零警告
(2)proteus连接调试
仿真后生成hex文件后,再在模拟仿真软件中画图,画完后双击单片机AT89C51,然后将在Keil里面生成的hex文件按下图6-4所示加入到里面。
的波形,是正确的仿真图,符合本设计的要求。
图6-4添加hex文件
按下仿真按钮,进行模拟仿真,若仿真的结果与设计的要求不一致,再对程序和原理图进行修改,直到与如下图6-5所示,当按下开始按钮时,示波器显示出正弦波。
6.2调试结果
启动仿真时,示波器出现以下图形
图6-5出现正弦波
图6-6频率在减小
图6-7频率在增大
图6-8幅度增大
图6-9幅度减小
从以上所有的仿真结果可以看出,所设计的电路可以控制产生1-99Hz的正弦交流信号,其精度为0.1Hz,通过按键操作,可对输出信号的峰值与频率进行控制,基本满足的设计要求。
7心得体会
本次设计题目是正弦信号发生器。
用到的硬件有按键、数码管显示、译码电路、DAC0832、8051单片机。
通过这次设计,进一步熟悉了这些硬件的用法。
熟悉了WAVE编程软件的使用。
对汇编语言进行单片机程序设计有了更深一步的认识。
完成本次设计后,学到了一种新的编程思路:
大量的应用查表的方式进行程序设计,可以有效的增加程序执行的效率,缩短其执行时间,一些对程序执行时间有严格要求的场合,可以用此思路进行设计。
当然,查表方式进行程序设计亦有其缺点:
占用大量的内部ROM空间,对于一些内部ROM空间不是很充足的单片机,过多的表可能导致ROM空间不足。
因此,进行程序设计时要将查表方式和算法方式进行综合考虑,选择效率较高的方式进行设计,也可以将两种方式有效结合起来。
同时我还要真挚的向曾经给予我无限帮助和教导的全体教研室老师表示感谢。
他们治学严谨,学识渊博,视野雄阔,平易近人为广大学生营造了一种良好的精神氛围。
授人以鱼不如授人以渔,置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了宏伟的学术目标,领会了基本的思考方式,掌握了通用的研究学习方法,而且还明白了许多待人接物与为人处世的道理。
在即将毕业离校之际,我要感谢舍友在生活上给予我的关心和帮助以及学业上的切磋和指点。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。
参考文献
[1]姚燕南,薛钧义.微型计算机原理与接口技术.北京:
高等教育出版社.2004
[2]张志良