单片机函数信号发生器毕业设计.docx
《单片机函数信号发生器毕业设计.docx》由会员分享,可在线阅读,更多相关《单片机函数信号发生器毕业设计.docx(38页珍藏版)》请在冰豆网上搜索。
单片机函数信号发生器毕业设计
毕业设计(论文)
论文摘要
本文主要用AT89C51单片机与DAC0832构成的函数信号发生器,可产生方波、三角波、正弦波,具有线路简单、结构紧凑、性能优越等特点。
本函数信号发生器可以由程序控制改波形的周期,以及不同波形的切换。
用ADC0809实时对其波形电压测量。
输出波形的幅值可以在0—5V可以调节。
对于输出电压的控制,主要是用UA741放大器对其信号放大来实现的。
输出波形幅值的大小,由ua741接负反馈电阻来调节,从而达到了输出波形幅值在0-5V可调。
对于显示部分,本设计采用四位共阳数码管实时显示当前波形的频率,以及在按键的切换下可以显示测量的波形的电压幅值。
文章给出了源代码,并通过proteus软件仿真测试,然后画出PROTEL原理图和PCB板图。
对应着PCB板图焊接实物电路,并下载程序做硬件调试。
用示波器观察其波形。
最终其性能指标达到了设计要求。
关键词:
单片机;DAC0832;ADC0809;放大器;信号发生器。
Abstract
ThisarticlemainlybasedeontheAT89C51microcontrollerandtheDAC0832functionofsignalgeneratorproducesasquarewave,trianglewave,sinewave,withsimplelines,compactstructure,superiorperformancecharacteristics.Signalgeneratorofthefunctioncanbechangedbytheprogramcontrolperiodofthewaveform,andwaveformswitching.UsingADC0809real-timetoitswaveformvoltagemeasurement.Theamplitudeoftheoutputwaveformcanbeadjustedinthe0-5V.Forthecontrolofoutputvoltage,toachievetheUA741amplifieronsignalamplification.Thesizeoftheoutputwaveformamplitudeua741tothenegativefeedbackresistortoregulatesoastoachievetheoutputwaveformamplitudeinthe0-5Vadjustable.Displaysection,thedesignusesfourcommonanodedigitaltubereal-timedisplayofthefrequencyofthecurrentwaveformandthevoltageamplitudeofthemeasuredwaveformcanbedisplayedinthekeyswitch.Thearticlegivesthesourcecode,proteussoftwaresimulationtesting,andthendrawthethePROTELschematicandPCBplans.CorrespondstothePCBplanstoweldthephysicalcircuit,anddownloadtheprogramtodohardwaredebugging.Observethewaveformwithanoscilloscope.Ultimately,itsperformancemeetsthedesignrequirements.
KeyWords:
Microcontroller;DAC0832;ADC0809;amplifier;signalgenerator.
目 录
绪论
1.1单片机概述
随着大规模集成电路技术的发展,中央处理器(CPU)、随机存取存储器(RAM)、只读储器(ROM)、(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。
单片机具有体积小、成本低,性能稳定、使用寿命长等特点。
其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机和网络都无法做到的。
1.2信号发生器的分类
信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致。
按照频率范围分类可以分为:
超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。
按照输出波形分类可以分为:
正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:
脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。
按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。
前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。
后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器。
1.3研究内容
本文是做基于单片机的信号发生器的设计,将采用编程的方法来实现三角波、方波、正弦波的发生。
根据设计的要求,对各种波形的频率进行程序的编写,通过放大器来调幅,并将所写程序装入单片机的程序存储器中。
在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出。
第一章方案的设计与选择
1
2
2.1方案与比较
方案一:
采用单片函数发生器(如ICL8038),ICL8038可同时产生正弦波、方波等,而且方法简单易行,用运算放大器改变调制电压,也可以实现数控调整频率,但产生信号的频率稳定度不高。
频率调节也不能直接由程序控制。
方案二:
采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。
方案三:
采用单片机编程的方法来实现。
该方法可以通过编程的方法来控制信号波形的频率和幅度,而且在硬件电路不变的情况下,通过改变程序来实现频率的变换。
此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。
鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。
它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证,而且它使用的几种元器件都是常用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省。
2.2设计原理
数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。
89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:
中央处理器CPU、随机存取存储器RAM、只读存储器ROM、接口电路、I/O定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图2.1所示。
89C51是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号幅度的调节。
当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。
2.3设计思想
(1)向DAC0832送对应的数字量就能得到相应的模拟信号。
(2)将一个周期的信号分离成256个点(按X轴等分),每两点之间的时间间隔为ΔT,用单片机向ADC0832推送数组得到函数信号。
ΔT作为调频的延时,嵌入在256个数据之间。
改变ΔT就能调节波形的频率。
(3)方波的模拟产生:
●数字量为0x00时推入DAC0832输出为低电平
●数字量为0xff时推入DAC0832输出为高电平
(方波便于对频率的测量,也取256个数据。
这与三角波,正弦波数据表统一。
所以三种波形的频率一样。
(4)三角波模拟信号由D/A转换器的模拟量输出:
向DAC0832送数据0—255后,再送数据255—0的连续数据就能够得上一个周期的完整三角波。
因为只取256个数据点,所以波形前半只取0—255中的奇数(128个数);波形后半周期只取255—0的偶数部分(128个数)。
由此较准确的取下了256个数据。
(5)正弦波的模拟信号由D/A转换器的模拟量输出的计算公式为:
Y=(A/2sinΔt)+A/2(其中A=VREF)
Δt=NΔT(N=1~256)
那么对应着存放在计算机里的这一点的数据为:
正弦函数DA数据表,可以用“VsinTab正弦波表生成器”生成所需要的数据表。
如图2.3所示。
图2.3
(6)一个周期被分离成256个点,对应的三种波形的256个数据存分别放在以fangboTAB[256],sanjiaoboTAB[256],zhengxianboTAB[256]为起始地址的存储器中。
(7)ADC0832转换得到的模拟量为电流输出,Iout1+Iout2为常数。
电流很微弱,必须通过放大器放大。
本设计中采用2个ua741,一个ua741对其信号放大,但是电压现在是负值。
不能达到输出电压为0-5V可调的设计要求。
所以还得加一个ua741作为反向器,得到正压值。
对于设计中的输出电压0-5V可调,可以采用调节放大器的负反馈电阻来实现调幅。
(8)实时函数信号的幅值测量:
本设计是通过ADC0809放大器输出端口的信号幅值电压的测量。
因为产生的信号不是直流,是属于高频信号。
所以得加三极管和一个RC滤波电路对其测量幅值。
2.4设计功能
(1)本方案有4个独立式按键,4位LED共阳数码管显示器。
其中“S1”号键——单片机复位,“S2”号键——波形输出切换,“S3”号键——调节输出波形的频率,“S4”号键——测量电压幅值。
4位LED共阳数码管用来显示当前波形的频率和电压的幅值。
(2)DAC0832产生需要的函数信号,ADC0809测量函数信号实时幅值。
(3)74LS74把单片机ALE端口2MHZ信号4分频为500K,作为ADC0809的时钟信号。
(4)用一个ua741把DAC0832的Iout1与Iout2电流输出端口的信号的放大,用另一个ua741作为反向器,把前一级放大了的信号反向,把幅值变成正值。
(4)频率范围:
30~210Hz。
(5)输出波形幅度为0~5V。
第二章硬件设计
3
3.1硬件原理框图
硬件原理方框图如图3.1所示。
3.2主控电路
AT89C51单处机内部设置两个16位可编程的定时器/计数器T0和T1,它们具有计数器方式和定时器方式两种工作方式及4种工作模式。
在波形发生器中,将其作定时器使用,用中断来控制数码管的动态扫描。
这样可以达到不失真的产生函数信号波形。
模式1采用的是16位计数器,当T0或T1被允许计数后,从初值开始加计数,最高位产生溢出时向CPU请求中断。
中断系统是使处理器具有对外界异步事件的处理能力而设置的。
当中央处理器CPU正在处理某件事的时候外界发生了紧急事件,要求CPU暂停当前的工作,转而去处理这个紧急事件。
在波形发生器中,只用到片内定时器/计数器溢出时产生的中断请求,即是在AT89C51点亮一样数码管,接着启动定时器,在定时器未产生中断之前,AT89C51等待,直到定时器计时结束,产生中断请求,AT89C51响应中断,接着点关闭当前位数码管亮下一位数码管,如此循环达到动态扫描的显示功能。
AT89C51从P2口接收来自键盘的信号。
如果有键按下,则在读控制端会产生一个读信号,使单片机读入信号并且存储相应的键值。
按下S0时,单片机复位。
按下S1时,输出波形切换。
按下S2时,输出波形调整。
按下S3时,测量输出波形电压幅值。
3.3显示电路
在本设计中,采用4位数码管来显示频率和电压。
由PNP三极管驱动可以获得高亮度的显示。
当产生一个周期的波形需要把256个数组推送到DAC0832中,数据量大,所以不能产生很高的频率。
用4位的数码管就够用。
显示接口如图3.3所示。
图3.3
3.4数/模转换电路
由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。
DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:
直通方式、单缓冲方式和双缓冲方式。
DAC0832引脚功能说明:
DI0~DI7:
数据输入线,TLL电平。
ILE:
数据锁存允许控制信号输入线,高电平有效。
CS:
片选信号输入线,低电平有效。
WR1:
为输入寄存器的写选通信号。
XFER:
数据传送控制信号输入线,低电平有效。
WR2:
为DAC寄存器写选通输入线。
Iout1:
电流输出线。
当输入全为1时Iout1最大。
Iout2:
电流输出线。
其值与Iout1之和为一常数
Rfb:
反馈信号输入线,芯片内部有反馈电阻。
Vcc:
电源输入线(+5v~+15v)。
Vref:
基准电压输入线(-10v~+10v)。
AGND:
模拟地。
DGND:
数字地。
在本设计中,采用的是直通模式。
因为接口简单。
占用单片机口接口少。
当数据送入DAC0832立即转换。
电路图如图3.4所示。
图3.4
3.5放大、分频电路
●放大电路
741放大器输出入脚位图
图3.51
在本设计中用到了两个ua741如图3.52。
第1级放大器,用于信号的放大。
第2级放大器,用于信号的反向,从而得到正电压。
图3.52
第一级放大器(U5)输出电压的计算公式为:
第一级反向器(U6)输出电为:
VOUT2=-VOUT1
●4分频电路
74LS74芯片由两个独立的上升沿触发的维持阻塞D触发器组成。
引脚功能说明:
图3.61
1CP、2CP:
时钟输入端
1D、2D:
数据输入端
1Q、2Q、1/Q、2/Q:
输出端
CLR1、CLR2:
直接复位端(低电平有效)
PR1、PR2:
直接置位端(低电平有效)
功能表:
图3.62
在本设计需要一个4分频电路,中如图3.63所示。
就可以得到一个4分频电路。
实际设计中将用来把单片机ALE引角上的信号(2MHZ)分为500KHZ用来提供ADC0809的时钟。
图3.63
3.6模/数转换电路
●ADC0809概述
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片。
●主要特性
1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)
4)单个+5V电源供电
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW。
●外部特性(引脚功能)
ADC0809芯片有28条引脚,采用双列直插式封装,如图3.71所示。
下面说明各引脚功能。
图3.71
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路。
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地。
●ADC0809的工作过程
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
●转换数据的传送
A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
为此可采用下述三种方式。
(1)定时传送方式
对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。
因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
(3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据口,供单片机接收。
在本设计中,因为单片机的资源有限。
为了节约单片机接口,所以采用第一种定时传送方式。
ADC0809的OE端直接接高电平,当数据转换完成立即送到数据口。
单片机每隔一定的时间来读取数据口的数据。
如图3.72所示。
ADC0809在本设计中是用来对输出的波形的实时电压的测量的作用。
其转换测量的公式:
‘X’就是我们需要计算出来的当前的电压值。
‘5’代表5伏的基准电压。
‘28’是ADC0809的转换分辨率。
‘P3’是针对我的当前设计写的,就是ADC0809数据总线的数据。
图3.72
3.7按键、复位、时钟电路
●键盘电路
本设计中采用的是3个独立的功能按键。
S2用来切换现在产生的波形。
当没有按下S2时信号发生器产生方波信号。
第一次按下S2时,将切换成三角波信号。
第二次按下S2时,将切换产生正弦波信号。
第三次按下S2时,又产生方波信号。
这样一直循环。
S3用来调节输出的函数信号的频率。
当没有按下S3时,产生的函数信号最高。
当按下S3时,波形频率降低,同时还要对应向LED显示缓冲区给定一个频率值提供当前频率显示所需要的数据。
S3按7次一个循环。
当第7次按下时恢复到最高频率输出。
S4用来启动对输出的函数信号的电压值的测量。
当S4没有按下时,单片机只向DAC0832送波形数据表和显示当前波形的频率。
按下S4后,单片机除了向DAC0832送波形数据表外,还要每隔一小段时间对读取ADC0809转换的电压值,并且换算出来,送给LED显示当前电压。
此时不再显示当前波形的频率。
图3.7
●复位电路
单片机的复位是靠外部电路实现的,在时钟电器工作以后,只要在RESET端加上大于10MS的高电平,单片机便能实现复位。
若RESET保持高电平,单片机循环复位。
单片机一般要求在上电时,或者按复位键时复位。
所以复位电路又分为上电复位和按键复位两种。
在本设计中用到的就是按键复位。
如图3.91所示。
图3.91
●时钟电路
单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟。
晶体在1.2~12MHZ选择。
时钟电路如图3.92所示。
其中C2,C3起稳定振荡的作用,电容选一般6~33PF。
图3.92
第三章软件设计
4
4.1主程序流程图
4.2中断程序流程图
4.3程序代码
#include"reg51.h"
#defineucharunsignedchar
#defineDAP1//DAC0832数据口
#defineADP3//ADC0809数据口
#defineLED_DATAP0//LED显示数据口
sbitbaiwei=P2^7;//定义数码管阳级控制脚(百位)
sbitshiwei=P2^6;//定义数码管阳级控制脚(十位)
sbitgewei=P2^5;//定义数码管阳级控制脚(个位)
sbittiaobo=P2^4;//波形切换
sbittiaopin=P2^3;//调频
sbitdianya=P2^2;//测电压
sbitSTART=P2^1;//启动AD
uchara=0,b=0,c=0,i=0,l=0,n=0;
codeucharceliang1ma[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小点段码
codeucharceliang2ma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不带小点段码
//共阳0123456789
datauchardianyaTAB[2]={0x24,0x90};//电压值存数组
codeucharpinlv[18]={0xa4,0xf9,0xb0,//213不同频率下的显示数据
0xf9,0xc0,0xf8,//107
0xff,0xf8,0xf9,//71
0xff,0x92,0xb0,//53
0xff,0x99,0xb0,//43
0xff,0xb0,0x82};//36
/***********************方波数据表**************************/
codeucharfangboTAB[256]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00