多功能波形发生器设计综述.docx

上传人:b****5 文档编号:7846002 上传时间:2023-01-26 格式:DOCX 页数:15 大小:223.80KB
下载 相关 举报
多功能波形发生器设计综述.docx_第1页
第1页 / 共15页
多功能波形发生器设计综述.docx_第2页
第2页 / 共15页
多功能波形发生器设计综述.docx_第3页
第3页 / 共15页
多功能波形发生器设计综述.docx_第4页
第4页 / 共15页
多功能波形发生器设计综述.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

多功能波形发生器设计综述.docx

《多功能波形发生器设计综述.docx》由会员分享,可在线阅读,更多相关《多功能波形发生器设计综述.docx(15页珍藏版)》请在冰豆网上搜索。

多功能波形发生器设计综述.docx

多功能波形发生器设计综述

1引言

波形发生器也称函数发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。

目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿波,正弦波,方波,三角波等波形。

在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。

随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。

用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。

利用单片机采用程序设计方法来产生低频信号,其频率底线很低。

具有线路相对简单,结构紧凑,价格低廉,频率稳定度高,抗干扰能力强,用途广泛等优点,并且能够对波形进行细微调整,改良波形,使其满足系统的要求。

只要对电路稍加修改,调整程序,即可完成功能升级。

2方案设计与分析

2.1设计目的

本设计包括确定控制任务、系统总体方案设计、硬件系统设计、软件程序的设计等,使学生进一步学习与理解计算机控制系统的构成原理、接口电路与应用程序,巩固与综合专业基础知识和相关专业课程知识,提高学生运用理论知识解决实际问题的实践技能;

2.2设计内容及要求

设计由微机(单片机)控制的多功能波形发生器,该发生器在操作人员控制下输出正弦波,方波,三角波,或锯齿波波形。

波形的极性,周期和占空比(对矩形波而言)等可由操作人员设置和修改。

具体要求:

(1)可预先在内存数据内中建立各种波形的一个周期的输出数据表。

然后每一次定时中断信号或每延时一定时间,循环的依次从表中取一个数据输出,便可以得到相应的波形。

(2)对于方波,锯齿波和三角波等脉冲波形的产生,可直接根据波形的特点,依次将每点输出数据加/减一数或在上、下限值上交替变换来实现。

(3)采用预置和修改上下限来实现波形幅度变化。

改变上、下限值输出延时时间,可改变矩形波的占空比。

2.3设计方案及原理

系统的核心采用AT89S51,该单片机具有加密性强、超强抗干扰能力,超低功耗,运行速度快等特点,以及在系统可编程等特点,该芯片内部集成看门狗电路,不用外接看门狗电路,因此满足了本系统开发的需要。

单片机负责控制信号发生单元的工作状况,根据外部键盘的输入改变程序的运行状态,使信号发生单元能产生所需的波形。

波形数据为一系列的二进制数,通过D/A转换和放大输出。

当前的波形名称、频率、幅值及占空比通过显示单元显示。

图2.1总体设计流程图

3硬件的设计

3.1硬件接线的设计

键盘输入部分主要用于选择波形。

键盘共设4个键,用于选择三角波、矩形波、锯齿波、正弦波4种不同的波形,89C51单片机用来执行某一波形发生程序,向D/A转换器的输入端发送数据,将其转化成模拟量,并通过运算放大器调节波形的幅值,经过滤波器的滤波,从而在输出端得到所需的波形。

图3.1总体电路图

3.2总体程序流程图

图3.2总体程序流程图

3.3各主要模块的功能

3.31AT89C511单片机

图3.3 AT89C51引脚图

如果按功能划分,它由8个部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、I/O口(P0口、P1口、P2口、P3口)、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)的集中控制方式。

各功能部件的介绍:

1)数据存储器(RAM):

片内为128个字节单元,片外最多可扩展至64K字节。

2)程序存储器(ROM/EPROM):

ROM为4K,片外最多可扩展至64K。

3)中断系统:

具有5个中断源,2级中断优先权。

4)定时器/计数器:

2个16位的定时器/计数器,具有四种工作方式。

5)串行口:

1个全双工的串行口,具有四种工作方式。

6)特殊功能寄存器(SFR)共有21个,用于对片内各功能模块进行管理、监控、监视。

7)微处理器:

为8位CPU,且内含一个1位CPU(位处理器),不仅可处理字节数据,还可以进行位变量的处理。

8)四个8位双向并行的I/O端口,每个端口都包括一个锁存器、一个输出驱动器和一个输入缓冲器。

这四个端口的功能不完全相同。

A、P0口既可作一般I/O端口使用,又可作地址/数据总线使用;

B、P1口是一个准双向并行口,作通用并行I/O口使用;

C、P2口除了可作为通用I/O使用外,还可在CPU访问外部存储器时作高八位地址线使用;

D、P3口是一个多功能口除具有准双向I/O功能外,还具有第二功能。

控制引脚介绍:

1)电源:

单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。

2)时钟引脚XTAL1、XTAL2时钟引脚外接晶体与片内反相放大器构成了振荡器,它提供单片机的时钟控制信号。

时钟引脚也可外接晶体振荡器。

3)RST:

当振荡器运行时,在此引脚外加上两个机器周期的高电平将使单片机复位(RST)。

4)ALE:

当访问单片机外部存储器时ALE(地址锁存允许)输出脉冲的负跳沿用于16位地址的底8位的锁存信号。

即使不访问外部锁存器,ALE端仍有正脉冲信号输出,此频率约为时钟振荡器的1/6。

但是每当访问外部数据存储器时,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲。

因此,严格来说,用户不能用ALE做时钟源或定时。

ALE端可以驱动8个TTL负载5)/PSEN(29脚):

此脚的输出是单片机访问外部程序存储器的读选通信号。

在由外部程序存储器取指令(或常数)期间,每个机器周期PSEN两次有效。

6)/EA/VPP(31脚):

当EA端保持高电平时,单片机访问内部存储器,但在PC值超过0FFFH时,讲自动转向执行外部存储器内的程序。

当/EA保持低电平时,则只访问外部程序存储器,不管是否有内部存储器。

3.32DAC0832芯片

 

图3.4DAC0832芯片图

DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器。

DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。

DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。

所以这个芯片的应用很广泛,关于DAC0832的引脚功能如下:

D0~D7:

数字信号输入端。

ILE:

输入寄存器允许,高电平有效。

CS:

片选信号,低电平有效。

WR1:

写信号1,低电平有效。

XFER:

传送控制信号,低电平有效。

WR2:

写信号2,低电平有效。

IOUT1、IOUT2:

DAC电流输出端。

RfB:

是集成在片内的外接运放的反馈电阻。

VREF:

基准电压(-10~10V)。

Vcc:

是源电压(+5~+15V)。

AGND:

模拟地NGND:

数字地,可与AGND接在一起使用。

4proteus仿真图

5软件设计

5.1流程图的设计

5.1.1方波程序流程图

此波形的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。

这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了.

5.1.2正弦波程序流程图

5.1.3三角波程序流程图

三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作。

5.1.4锯齿波的程序流程图

锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。

5.2程序清单

IOYOEQU3800H;片选8255对应端口的始地址

MY8255_AEQUIOYO+00H*2;8255的A口地址

MY8255_BEQUIOYO+00H*2;8255的B口地址

MY8255_CEQUIOYO+00H*2;8255的C口地址

MY8255_MODEEQUIOYO+00H*2;8255的控制寄存器地址

MY0832EQU3819H;片选DAC0832对应的端口地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DDATASEGMENT

flagDB2DUP(?

);存放将要转换的波形的的类型,0FH代表直线

;0EH代表方波,0DH代表锯齿波;0BH代表三角波;07H代表正弦波

TEMPDB2DUP(?

);存放三角波的走向,0代表上上升,1代表下降

BUF1DB00H,00H,0FFH,0FFH;矩形波的预置数

BUF4DB7FH,8CH,98H,0A4H,0B0H,0BCH,0C6H,0D0H

DB0DAH,0E2H,0E9H,0F0H,0F5H,0F9H,0FCH,0FEH

DB0FFH,0FEH,0FCH,0F9H,0F5H,0F0H,0E9H,0E2H

DB0DAH,0D0H,0C6H,0BCH,0B0H,0A4H,98H,8CH

DB7FH,73H,67H,5AH,4FH,43H,39H,2FH

DB25H,1DH,15H,0FH,0AH,05H,02H,01H

DB00H,01H,02H,05H,0AH,0FH,15H,1DH

DB25H,2FH,39H,43H,4FH,5AH,67H,73H

DDATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DDATA

START:

MOVAX,DDATA

MOVDS,AX

MOVSI,OFFSETflag;初始化输出的波形类型

MOVCL,00H

MOV[SI],CL

MOVDX,MY8255_MODE;初始化8255的工作方式

MOVAL,90H;工作方式0,A口输入

OUTDX,AL

DANDS:

PUSHAX;保存各个寄存器的值

PUSHDI

PUSHSI

CALLDALLY;延时并扫描

CALLKEYSCAN

POPSI;恢复各个寄存器的值

POPDI

POPAX

Line:

MOVCL,00H;判断上次输出的波形是不是直线

CMP[SI],CL

JZNEXT0;如果是则继续,不是则把波形变换成直线

MOV[SI],CL

MOVDI,00H

NEXT0:

MOVDX,MY0832;输出直线

MOVAL,00H

OUTDX,AL

JMPDANDS;返回扫描按键

rectangular:

MOVCL,01H;判断上次输出的波形是不是方波

CMP[SI],CL

JZNEXT1;如果是则继续,不是则把波形变换成方波

MOV[SI],CL

MOVDI,0000H

NEXT1:

MOVDX,MY0832

MOVBX,OFFSETBUF1;从内存娶数据并输出

MOVAL,[BX+DI]

OUTDX,AL

INCDI

CMPDI,03H;判断是否一个周期已经结束

JNATIAO1

MOVDI,00H

TIAO1:

JMPDANDS;返回扫描按键

sawtooth:

MOVCL,02H;判断上次输出的波形是不是锯齿波

CMP[SI],CL

JZNEXT2;如果是则继续,不是则把波形变换成锯齿波

MOV[SI],CL

MOVDI,0000H

MOVAL,00H

NEXT2:

MOVDX,MY0832;输出波形

OUTDX,AL

INCAL

INCAL

JMPDANDS;返回扫描按键

triangle:

MOVCL,03H;判断上次输出的波形是不是三角波

CMP[SI],CL

JZNEXT3;如果是则继续,不是则把波形变换成三角波

MOV[SI],CL

MOVAL,00H

MOVDI,OFFSETTEMP

MOVCL,00H;将三角波初始化为上升

MOV[DI],CL

NEXT3:

MOVDX,MY0832;输出波形

OUTDX,AL

MOVDI,OFFSETTEMP;判断三角波是不是出于下降阶段

MOVCL,01H

CMP[DI],CL

JZDOWN;如果为下降阶段则跳到DOWN,如果为上升阶段,

UP:

INCAL

INCAL

JNZTIAO3;如果上升到最顶端,则转变为下降阶段

MOVDI,OFFSETTEMP

MOVCL,01H

MOV[DI],CL

DOWN:

DECAL

DECAL

JNZTIAO3

MOVDI,OFFSETTEMP;如果下降到最低端,则转为上升阶段

MOVCL,00H

MOV[DI],CL

TIAO3:

JMPDANDS;返回扫描按键

sine:

MOVCL,04H;判断上次输出的波形是不是正弦波

CMP[SI],CL

JZNEXT4;如果是则继续,不是则把波形变换成正弦波

MOV[SI],CL

MOVDI,0000H

MOVAL,00H

NEXT4:

MOVDX,MY0832;从BUF4取数据并输出

MOVBX,OFFSETBUF4

MOVAL,[BX+DI]

OUTDX,AL

INCDI

CMPDI,40H;判断输出的中周期是否结束

JNZTIAO4

MOVDI,00H

TIAO4:

JMPDANDS;返回扫描按键

KEYSCANPROC;定义键盘扫描子程序

SCAN:

MOVDX,MY8255_A;读A口

INAL,DX

ANDAL,0FH

MOVAH,AL

CMPAH,0FH;判断是否有按键按下

JNZP1;如果没有按键按下,输出一条直线

JMPline

;下面的程序如果有按键按下,判断哪一个按键按下

P1:

CMPAH,0EH;判断第一个按键有没有按下

JNZP2;如果第一个按键按下,则输出矩形波

JMPrectangular

P2:

CMPAH,0DH;判断第二个按键有没有按下

JNZP3;如果第二个按键按下,则输出锯齿波

JMPsawtooth

P3:

CMPAH,0BH;判断第三个按键有没有按下

JNZP4;如果第三个按键按下,则输出三角波

JMPtriangle

CMPAH,0EH;判断第四个按键有没有按下

JNZP4;如果第四个按键按下,则输出正弦波

JMPsine

P4:

MOVAH,1;判断电脑键盘是否有按键按下

INT16H

JZSCAN;无按键按下则跳回继续扫描,有则退出

QUIT:

MOVAX,4C00H;结束程序退出

INT21H

KEYSCANENDP

DALLYPROCNEAR;软件延时子程序

PUSHCX;将变量值CX,AX的值压入堆栈

PUSHAX

MOVCX,0FFFH;延时

D1:

MOVAX,0FFFH

D2:

DECAX

JNZD2

LOOPD1

POPAX;将变量AX,CX的值弹出堆栈

POPCX

RET

DALLYENDP

CODEENDS;结束代码段

ENDSTART

6课程设计体会

通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。

最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。

这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在各种努力下,终于游逆而解。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可。

 

参考文献

1.顾德英.计算机控制技术(第二版).北京邮电大学出版社,2005

2.李顺增,吴国东,赵河明.微机原理及接口技术.机械工业出版社,2004

3徐爱华单片机应用技术教程机械工业出版社2003.7

4谢宜仁,谢炜,谢东辰单片机实用技术问答人民邮电出版社2003.2

5何立民单片机应用技术选编北京航空航天大学出版社1997.10

6潘永雄新编单片机原理与应用实验西安电子科技大学出版社2005.9

7夏继强,沈德金单片机实验与实践教程北京航空航天大学出版1999.12

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1