单片机波形发生器课程设计说明书Word下载.docx
《单片机波形发生器课程设计说明书Word下载.docx》由会员分享,可在线阅读,更多相关《单片机波形发生器课程设计说明书Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
![单片机波形发生器课程设计说明书Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/31/3139103b-cde1-4706-86d4-72163dbd6ea2/3139103b-cde1-4706-86d4-72163dbd6ea21.gif)
3.1系统硬件总体设计10
3.2DAC0832的引脚及功能10
3.3系统硬件原理12
第4章系统的软件设计13
4.1主程序流程图13
4.2波形的产生14
4.2.1设计思路14
4.2.2锯齿波的产生15
4.2.3方波的产生16
总结17
参考文献17
第1章绪论
1.1课题背景
波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。
函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。
在70年代前,信号发生器主要有两类:
正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。
这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。
同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;
二是脉冲的占空比不可调节。
在70年代后,微处理器的出现,可以利用处理器、A/D/和D/A,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。
这时期的波形发生器多以软件为主,实质是采用微处理器对DAC的程序控制,就可以得到各种简单波形。
90年代末,出现几种真正高性能、高价格的函数发生器、但是HP公司推出了型号为HP770S的信号模拟装置系统,它由HP8770A任意波形数字化和HP1776A波形发生软件组成。
HP8770A实际上也只能产生8中波形,而且价格昂贵。
不久以后,Analogic公司推出了型号为Data-2020的多波形合成器,Lecroy公司生产的型号为9100的任意波形发生器等。
到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可过GHz的DDS芯片,同时也推动了函数波形发生器的发展,2003年,Agilent的产品33220A能够产生17种波形,最高频率可达到20M,2005年的产品N6030A能够产生高达500MHz的频率,采样的频率可达1.25GHz。
由上面的产品可以看出,函数波形发生器发展很快近几年来,国际上波形发生器技术发展主要体现在以下几个方面:
1.2本文主要内容
近年来,波形发生器在各种领域中得到越来越广泛的应用。
本系统主要通过研究51单片机的功能,外加D/A转换器等其它器件,进行硬件设计和软件编程,完成锯齿波、梯形波、三角波、方波和正弦波共五种波形的形成。
波形频率的变化由程序来控制,即通过改变定时器的初值来改变输出波形相邻两点的时间间隔,从而实现波形频率的改变。
第2章51单片机的结构
2.1内部结构概述
典型的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-1单片机引脚图
2.2CPU结构
CPU是单片机的核心部件。
它由运算器和控制器等部件组成。
2.2.1运算器
51单片机的运算器由算术逻辑单元(ALU)、累加器ACC、寄存器B和程序状态字(PSW)组成。
算术逻辑单元(ALU)是微处理器的核心,它由加法器、布尔处理器和两个暂存器TMP1和TMP2组成。
运算结果的状态由程序控制字(PSW)保存。
累加器ACC、寄存器B和程序状态字(PSW)在功能上属于运算器,但在单片机物理位置上属于内部数据存储器。
2.2.2程序计数器PC
PC是一个16位的计数器,用于存放一条执行的指令地址,寻址范围为64KB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。
2.2.3指令寄存器
指令寄存器用于存放指令代码。
CPU执行指令时,由程序存储器中读取的指令代码送入指令寄存器,经指令译码器译码后由定时有控制电路发出相应的控制信号,完成指令功能。
2.3存储器和特殊功能寄存器
存储器是计算机系统中的记忆设备,用来存放程序和数据。
它根据控制器指定的位置存入和取出信息。
特殊功能寄存器(SFR)位于片内RAM的80H~FFH,共有21个。
它又可分为5类:
与运算器相关的寄存器、指针类寄存器、与串并口相关的寄存器、与中断相关的寄存器、与定时/计数相关的寄存器。
2.4P0~P3口结构及功能
2.4.1P0口结构及功能
P0口由一个输出锁存器、一个转换开关MUX、两个三态输入缓冲器、输出驱动电路和一个与门及一个反相器组成,如图2-2所示。
图2-2P0口位结构图
P0口具有两种功能:
第一,P0口可以用作通用I/O接口;
第二,P0口可以用作地址/数据总线。
2.4.2P1口结构及功能
P1口是由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成,驱动电路内部设有上拉电阻,如图2-3所示。
图2-3P1口位结构图
P1口是51单片机唯一的单功能口,是通用的准双向I/O口。
2.4.3P2口结构及功能
P2口由一个输出锁存器、一个转换开关MUX、两个三态输入缓冲器、输出驱动电路和一个反相器组成,如图2-4所示。
图2-4P2口位结构图
P2口共有两个功能:
第一个功能与上述两组引脚的第一功能相同,即可用作通用I/O口;
它的第二功能与P0口引脚的第二功能相配合,作为地址总线用于输出片外存储器的高8位。
2.4.4P3口结构及功能
P3口由一个输出锁存器、三个三态输入缓冲器、输出驱动电路和一个与非门组成,如图2-5所示。
图2-5P3口位结构图
P3口有两个功能:
第一个功能与其余三个端口的第一功能相同;
第二功能做控制用,每个引脚的功能不同:
P3.0——RXD:
串行口接收数据输入端
P3.1——TXD:
串行口发送数据输出端
P3.2——INT0:
外部中断申请输入端0
P3.3——INT1:
外部中断申请输入端1
P3.4——T0:
外部计数脉冲输入端0
P3.5——T1:
外部计数脉冲输入端1
P3.6——WR:
写外设控制信号输出端
P3.7——RD:
读外设控制信号输出端
2.5时钟电路和复位电路
单片机的时钟信号用来提供单片机内各种微操作的时间基准;
复位操作则使单片机的片内电路初始化,使单片机从一种确定的状态开始运行。
2.5.1时钟电路
单片机的时钟信号通常有两种产生方式。
一种是内部时钟方式;
另一种是外部时钟方式。
如图2-6所示。
图2-6时钟方式图
内部时钟方式只要在单片机的XTAL1和XTAL2引脚外接晶振就构成了自激振荡器,并在单片机内部产生时钟脉冲信号。
外部时钟方式是把外部已有的时钟信号引入到单片机内,常用于多片单片机同时工作,已使各单片机同步。
单片机的时序单位:
晶振周期为时钟脉冲频率的倒数,为最小的时序单位,也称T状态;
时钟周期包含两个晶振周期,也称S状态;
完成一个基本操作所需要的时间称为机器周期,由6个时钟周期组成,即12个晶振周期;
指令的执行时间称为指令周期,通常含有1~4个机器周期。
2.5.2单片机的复位状态
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:
上电复位和手动复位。
上电复位要求接通电源后,自动实现复位操作。
手动复位是当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。
单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。
单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值,见下表(表中符号*为随机状态)。
第3章系统的硬件设计
3.1系统硬件总体设计
波形的产生是通过51单片机执行某一波形发生器程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。
图3-1总体设计图
3.2DAC0832的引脚及功能
DAC0832是双列直插式8位D/A转换器,完成数字量输入到模拟量输出的转换。
图3-2DAC0832引脚图
DAC0832结构:
D0~D7:
8位的数据输入端,D7为最高位,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
ILE:
数据锁存允许控制信号输入线,高电平有效;
CS:
片选信号输入线(选通数据锁存器),低电平有效;
WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ms)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ms)有效。
WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ms)有效。
由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换;
IOUT1:
模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当DAC寄存器中数据全为0时,输出电流为0;
IOUT2:
模拟电流输出端2,IOUT2与IOUT1的和为一个常数;
Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:
电源输入端,范围为(+5~+15)V;
VREF:
基准电压输入线,范围为(-10~+10)V;
AGND:
模拟信号地;
DGND:
数字信号地。
3.3系统硬件原理
51单片机的最小系统由振荡电路、电源电路、复位电路、EA及应用程序组成。
它有三种联接方式。
一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送入D/A转换电路。
第二种是单级缓冲型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。
第三种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换。
本电路仿真图如下:
图3-4系统仿真图
第4章系统的软件设计
系统软件由主程序和产生波形的子程序组成,软件设计主要是产生各种波形的子程序的编程。
通过编程可得到各种波形。
频率的改变可采用插入延时子程序的方法来实现。
4.1主程序流程图
图4-1主程序流程图
4.2波形的产生
4.2.1设计思路
利用中断,当2个开关中有任意一个闭合时,跳转至中断程序,在中断程序中判断是哪一个按键闭合,跳转至相应的程序,执行输出波形的操作,每输出一个点之后,判断按键是否断开,如果依旧闭合,则继续输出,如果已经断开,则结束中断程序。
K1键方波
图4-1主程序流程图
程序如下:
ORG0000H
LJMPMAIN
ORG0003H;
外部中断0
LJMPINT00
ORG0040H
MAIN:
MOVSP,60H;
更改堆栈指针,避免堆栈与工作寄存器区发生冲突
SETBIT0;
外部中断请求0为下降沿触发方式
SETBEA;
中断允许总开关打开
SETBEX0;
允许外部中断0中断
INT00:
CLREA;
关中断
PUSHPSW;
现场保护
PUSHACC
开中断
JNBP1.0,IR0;
如果K0键闭合,则跳转至IR0输出锯齿波
JNBP1.1,IR1;
如果K1键闭合,则跳转至IR1输出方波
INTIR:
POPAcc;
现场恢复
POPPSW
RETI
4.2.2锯齿波的产生
锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。
然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。
锯齿波发生子程序如下:
IR0:
MOVR0,#0FEH;
设置端口地址
MOVA,#00H
LOOP:
MOVX@R0,A;
写入
JBP1.0,INTIR;
如果k0键已经断开,则返回
INCA;
A加一
SJMPLOOP;
循环
LJMPINTIR;
返回
4.2.3方波的产生
方波的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。
方波发生子程序如下:
IR1:
MOVR0,#0FEH;
POSI:
MOVA,#00H;
给A赋值0x00
MOVX@R0,A;
LCALLDELAY;
延时
JBP1.3,INTIR;
如果k3键已经断开,则返回
NEGA:
MOVA,#0FFH;
给A赋值0xFF
SJMPPOSI;
跳转至POSI,继续下一个波形的输出
LJMPINTIR;
DELAY:
MOVR6,#10;
一秒的延时
DL1:
MOVR5,#400
DL2:
MOVR4,#123
DL3:
DJNZR4,DL3
DJNZR5,DL2
DJNZR6,DL1
RET
END
总结
本次的设计中利用AT89C51和DAC0832以及放大器完成电路的设计,用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终可以通过示波器观察。
在这次的软件设计中,程序设计采用的是汇编语言。
汇编语言具有速度快,可以直接对硬件进行操作的优点,它可以极好的发挥硬件的功能。
但是汇编语言也存在编写的代码非常难懂,不好维护,很容易产生bug,难于调试的缺点。
因此,在大型程序的设计中,多采用C语言进行程序编译。
C语言简洁高效,是最贴近硬件的高级编程语言,经过多年的发展,现在已成熟为专业水平的高级语言。
而且,现在单片机产品推出时纷纷配套了C语言编译器,应用广泛。
不过就本次课程设计来说,汇编语言还是适用的。
由于此次是第一次进行课设,有些软件以及芯片以前从未接触过,因此还不是很得心应手,所以在设计中遇到了很多问题及难点。
比如:
proteus软件以及wave6000的使用;
D/A转换器和锁存器的结构、功能等等,这些都需要自己去查找资料了解这些。
通过此次的课程设计,我进一步了解了波形发生器的原理,在实际动手操作过程中,使我接触了许多我以前没接触过的元件,提高了自己的动手能力。
而且在编程时重新温习了刚学不久的51单片机以及MATLAB语言,不仅让我学习了一些新的知识,而且对以前所学内容进行了巩固,让我懂得理论知识的重要性,没有理论的指导一切实际行动都是盲目的,且实际操作是所学的理论知识得到验证,更能加深对理论知识的理解,让我受益匪浅。
参考文献
[1]陈志旺,李亮。
51单片机快速上手。
机械工业出版社。
[2]薛定宇。
控制系统计算及辅助设计——MATLAB语言与应用(第2版)。
清华大学出版社。
[3]邹虹。
单片机波形发生器的设计。
重庆邮电学院学报。
[4]毅刚,彭喜元。
单片机原理与应用设计。
电子工业出版社。