波形发生器课程设计说明书 精品Word文档下载推荐.docx
《波形发生器课程设计说明书 精品Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《波形发生器课程设计说明书 精品Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
孙成立
系(部)主任
王忠华
摘要
本设计是基于AT89C51单片机的数字式低频信号发生器。
采用AT89C51单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(LM324)、按键等。
通过按键控制可产生方波、三角波、正弦波等。
其设计简单、性能优好,可用于多种需要低频信号的场所,具有一定的实用性。
各种各样的信号是通信领域的重要组成部分,其中正弦波、三角波和方波等是较为常见的信号。
在科学研究及教学实验中常常需要这几种信号的发生装置。
为了实验、研究方便,研制一种灵活适用、功能齐全、使用方便的信号源是十分必要的。
本设计是利用AT89C51单片机和数模转换器件DAC0832产生所需不同信号的低频信号源,其信号幅度和频率都是可以按要求控制的。
设计简要介绍了DAC0832数模转换器的结构原理和使用方法,AT89C51的基础理论,以及与设计电路有关的各种芯片。
设计中着重介绍了如何利用单片机控制D/A转换器产生上述信号的硬件电路和软件编程。
信号频率幅度也按要求可调。
本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求,而且具有很强的可行性。
该信号源的特点是:
体积小、价格低廉、性能稳定、实现方便、功能齐全。
关键词:
AT89C51DAC0832LM324
目录
第1章实验要求及设计思路5
1.1设计内容及要求5
1.2设计方案5
第二章硬件设计及分析6
2.1MCS-51单片机的内部结构6
2.2D/A转换电路6
2.3键盘输入电路8
2.4电压放大电路8
第三章系统软件设计10
3.1软件设计概述10
3.2主程序流程10
3.3波形的选择11
第四章系统仿真与原理图15
4.1实验仿真电路图15
4.2实验仿真波形图15
第五章实验调试和测试结果与分析18
5.1硬件调试18
5.2软件调试18
5.3测试结果18
第六章结论与心得19
参考文献20
附录1元件清单21
附录2程序清单及注释22
第一章实验要求及设计思路
1.1设计内容及要求
设计一个波形发生器,要求如下:
1.能产生正弦波、方波、三角波;
2.输出波形的范围:
3.输出波形的幅度范围:
1.2设计方案
根据设计需要,可采用单片机程序产生3种波形,并通过一片D/A转换器输出。
另外,采用一个滑动变阻器来改变参考电压,从而改变输出波形幅值,见图1.1所示。
通过按钮或开关来设定波形的类型、频率。
图1.1波形发生器原理框图
第二章
硬件电路方案设计
2.1MCS-51单片机的内部结构
2.1.1内部结构概述
典型的MCS-51单片机芯片集成了以下几个基本组成部分。
1一个8位的CPU
2128B或256B单元内数据存储器(RAM)
34KB或8KB片内程序存储器(ROM或EPROM)
44个8位并行I/O接口P0~P3。
5两个定时/计数器。
65个中断源的中断管理控制系统。
7一个全双工串行I/O口UART(通用异步接收、发送器)
8一个片内振荡器和时钟产生电路。
图3.2单片机引脚
2.2D/A转换电路
功能:
将波形样值的编码转换成模拟值,完成波形输出。
DAC0832是一个具有两个输入数据寄存器的8位DAC。
目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。
另一类芯片内部没有数据寄存器,输出信号随数据输入线的状态变化而变化,因此不能直接与微型计算机接口,必须通过并行接口与微型计算机接口。
DAC0832是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换,故不需要外加电路。
单片机向0832发送数字编码,产生不同的输出。
先利用采样定理对各波形进行抽样,然后把各采样值进行编码,的到的数字量存入各个波形表,执行程序时通过查表方法依次取出,经过D/A转换后输出就可以得到波形。
假如N个点构成波形的一个周期,则0832输出N个样值点后,样值点形成运动轨迹,即一个周期。
重复输出N个点,成为第二个周期。
利用单片机的晶振控制输出周期的速度,也就是控制了输出的波形的频率。
这样就控制了输
出的波形及其幅值和频率。
DAC0832结构:
D0~D7:
8位数据输入线,TTL电平,有效时间应大于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值之和为一常数;
Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:
电源输入端,Vcc的范围为+5V~+15V;
VREF:
基准电压输入线,VREF的范围为-10V~+10V;
AGND:
模拟信号地
DGND:
数字信号地
DAC0832的工作方式:
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:
直通方式、单缓冲方式和双缓冲方式。
2.3键盘输入电路
键盘在单片机应用系统中能实现向单片机输入数据、传送命令等功能,是人工干预单片机的主要手段。
在键闭合测试,检查是否有键闭合去抖动。
当测试到有键闭合后,需进行去抖动处理。
由于按键闭合时的机械弹性作用,按键闭合时不会马上稳定接通,按键断开时也不会马上断开,由此在按键闭合与断开的瞬间,会出现电压抖动。
键盘抖动的时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误,因而必须设法消除抖动的不良后果。
通过去抖动处理,可以得到按键闭合与断开的稳定状态。
去抖动的方法有硬件与软件两种:
硬件方法是加去抖动电路,如可通过RS触发器实现硬件去抖动;
软件方法是在第一次检测到键盘按下后,执行一段10ms的延迟子程序后再确认该键是否确实按下,躲过抖动,待信号稳定之后,再进行键扫描。
通常多采用软件方法。
按照键盘与单片机的连接方式可分为独立式键盘与矩阵式键盘。
独立式键盘相互独立,每个按键占用一根I/O口线,每根I/O口在线的按键工作状态不会影响其它按键的工作状态。
这种按键软件程序简单,但占用I/O口线较多(一根口线只能接一个键),适用于键盘应用数量较少的系统中,由于本系统设置的按键较少,因此采用的是独立式键盘。
2.4电压放大电路
DAC0832的输出电压比较小。
因此,要将该电压信号在示波器中显示出来,需要有一个放大器将此电信号放大到所需范围之内。
由于放大电路的增益是可调的,故运用运算放大电路能将电压信号放大到所要求的范围。
第三章系统软件设计
3.1软件设计概述
系统软件由主程序和产生波形的子程序组成,软件设计主要是产生各种波形的子程序的编程,通过编程可得到各种波形。
周期的改变可采用插入延时子程序的方法来实现。
软件原理流程图如下。
图3.1软件原理流程框图
3.2主程序流程
系统软件由主程序和产生波形的子程序组成,软件设计重点是设计各种波形的子程序的程序,通过编程可得到各种波形。
波形周期的改变可采用插入延时子程序的方法来实现。
主程序开始后通过读取按钮状态,判别是哪种波形需求,然后调用相应的子程序,输出相应的波形。
利用8位D/A转换器DAC0832,可以将8位数字量转换成模拟量输出。
数字量输入的范围为0~255,对应的模拟量输出的范围在VREF-到VREF+之间。
根据这一特性,可以利用单片机的并行口输出的数字量,产生常用的波形。
3.3波形的选择
利用8位D/A转换器DAC0808,可以将8位数字量转换成模拟量输出。
单片机是通过用户键盘输入,选择希望输出的信号波形。
本系统中,对用户输入的功能键对应的波形如下规定:
1:
得到的输出波形为正弦波。
2:
得到的输出波形为方波。
3:
得到的输出波形为三角波。
利用单片机控制实现波形输出的程序流程图如图所示
图3.3按键波形选择程序流程图
3.3.1三角波流程
三角波产生是通过P0口将00H送入寄存器A中,DAC0832输出A中的内容,通过A中数值的加1递升,同时延时,当A中的内容为0FF时,A中的内容减1递减,从而循环产生三角波。
程序流程图如图4.2所示:
图3.4程序流程图
3.3.2方波流程
方波产生是通过P0口将00H输出给DAC0832,输出对应模拟量,然后读取P2口的状态,取反后作为延时常量,延时时间到,将FFH输出时,同样输出对应模拟量,再延时,从而得到方波。
。
流程图如图3.5所示:
图3.5方波流程图
3.3.3正弦波流程
正弦波波形设计通过查表指令得出。
流程图如3.6所示
图3.6正弦波程序流程图
第四章系统仿真与原理图
4.1实验原理仿真图
图4.1系统仿真图
4.2实验波形仿真图
先对汇编程序进行编译,生成目标代码文件'
然后将目标文件加载到单片机中.单击"
运行"
就是"
全速运行"
软件中是"
Play"
运行按钮,通过模拟示波器可以看到以下波形图。
图4.1方波波形图
图4.2三角波波形
图4.3正弦波波形
第五章实验调试和测试结果与分析
5.1硬件调试
整个硬件调试过程基本顺利,由于采用了分单元模块制作,各个单元电路工作稳定,给调试工作带来很大的方便。
放大模块部分在实物模拟时,出现发送信号不稳定、跳变的问题,经过仔细的检查,电路连线路劲和线路连接问题,最终发现电路连接是出现连接未牢固的问题,从而得以解决。
5.2软件调试
虽然对于单片机的变成较熟悉,但是还存在一些问题,主要有以下问题:
(1)在写调幅值的程序时,按照自己的想法写好,下载带单片机中,发现,每按一次键,幅值一次性增大到5V或者一次性减为0V,经过对程序的分析得知,当按下键时,程序循环很多次,为次添加一条键按下时死循环的语句使每次按下键幅值加一次后的只保持住,从而解决了问题。
(2)当幅值和显示调试成功后,写调频程序时,在硬件电路中调试时发现,达不到实验要求,经过努力,最后终于解决了这个问题。
(3)由于AT89C51本身性能的问题,而且硬件方面又没有用倍频电路,产生的三角波和方波的频率没有达到1KHz,但是方波达到了1KHz。
5.3测试结果
各项指标均达到要求。
测试数据如下:
1)、产生正弦波、方波、三角波基本实现。
2)、三种波形的频率在100HZ–1KHZ可调。
3)、输出波形的幅度范围:
0-5VPP且可调。
第六章结论与心得
经过将近三周的单片机课程设计,完成了波形发生器的设计,基本达到设计要求。
在本次设计的过程中,笔者发现很多的问题,。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
要设计一个成功的电路,必须要有耐心,要有坚持的毅力。
在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,仔细比较分析其原理以及可行的原因。
这就要求对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。
完成这次设计后,笔者在书本理论知识的基础上又有了更深层次的理解。
同时在本次设计的过程中,学会了高效率的查阅资料、运用工具书、利用网络查找资料。
在同学们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。
偶而还会遇到错误的资料现象,这就要求同学们应更加注重实践环节。
参考文献
[1]尹建华、张惠群.微型计算机原理与接口技术.第2版[M].北京:
高等教育出版社,2008
[2]张先庭.单片机原理丶接口与C51应用程序设计.第1版[M].北京:
国防工业出版社,2011-1
[3]孙涵芳.MCS-51系列单片机原理及应用[M].北京航空航天大学出版社.1996-4
[4]夏继强.单片机实验与实践教程.北京:
北京航空航天大学出版社,2001
[5]陈黎娟.单片机技术实践教程.南昌:
南昌航空大学出版社,2009-3
附录一元件清单
元件序号
元件名称
型号
数量
1
芯片
AT89C51
1块
2
滑动变阻器
5K
1个
3
LM324
2个
4
DAC0832
5
按键开关
5个
附录二程序清单及注释
#include<
reg51.h>
#include<
absacc.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
uintd1,d2,d3;
uints;
sbits1=P1^0;
//控制正弦波
sbits2=P1^1;
//控制方波
sbits3=P1^2;
//控制三角波
sbits4=P1^3;
//频率加
sbits5=P1^4;
//频率减
ucharcodesintab[128]=
{
0x7F,0x85,0x8B,0x92,0x98,0x9E,0xA4,0xAA,0xB0,0xB6,0xBB,0xC1,0xC6,0xCB,0xD0,0xD5
0xD9,0xDD,0xE2,0xE5,0xE9,0xEC,0xEF,0xF2,0xF5,0xF7,0xF9,0xFB,0xFC,0xFD,0xFE,0xFE
0xFE,0xFE,0xFE,0xFD,0xFC,0xFB,0xF9,0xF7,0xF5,0xF2,0xEF,0xEC,0xE9,0xE5,0xE2,0xDD
0xD9,0xD5,0xD0,0xCB,0xC6,0xC1,0xBB,0xB6,0xB0,0xAA,0xA4,0x9E,0x98,0x92,0x8B,0x85
0x7F,0x79,0x73,0x6C,0x66,0x60,0x5A,0x54,0x4E,0x48,0x43,0x3D,0x38,0x33,0x2E,0x29
0x25,0x21,0x1C,0x19,0x15,0x12,0x0F,0x0C,0x09,0x07,0x05,0x03,0x02,0x01,0x00,0x00
0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x07,0x09,0x0C,0x0F,0x12,0x15,0x19,0x1C,0x21
0x25,0x29,0x2E,0x33,0x38,0x3D,0x43,0x48,0x4E,0x54,0x5A,0x60,0x66,0x6C,0x73,0x79
};
//正弦波数据表采样128个点
voiddelay(uchark)
ucharj;
while((k--)!
=0)
{
for(j=0;
j<
100;
j++);
//{;
}
}
}//延时程序
voiddelay1(uchari)
i;
j++)
{_nop_();
voidzhengxian()
uchari;
for(i=0;
i<
128;
i++)
P2=sintab[i];
delay1(d3);
}//正弦波
voidfangbo()
P2=0xff;
delay(d1+d3);
P2=0;
delay(d2+d3);
}//方波
voidsanjiao()
uchartemp;
for(temp=0;
temp<
255;
temp++)
P2=temp;
for(temp=255;
temp>
0;
temp--)
}//三角波
voidboxingkey()
if(s1==0)
s=1;
elseif(s2==0)
s=2;
elseif(s3==0)
s=3;
elseif(s4==0)
delay(10);
//延时消抖
if(s4==0)
while(!
s4);
d3--;
elseif(s5==0)
if(s5==0)
s5);
d3++;
voidmain()
d1=10;
d2=10;
d3=5;
P1=0xff;
while
(1)
boxingkey();
switch(s)
case1:
zhengxian();
break;
//转换为正弦波
case2:
fangbo();
break;
//转换为方波
case3:
sanjiao();
//转换为三角波