基于PROTEUS的函数信号发生器的设计 精品推荐Word文件下载.docx
《基于PROTEUS的函数信号发生器的设计 精品推荐Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于PROTEUS的函数信号发生器的设计 精品推荐Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
一旦工作需求功能有增加,则电路复杂程度会大大的增加。
美国安捷伦生产的33250A型函数/任意波形发生器可以产生稳定、精确和低失真的任意波形,其输出频率范围为1μHz~80MHz,而输出幅度为10mVpp~10Vpp;
该公司生产的8648D射频信号发生器的频率覆盖范围更可高达9kHz~4GHz。
国产SG1060数字合成信号发生器能双通道同时输出高分辨率、高精度、高可靠性的各种波形,频率覆盖范围为1μHz~60MHz;
国产S1000型数字合成扫频信号发生器通过采用新技术、新器件实现高精度、宽频带的扫频源,同时应用DDS和锁相技术,使频率范围从1MHz~1024MHz能精确地分辨到100Hz,它既是一台高精度的扫频源,同时也是一台高精度的标准信号发生器。
目前市场上的信号发生器多种多样。
他们各有各的优点,但是函数发生器总的趋势将向着宽频率覆盖、高频率精度、多功能、多用途、自动化和智能化方向发展。
1.3.毕业设计所用方法
利用单片机控制脉冲的输入和输出,从而控制信号波形的频率和幅度,并根据要求输出的波形设计对应的硬件电路。
在硬件电路不变的情况下,通过改变程序来实现频率的变换,用按键来控制单片机的波形和频率,通过显示电路显示频率值,利用数模转换器放大电路输出波形,并可以通过示波器观察波形与频率,其中复位电路用于系统复位重启。
最后利用Proteus软件对设计的电路进行实时仿真,通过仿真的结果来观察波形的输出。
2.系统硬件方案的设计
2.1.方案的选择与论证
方案一:
采用单片函数信号发生器(如8038),8038可同时产生正弦波、方波等,而且方法简单易行,用D/A转换器的输出来改变调制电压,也可以产生实现数控调整频率,但产生的信号的频率稳定度不高。
方案二:
采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。
方案三:
采用单片机编程的方法来实现。
该方法可以通过编程的方法来控制信号波形的频率和幅度,而且在硬件电路不变的情况下,通过改变程序来实现频率的变换。
此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。
鉴于方案一的信号频率不够稳定和方案二的电路复杂且频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。
它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证,而且它使用的几种器件都是常用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省。
2.2.系统总体设计
经过考虑,确定方案如下:
利用AT89C51单片机采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来。
通过按键来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。
硬件设计的总体框图如图2-1所示。
单片机控制电路
数码管显示电路
时钟与复位电路
D/A转换电路
按键电路
波形输出
图2-1硬件设计总体框图
2.3.单片机最小系统设计
用89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,89C51单片机最小系统如图2-2所示。
由于集成度的限制,最小应用系统只能用作一些小型的控制单元。
图2-289C51单片机最小系统
其应用特点:
有可供用户使用的大量I/O口线。
内部存储器容量有限。
应用系统开发具有特殊性。
典型的MCS-51单片机芯片集成了以下几个基本组成部分:
1)一个8位的CPU
2)128B或256B单元内数据存储器(RAM)
3)4KB或8KB片内程序存储器(ROM或EPROM)
4)4个8位并行I/O接口P0~P3
5)两个定时/计数器
6)5个中断源的中断管理控制系统
7)一个全双工串行I/O口UART(通用异步接收、发送器)
8)一个片内振荡器和时钟产生电路
2.4.复位与时钟电路设计
2.4.1.时钟电路设计
单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振),就构成了内部振荡方式。
由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。
晶振通常选用6MHZ、12MHZ或24MHZ。
内部振荡方式如图2-3所示。
图中电容C1、C2起稳定振荡频率、快速起振的作用。
电容值一般为5~30pF。
内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。
外部振荡方式是把已有的时钟信号引入单片机内。
这种方式适宜用来使单片机的时钟与外部信号保持一致。
外部振荡方式电路如图2-4所示。
对HMOS的单片机(8031,8031AH等),外部时钟信号由XTAL2引入;
对于CHMOS的单片机(8XCXX),外部时钟信号由XTAL1引入。
图2-4外部振荡方式
图2-3内部振荡方式
2.4.2.复位电路设计
单片机的复位是靠外电路实现的,在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便实现初始化状态复位。
为了保证应用系统可靠地复位,通常是RST引脚保持10ms以上的高电平,根据应用的要求,复位操作通常有两种基本形式:
上电复位和上电或开关复位。
上电复位要求接通电源后,自动实现复位操作。
上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。
复位电路连接如图2-5所示。
此电路仅用一个电容及一个电阻。
系统上电时,在RC电路充电过程中,由于电容两端电压不能跳变,故使RESET端电平呈高电位,系统复位。
经过一段时间,电容充电,使RESET端呈低电位,复位结束。
图2-5复位电路
2.5.波形产生模块设计
由单片机采用编程方法产生三种波形、通过DA转换模块DAC0832在进过滤波放大之后输出。
其电路图如图2-6所示:
图2-6波形产生电路
LM324的5管脚与DAC0832的(IOUT2)12管脚相连,LM324的6管脚与DAC0832的(IOUT1)11管脚相连,LM324的7管脚与DAC0832的REF(9)管脚相连。
第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1通过反向放大电路放大-(R2/R1)倍。
在第二个运算放大器的输出端连了一个20K的电位器。
通过电位器来调节波形振幅的大小,同时在输出端接到示波器的输入端,通过示波器观察产生的波形。
2.6.D/A转换电路设计
2.6.1.D/A转换器指标
分辨率:
输出模拟电压应能区分0~2n-1共2n个输入数字量。
表示方法:
1)用输入二进制数的位数表示;
如8位。
2)用输出模拟电压的最小值与最大值的比值表示。
指最小输出电压和最大输出电压之比。
DAC0832的分辨率为1/255。
精度:
DAC实际输出电压与理想的输出电压的偏差。
DAC0832的最大满刻度偏差为+1LSB。
线性度:
DAC实际传输特性曲线与理想的传输特性曲线的偏差。
DAC0832的最大误差为+0.19%。
温度灵敏度:
在输入不变的情况下,输出模拟电压随温度变化产生的变化量。
一般用满刻度输出条件下温度每升高1℃,输出电压变化的百分数作为温度系数。
转换速度:
用完成一次转换所需的时间——建立时间Tset来衡量。
建立时间:
输入信号从开始变化到输出电压进入与稳态值相差1/2LSB范围以内的时间。
输入信号由全0变为全1所需时间最长。
当外接运放时,转换时间还应加上运放的上升(下降)时间。
(2—1)
式中
为转换时间,
为建立时间,
输出最大电压值,
为运放输出转换速率。
2.6.2.D/A转换的原理
以倒T形电阻网络D/A转换器为例,介绍D/A转换器的原理。
倒T形电阻网络D/A转换器结构如图2-7所示。
图2-7倒T形电阻网络D/A转换器
图中S0~S3为模拟开关,由输入数码Di控制,当Di=1时,Si接运算放大器相输入端(虚地),电流Ii流入求和电路;
当Di=0时,Si将电阻2R接地。
所以,无论Si处于何种位置,与Si相连的2R电阻均接“地”(地或虚地)。
流过各开关支路(从右到左)的电流分别为I/2、I/4、I/8、I/16。
总电流:
(2—2)
输出电压:
(2—3)
将输入数字量扩展到n位,则有:
(2—4)
可简写为:
其中
,
2.6.3.DAC0832芯片
由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以本文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。
DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。
但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。
DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:
直通方式、单缓冲方式和双缓冲方式。
本设计选用直通方式。
CSDA:
片选信号输入线(选通数据锁存器),低电平有效;
WR:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存。
单片机的P0口连接DAC0832的八位数据输入端,DAC0832的输出端接放大器,经过放大后输出所要的波形。
DAC0832的内部结构如图2-8所示:
图2-8DAC0832内部结构图
2.7.数码管显示模块
本设计是用利用4为LED数码管显示波形代号和频率,通过按键来控制输出不同的波形,在数码管上第一位字母a、b、c、d分别对应着正弦波、三角波、方波、锯齿波,后三位数码管对应信号的频率,通过按键控制频率输出,其中单片机P1口接驱动芯片74LS245用以增加P1口带负载的能力,再利用74LS138译码器芯片对其进行译码并通过数码管显示,显示模块图如图2-9所示:
图2-9显示电路模块
3.系统软件方案的设计
3.1.软件总体设计
应用系统中的应用软件是根据系统功
能要求而设计的,能可靠地实现系统的各种功能。
一个优秀的应用系统的应具有下列特点:
根据软件功能要求,将系统软件分成若干个独立的部分。
设计出软件的总体结构,使其结构清晰、流程合理。
要树立结构化程序设计风格,各功能程序模块化、子程序化。
既便于调试、链接,又便于移植、修改。
建立正确的数学模型。
即根据功能要求,描述各个输入和输出变量之间的数学关系,它是关系到系统好坏的重要因素。
为提高软件设计的总体效率,以简明、直观法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。
要合理分配系统资源,包括ROM、RAM、定时/计数器、中断资源等。
注意在程序的有关位置处写上功能注释,提高程序的可读性。
加强软件抗干扰设计,它是提高系统应用可靠性的有利措施。
本系统的软件包括以下几个程序模块:
键盘处理程序;
中断服务程序;
正弦波发生程序及其服务程序;
三角波发生程序;
方波发生程序;
锯齿波发生程序。
3.2.软件流程图
本系统采用AT89C51单片机,用编程的方法来产生四种波形,并通过编程来切换四种波形以及波形频率的改变。
具体功能有:
各个波形的切换;
各种参数的设定;
频率增减等;
数码管的显示
软件调通后,通过编程器下载到AT89C51芯片中,然后插到系统中即可独立完成所有的控制。
软件流程图如图3-1所示。
图3-1程序流程图
3.3.键盘扫描及初始程序设计
单片机系统中,键盘扫描是CPU工作的一个主要内容之一。
CPU忙于各项工作任务时,如何兼顾键盘扫描。
既保证不失时机的响应键盘操作,又不过多占用CPU时间。
因此,要根据应用系统中的CPU的忙、闲情况,选择好键盘的工作方式。
在单片机应用系统设计中,为了节省硬件,通常采用非编码键盘,在这种键盘结构中,单片机对它的控制有三种方式:
程序控制扫描方式;
定时扫描工作方式;
中断工作方式。
1)程序控制扫描方式
这种方式就是只有当单片机空闲时,才调用键盘扫描子程序,响应键盘的输入请求。
2)定时扫描方式
这种方式就是每隔一定的时间对键盘扫描一次。
通常是利用单片机内部定时器产生1ms的定时中断,CPU响应定时器溢出中断请求,对键盘进行扫描,以响应键盘输入请求。
3)中断工作方式
为进一步提高CPU效率,可以采用中断扫描工作方式。
即在键盘有健按下时,才执行键盘扫描,执行该键功能程序。
本系统采用程序控制扫描工作方式。
在该设计中的键盘的行列线连接于89C51的P2口上。
键盘扫描程序自复位后就开始工作,时刻监视键盘,有无键按下。
在监视键盘过程中,允许定时器中断。
一旦有键按下,先延时1ms,去除键的抖动,然后关中断,不允许定时器发生中断。
按键功能如表3-1所示:
表3-1按键对应功能
按键
功能
key1
键选择发波类型(1为正弦波,2为三角波,3为方波,4为方波)
key2
频率增加
Key3
频率减小
按键控制源程序如下:
voiddelay(uchark)
{
for(de1=0;
de1<
10;
de1++)
for(de2=0;
de2<
k;
de2++){;
}
voidkey1(void)//1键选择发波类型,1为正弦波,2为三角波,3为方波
fun++;
if(fun==5)
fun=0x01;
voidkey2(void)//2键加大频率
tl+=0xf;
if(tl>
0xe8)
tl=0x00;
if(flag>
0)
flag--;
else
flag=255;
voidkey3(void)//3键减小频率
if(th>
0x00)
tl-=0xf;
if(flag<
255)
flag++;
else
flag=0;
voidkey4(void)
3.4.中断服务程序设计
采用定时器T0定时中断,根据不同的按键次数,产生不同的波形。
voidint1(void)interrupt2//int0中断服务程序
if(P2!
=0xff)
delay(125);
if(P2==0xff)
return;
if(P2==0xef)key1();
if(P2==0xdf)key2();
if(P2==0xbf)key3();
if(P2==0x7f)key4();
3.5.波形发生程序设计
3.5.1.正弦波发生程序设计
其实在计算正弦波形数据的时候,并不需要算出整个0—2π区间的每一个值,而只需计算出0—
π中的值就行,其他区间的值都可以通过对0—
π中的值取
不同的变换。
比如
π—π的值可以和0—
π值一一对应,而π—2π的值可以对0—π区间的值取反得到。
计算值可以用C语言编程得到。
幅度公式为Y=2.5[1+sin(
)](N=0,1,2……64)
相应的Y值数字化后的递增量δ=
≈0.0196
那么每一个点相对于起一个点的递增率为A=
(Y2当前的点,Y1为前一个点)
所以每一个点的数字量与递增率A成一一对应关系,正弦波形数据表见表3-2。
序号
幅度(Y值)
递增率A
数字递增率
数字量(十进制)
1
2.561353
0.061353
3
131
2
2.622669
0.122669
6
134
2.683911
0.183911
9
137
4
2.745043
0.245043
12
140
5
2.806027
0.306027
15
143