综合性实验设计报告.docx
- 文档编号:23287738
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:31
- 大小:1.09MB
综合性实验设计报告.docx
《综合性实验设计报告.docx》由会员分享,可在线阅读,更多相关《综合性实验设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
综合性实验设计报告
综合性实验设计报告
课程名称:
综合性实验
实验名称:
四波形发生器设计
摘要
本系统是基于单片机的数字式低频信号发生器。
采用AT89C51单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(LM358)、按键和8位数码数码管等。
通过按键控制可产生方波、三角波、正弦波、锯齿波,同时用数码管指示其对应的频率与方波占空比及其产生模式。
其设计简单、性能好,可用于多种需要低频信号的场所,具有一定的实用性。
关键词:
89C51;DAC0832;LM358;8位数码管显示
目录
前言1
1设计的主要任务2
2系统总体设计3
3硬件设计4
3.1单片机最小系统4
3.2D/A转换器6
3.3LM358运放7
3.4键盘9
3.5数码显示器9
4软件设计10
4.1波形数据的生成10
4.2软件模块10
5系统调试13
5.1硬件调试13
5.2软件调试13
5.3整机调试13
6结果分析14
7总结体会16
附录1:
波形发生器实物图17
附录2:
元件清单18
附录3:
源程序19
参考文献24
致谢25
前言
单片机是一种集成电路芯片,采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机内存RAM、只读内存ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成一个小而完善的计算机系统。
波形发生器是一种数据信号发生器,在调试硬件时,常常需要加入一些信号,以观察电路工作是否正常。
用一般的信号发生器,不但笨重,而且只发一些简单的波形,不能满足需要。
例如用户要调试串口通信程序时,就要在计算机上写好一段程序,再用线连接计算机和用户实验板,如果不正常,不知道是通讯线问题还是程序有问题。
用E2000/L的波形发生器功能,就可以定义串口数据。
基于单片机的简明波形发生器是一种常用的信号源,它广泛地应用在电子技术实验、自动控制系统和其它科研领域。
目前,简易波形发生器的构成方法有很多。
本设计借助高性能单片机运算速度高,系统集成度强的优势,设计的这种信号发生器,比以前的数字式信号发生器有硬件简单,理解及实现起来较容易,该方案的设计思路较为清晰,且容易对频率和幅值进行控制等优点。
各种各样的信号是通信领域的重要组成部分,其中正弦波、三角波和方波等是较为常见的信号。
在科学研究及教学实验中常常需要这几种信号的发生装置。
为了实验、研究方便,研制一种灵活适用、功能齐全、使用方便的信号源是十分必要的。
本文介绍的是利用89C51单片机和数模转换器件DAC0832产生所需不同的信号的低频信号源,其信号幅度和频率都是可以按要求控制的。
文中简要介绍了DAC0832数模转换器的结构原理和使用方法,89C51的基础理念,以及与设计电路有关的各种芯片。
文中着重介绍了如何利用单片机控制D/A转换器产生上述信号的硬件电路和软件编程。
信号频率幅度也按要求可调。
本次关于产生不同低频信号的信号源的设计方案,不仅在理念和实战上都能满足实验的要求,而且具有很强的可行性。
该信号源的特点是:
体积小、价格低廉、性能稳定、实现方便、功能齐全。
1设计的主要任务
课题利用AT89S51产生一个可调频和调幅的三角波,方波,锯齿波和正弦波。
同时此电路配备了动态输入和显示单元。
可以很好的人机对话。
设计简易波形发生器,要求如下:
1.设计四个按键,分别实现模式选择、频率及对占空比的控制
2.按键1实现对三角波、方波、锯齿波和正弦波4种波形中切换1—4如此循环
3.按键2实现频率的增调制
4.按键3实现频率的减调制
5.按键4实现方波的占空比调制,由0—50每按一次自增1,如此循环(50为满占空比)
通过本课题的设计,不但能够掌握波形发生器的原理和实现方法,也对单片机的应用系统的一般结构和开发流程有一个初步体验,为下学期开展毕业设计及将来从事相关专业工作打下良好的基础。
2
系统总体设计
根据系统设计的要求,系统整体组成结构如图1-1所示。
系统的控制核心采用89C51单片机,该单片机具有加密性强、超强抗干扰、超低功耗和在系统可编程等特点,因此满足了本系统开发的需要。
图1-1系统设计总框图
89C51主要任务是控制数据输出,由DAC0832将数据转换成正比的模拟信号,并且在数码管上显示当前波形编号和工作参数。
通过按键可选择不同的波形,并且可以动态设置当前波形的工作参数。
DAC0832支持双缓冲、单缓冲和直通三种工作方式。
由于89C51内部已有足够的内存和I/O接口资源,每个口线都可作为一般I/O口使用,且输出都带锁存功能,因此,与DAC0832连接时,完全可以采用直通方式。
但DAC0832为电流型输出,故需外接一个运算放大器LM358转换为电压输出。
根据波形发生器需要显示的内容,应用了8位LED数码管,采用动态方式显示。
按键采用每一个按键占一根口线的独立结构。
3
硬件设计
本部分详细介绍了基于单片机89C51的信号发生器的硬件设计。
硬件系统所需要完成的功能是将按钮开关信息通过P3口输送到单片机内部进行波形的选择,再由D/A转换、放大器、脉冲信号及显示电路五部分组成。
其硬件设计如图2-1所示。
图2-1硬件设计总电路图
3.1单片机最小系统
标准的51单片机为4K程序空间,128字节的RAM,4个I/O口,5个中断,2个定时计数器,12个时钟周期执行一条基本指令,最长的除法为48个周期。
51基本结构框图如图2-2。
图2-289C51单片机结构框图
89C51芯片内部有一个高增益反相放大器,用于构成振荡器。
反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。
电容器C1和C2通常取30pF左右,可稳定频率并对振荡频率有微调作用。
振荡脉冲频率范围为0至24MHz。
晶体振荡器的频率为12MHz,振荡信号从XTAL2输入到片内的时钟发生器上,如图2-3。
图2-389C51的片内振荡器及时钟发生器
89C51有4个I/O口,分别是P0、P1、P2、P3,且都可做双向I/O口,但P3引脚有第二功能,如图2-4所示。
图2-4P3口引脚第二功能
3.2D/A转换器
DAC0832是CMOS工艺,双列直插式20引脚。
VCC电源可以在5-15V内变化。
典型使用时用15V电源。
AGND为模拟量地线,DGND为数字量地线,使用时,这两个接地端应始终连在一起。
参考电压VREF接外部的标准电源,VREF一般可在+10V到—10V范围内选用。
其结构如图2-5所示。
图2-5DAC0832结构图
DAC0832输出是与数字量成比例的电流,单片机通过P1口锁存输出的数据转换为DAC0832的模拟电流输出,并通过LM358放大,转换为电压输出。
Vref为参考电压输入,Rfb为运算放大器的回馈电阻,引脚Rfb则是这个回馈电阻瑞,接到运算放大器的输出端。
DAC0832有两个电流输出端:
loutl为DAC电流输出1,当DAC寄存器中为全1时,输出电流最大,当DAC寄存器中为全0时,输出电流为0。
lout2为DAC电流输出2,Iout2为一常数与Ioutl之差,即loutl+out2=常数.在实际使用时,总是将电流转为电压来使用,即将Ioutl和lout2加到一个运算放大器的输入。
DAC0832引角如图2-6所示。
图2-6DAC0832引脚
3.3LM358运放
LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。
它的使用范围包括传感放大器、直流增益模块和其它所有可用单电源供电的使用运算放大器的场合。
引脚如图2-7所示。
图2-8为89C51单片机最小系统及其与DAC0832和LM358的接口电路。
图2-7LM358引脚
图2-8单片机·DAC0832·LM358接口部分
3.4
键盘
K1、K2、K3、K4分别与P3.0、P3.1、P3.2、P3.3相连。
K4为模式控制键,控制4种波形输出的转换;K2、K3分别负责频率输出的加与减;K1控制方波的占空比0-50(50为满占空比)。
键盘接口如图2-9所示。
图2-9键盘部分
3.5数码显示器
数码管采用共阳极结构,由单片机P2口输出位码经S8550三极管驱动后送到每个数码管的公共阳极上,而P0口输出段码直接送到并联在一起的所有数码管的相应段码上。
其动态显示电路原理图如图2-10所示。
图2-10数码管显示器部分
4
软件设计
系统设计包括程序系统的基本流程、程序系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为程序的详细设计提供基础。
4.1波形数据的生成
四种波形的实现:
方波:
由89C51对P1口不断交替输出00H和0FFH,由D/A0832转换成模拟量实现;三角波:
由89C51对P1口输出00H,在每一个时钟到来时对输出值加一,当加至0FF时,继而在时钟到来临时减一,这样往复执行,最终输出近似的三角波;
正弦波:
将00H到0FFH按照正弦波波形折变化趋势分成50个间断的点,形成一个正弦波取值表,用89C51在第一个时钟到来时取表值通过P1口送至0832转换输出;锯齿波:
与三角波相似,当加至0FFH时,再由00H开始加,这弱往复执行,最终得到连续的锯齿波。
频率调节:
利用中断方式,控制取值的中断时间还实现对频率的调节。
幅值调节:
根据对幅值的变化要求,利用乘法实现对幅值的调节。
如:
输出值*A,A即为调节指数。
4.2软件模块
主控模块:
主控模块上电复位即开始运行,其任务包括系统初始化、波形资料的输出、波形参数的显示以及按键控制下的波形参数设置。
图4-1为主控模块的流程图。
主控模块总是表现为循环结构。
当没有按键按下时,循环执行波形输出和参数显示操作,有键按下时,根据按键的不同执行相应的设置操作,设置完参数以后又开始上述循环。
显示模块:
图4-2为显示模块的流程图。
数码管显示模式为:
占空比—频率—波形序号。
采用到8个共阳数码管进行动态显示。
数码管动态扫描显示利用了人眼的视觉暂留效应,每秒种扫描数码管显示器50-100次,每次扫描过程中每一位数码管轮流将显示缓冲区相应单元的内容显示1ms。
不集结系统处于何种状态,动态显示模块必须被频繁地调用,否则将出现闪烁或黑屏现象。
常用的方法包括:
在所有循环结构中不断调用;或是在定时中断中自动进行刷新处理。
显示缓冲区送入要显示的数值就可以了,查表求段码和扫描输出由显示模块版主完成。
图4-1主控模块流程图图
图4-2显示模块流程图
按键扫描模块:
图4-3为键盘扫描模块的流程图。
首先判断有无键按下,没有的话,返回,如果有,再逐行检查,确定键值后返回。
键盘扫描程序很重要的一点是进行消抖处理,可以通过发现有键按下是先延时10ms再判断的方法来实现。
这里是通过调用显示函数来进行延时。
这样不但进行了消抖还增加了显示函数的次数,使其显示得更加稳定。
参数设置模块:
波形参数扬每种波形的编号、周期(频率),以及矩形波的占空比和自定义波形的每个数据值。
需要注意的是,实际编程时,对每个参数的有效范围要有限定,例如,周期的有效范围是100us-1s,占空比为1%-99%,而且在当前波形为矩形波时才允许设置占空比。
图4-4仅给出了调整频率、占空比及波形转换的流程图。
图4-3按键扫描模块流程图
图4-4参数设置模块流程图
5系统调试
为了准确发现系统存在的问题,需要进行系统调试,调试的顺序按照先硬件后软件先局部后整体的顺序来完成。
5.1硬件调试
首先介绍系统的硬件安装过程及针对各单元模块的硬件电路调试,检验其是否符合设计初衷,能否达到相应指标。
硬件调试主要包括电源系统的调试、单片机小系统的调试、D/A转换电路的调试、示波器的调试几部分。
5.2软件调试
本部分主要介绍89C51的软件调试过程,检验其是否符合设计初衷,能否达到相应的指标。
检验编写的程序能否发出相应的波形,根据按下不同的按键,对应的示波器的显示波形是否随之相应变化。
最后是主程序的调试,通过假定输入一定的初值看看程序运行是否正常。
5.3整机调试
当软件与硬件都调试无误之后,就可以整机调试,整机调试也就是整个系统设计的功能测试。
6
结果分析
程序经keil4编译成功通过,如下图所示:
Proteus7模拟仿真结果如图6-1。
图6-1四种波形的模拟真图
硬件系统测试成功,调试结果如图6-2.数码管显示模式为:
占空比-频率-模式。
模式1.三角波.频率20Hz模式2.方波.占空比25(50%)模式3三角波.频率20Hz
频率为50Hz的三角波占空比48(96%).频率20Hz的方波脉冲波
模式4.正弦波.频率20Hz频率为5Hz的正弦波频率为50Hz的正弦波
图6-2实物测试图
7
总结体会
这次综合性实验,让我对所学课程的理论知识得以深化和提高,懂得了实践的重要性,使我更好得掌握了单片机应用系统的软硬件设计过程。
在此过程中,我的分析能力和思维能力有了很大提高。
学会如何更好的自我寻求解决问题的办法,同时培养了我撰写论文的能力。
设计过程中,我遇到很多问题,认识到了自己的不足。
对于单片机而言,其电路的设计与编写还是比较简单的。
主要是程序的优化问题。
如何优化一个程序,是我在此次实验中所得的最大收获。
因此,可以说单片机的设计是软件与硬件的结合。
如何让程序得以在硬件中更好的实现,还需要对单片机的结构原理有比较深入的了解,此间有着紧密的联系。
设计一个可靠的程序与电路,需要耐心,设计一个成功优秀的程序与电路更需要耐心,还要有有坚持的毅力。
同时,我还学会了高效率的收集资料、查阅相关书籍、运用工具书、利用网络查找数据也是我在此次设计中的一大收获。
我发现所查的数据在实际应用中还是有一定差距的。
各种数据需要自己去整理,借鉴、查阅数据中的信息。
此次综合性实验,给我充分发挥的能力,开创的思维,让我有了更多的创新空间。
在每次自己所想的理论在实践中得到证实的时刻,心情是无比激动的,从而激发了我的学习兴趣与积极性。
附录1:
硬件设计总电路图
附录2:
波形发生器实物图
简易实物图:
开发板连接实物图(本实验即用开发板测试,其电路图与本实验所述一致):
附录2:
元件清单
序号
标号
参数
数量
封装
1
电阻
1K
8
AXIAL-0.4
2
电阻
10K
10
AXIAL-0.4
3
电阻
5.1K
8
AXIAL-0.4
4
排阻
5.1K
1
SIP-9
5
电容
10uF
1
RB.1/.2
6
电容
22P
2
RAD0.1
7
晶振
12M
1
XTAL-1
8
单片机
AT89C51
1
DIP40
9
DA转换器
DAC0832
1
DIP20
10
ISP界面
ISPBUS
1
HEARD_5*2
11
共阳数码管
LED4
2
LED4BIT
12
运放
LM358
1
DIP8
13
三极管
S8550
8
TO90
14
按键
SW-PB
5
KEY
附录3:
源程序
#include
#defineucharunsignedchar
#defineuintunsignedchar
#definedatP1
#defineweP2
#defineduP0
sbitbeep=P3^7;
sbitP11=P1^1;//该端口与蜂鸣器相关连,从声音上可大概感知波形频率
sbitk1=P3^0;
sbitk2=P3^1;
sbitk3=P3^2;
sbitk4=P3^3;
uintth,tl;
ucharirtime=0,cuttime=10;//irtime为接收中断次数,cuttime取点周期a周期参数
uchara=0,b=25,z=4,c=25;//b占空比,z波形:
1锯齿,2方波,3三角波,4正弦波
smg_du[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xbf};//数码管段码:
0123456789ABCDEF-
ucharsmg_we[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//数码管位码
uchardisp[8];
ucharcodetable[]={0x80,0x90,0x9f,0xaf,0xbd,0xcb,0xd7,0xe2,0xec,0xf3,
0xf9,0xfd,0xff,0xff,0xfd,0xf9,0xf3,0xec,0xe2,0xd7,
0xcb,0xbd,0xaf,0xa0,0x90,0x80,0x70,0x60,0x51,0x42,
0x34,0x28,0x1d,0x14,0x0c,0x06,0x02,0x00,0x00,0x02,
0x06,0x0c,0x13,0x1d,0x28,0x34,0x42,0x50,0x5f,0x6f,};
voiddelay(uintk)
{
uintj;
for(;k>0;k--)
for(j=0;j<74;j++);
}
voidkey1(void)
{
z++;
if(z==5)z=1;
a=0;
}
voidkey2(void)
{
cuttime++;
}
voidkey3(void)
{
cuttime--;
if(cuttime==0)
cuttime=0;
}
voidkey4(void)
{
b++;
if(b==51)
b=0;
}
voiddiswork()
{
intt,f;
t=cuttime*50;
f=(int)(10000/t);
disp[1]=b%10;
disp[0]=b/10;
disp[2]=17;
disp[3]=f/100;
disp[4]=f%100/10;
disp[5]=f%10;
disp[6]=17;
disp[7]=z;
}
voiddisplay()//显示模块
{
uchari;
diswork();
for(i=0;i<8;i++)
{
du=smg_du[disp[i]];
we=smg_we[i];
delay(5);
}
}
voidjudge(void)//键盘扫描程序
{
ucharkey;
P3=0xff;
key=P3;
if(key!
=0xff)
{
display();
display();
display();
display();
key=P3;
if(key!
=0xff)
{
display();
display();
if(k1==0)key1();//changemode
else
if(k2==0)key2();//addfreconcy
else
if(k3==0)key3();//subfreconcy
else
if(k4==0)key4();//changeb
}
}
}
voidboxin()
{
if(z==1)//锯齿
{
dat=a*4;
a++;
}
elseif(z==2)//方波
{
if(a<=b)
dat=0xff;
else
dat=0x00;
a++;
}
elseif(z==3)//三角波
{
if(a<25)
dat=a*8;
else
{
dat=c*8;
c--;
}
a++;
}
elseif(z==4)//正弦波
{
dat=table[a];
a++;
}
}
voidtime0(void)interrupt1
{
irtime++;
if(irtime>=cuttime)
{
boxin();
irtime=0;
beep=P11;
if(a>=50)
{
a=0;//周期参数
c=25;//三角波参数
}
}
}
voidstart()//中断初始化
{
TMOD=0x02;//运用定时方式二的自动重载方式
TH0=156;
TL0=156;
EA=1;//开总中断
ET0=1;//允许定时器T0中断
TR0=1;//起动定时器开始工作
}
voidmain()
{
start();
P1=0xff;
while
(1)
{display();
judge();
}
}
参考文献
[1]马争.微电脑与单片机解题指南与实验指导[M].北京:
高等教育出版社,2010
[2]李全利.单片机原理及接口技术[M].北京:
高等教育出版社,2009
[3]刘国钧.陈绍业.王凤翥.图书馆目录[M].北京:
高等教育出版社,1957
[4]刘润华.刘立山.模拟电子技术[M].山东:
石油大学出版社,2003
[5]彭介华.电子技术课程设计指导[M].北京:
高等教育出版社,1997
致谢
感谢我的老师张志福老师,感谢他在本次课程设计中给予我的关心和帮助。
谢谢他的耐心的教导与支持。
正是这些细微的言语、关怀让我努力完成了此次课程设计。
老师专业的知识与热忱真挚的工作态度,耐心、真诚的待人之风,深深感染了我。
他在此次设计中教会了我很我方法,给予了我很多启发。
在此,我真诚的向我的老师说声谢谢。
我也感谢大学差不多四年的期间里,所有指导过我的老师,他们教授给我的各方面知识让我在设计中能更好的运用和发挥,感谢他们对我的无私的教诲与帮助。
感谢我大学的好友,感谢你们的帮助,感谢你让我的大学更加的美好与充实。
在接下来的日子里,我会更努力地学习,好好的充实自己,让自己为将来做好更充分的准备。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合性 实验设计 报告