波形发生器设计Word下载.docx
《波形发生器设计Word下载.docx》由会员分享,可在线阅读,更多相关《波形发生器设计Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
3.程序流程图
程序的主流程图如下:
主流程图
4.课程设计报告内容
4.1波形图思路
在8051单片机的控制下,产生三角波,锯齿波,方波,梯形波以及正弦波,各种波形所采用的硬件接口都是一样的,由于控制程序不同而产生不同的波形
4.2波形图设计过程
将该任务分成六个模块进行设计,分别为:
锯齿波模块,三角波模块,方波模块,正弦波模块,,梯形波模块,将所有模块拼合成总体模块。
我们所涉及的电路:
4.2.1DAC0832
DAC0832是8位分辨率D/A转换集成芯片,与处理器完全兼容,具有价格低廉,接口简单,转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由八位输入锁存器、八位DAC寄存器、八位D/A转换电路以及转换电路构成。
DAC0832输出是电流型的,但实际应用中往往需要电压输出信号,所以还必须一个外接的运算放大器转换称电压。
其引脚如下图1所示:
图1:
DAC0832引脚图
•D0~D7:
八位数据输入线
•ILE:
数据锁存允许控制信号输入线,高电平有效
•CS:
片选信号输入线,低电平有效
•WR1:
输入寄存器的写选通信号,低电平有效
•XFER:
数据传送控制信号输入线,低电平有效
•WR2:
DAC寄存器写选通输入线,低电平有效
•IOUT1:
电流输出线。
当输入全为1时IOUT1最大
•IOUT2:
其值与OUT1之和为一常数
•RFB:
反馈信号输入线,芯片内部有反馈电阻
•Vcc:
电源输入线(+5~+15V)
•Vref:
基准电压输入线(-10~+10V)
•AGND:
模拟地,模拟信号和基准电源的查考地
•DGND:
数字地,两种地线在基准电源共处比较好
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:
直通方式、单缓冲方式和双缓冲方式,可用软件指令控制这5个控制端:
ILE、CS、WR1、WR2、XFER。
•直通工作方式:
5个控制端均有效,直接D/A转换
•单缓冲工作方式:
5个控制端一次选通,即两个输入寄存器中任意一个处于直通方式,另一个工作于受控方式
•双缓冲工作方式:
5个控制端分二次选通。
即两个锁存器都处于受控状态
本次设计我们让DAC0832工作于单缓冲器方式,它的ILE接+5V。
/CS和/XFER相连后由8051的P2.7控制,/WR1和/WR2相连后由8051的/WR控制DAC0832的地址为7FFFH,工作于单缓冲器方式,执行一次对DAC0832的写入操作即可完成一次D/A转换。
4.2.274LS47芯片
74LS47是BCD-7段数码管译码器/驱动器,74LS47的功能用于将BCD码转化成数码块中的数字,通过它的解码,可以直接把数字转换为数码管的显示数字,从而简化了程序,节约了单片机的I/O开销。
因而是一个很好的芯片。
引脚图2如下:
图2:
74LS47引脚图
•D、C、B、A:
BCD码输入引脚
•a、b、c、d、e、f、g:
7段LED数码管的输出引脚
•LT:
测试引脚,当本引脚输入低电平时,所连接的7段数码管全亮。
正常情况下,应输入高电平
•RBI:
涟波淹没输入引脚。
•BI/RBO:
淹没输入或涟波淹没输出引脚。
正常显示下,应输入高电平或空接。
若本引脚输入低电平,且D、C、B、A引脚输入为0,则该位数不显示,这项功能用于消除前置0或者消除尾端0.
4.2.37段数码管
7段数码管一般有8个发光二极管组成,其中有7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。
当发光二极管导通时,相应的一个点或一个笔画发光。
控制相应的二极管导通,就能显示各种字符。
发光二极管的阳极连在一起称为共阳极数码管,阴极连在一起称为共阴极数码管。
图3:
七段数码管引脚图
4.3波型分析及流程图
4.3.1锯齿波模块
8051单片机的累加器A从0开始循环增量,每增量一次向DAC0832写入一个数据,得到一个输出电压,这样可以获得一个正向的阶梯波。
DAC0832的分辨率为8位,如其满足的电压为5V,则一个阶梯的幅度为
5V/(2*2*2*2*2*2*2*2)=19.5mV
程序如下:
LOOP1:
;
正向锯齿波
MOVR1,#02H;
1us
LCALLDISP;
2us
L11:
MOVR3,#00H;
L12:
MOVA,R3;
MOVX@DPTR,A;
INCR3;
CJNER3,#0FFH,L12;
JBP2.1,STR;
AJMPL11;
程序从标号LOOP1处执行到指令到执行AJMPLOOP共需14个机器周期,采用12MHZ的晶振,一个机器周期为1us,则每个阶梯的时间为t=14*1us,一个正向阶梯波的总周期的总时间为T=255*t=3570us,即此阶梯波的重复频率为F=1/3570=280HZ.由此可见,由软件来产生波形,其频率是较低的。
要想提高频率,可通过改进程序,减少执行时间,但这种方法是有限的,根本的办法还得靠改进路.
图4锯齿波
由图4可见,由于每一个阶梯波较小,总体看起来是一个锯齿波.如果要改变这种波形的周期,可采用延时的方法。
程序若如下:
DELAY:
MOVR6,#0AH;
延时1ms子程序
DEL2:
MOVR7,#32H
DEL1:
DJNZR7,DEL1
DJNZR6,DEL2
RET
在延时子程序中改变延时时间的长短,即可改变输出波形的周期。
锯齿波流程图:
锯齿波仿真波形:
4.3.2三角波模块
在以上这个正向的锯齿波的前提下,若要获得负向的锯齿波只需将以上程序中的指令INCA换成指令DECA即可,如果想获得任意起始电压和终止电压的波形,则需先确定起始电压和终止电压所对应的数字。
程序中首先从起始电压对应的数字量开始输出,当达到终止电压对应的数字量时返回,如此反复。
将正向锯齿波与负向锯齿波组合起来就可以获得三角波,
LOOP2:
三角波
MOVR1,#03H
LCALLDISP
L21:
MOVR3,#00H
L22:
MOVA,R3
MOVX@DPTR,A
INCR3
CJNER3,#0FFH,L22
L23:
DECR3
CJNER3,#00H,L23
JBP2.2,STR
AJMPL21
三角波仿真波形:
三角波实验图
三角波程序流程图:
4.3.3方波模块
方波信号也是波形发生器中常用的一种信号,下面的程序可以从DAC的输出端得到矩形波,当延时子程序延时时间大体相同时即为方波,改变延时时间可得到不同占空比的矩形波,上限电平及上限电平对应的数字量可用前面讲过的方法获得。
L0:
MOVA,#0FFH;
方波
LCALLDELAY
MOVA,#00H
JBP2.0,STR
LJMPL0
输出矩形波的占空比为T1/(T1+T2),输出波形如图8.15所示。
改变延时值使T1=T2即可得到方波
图5方波
方波程序流程图:
方波仿真波形:
方波实验图
4.3.4正弦波模块
图4
利用DAC接口实现正弦波发生器时,先要对正弦波模拟电压进行离散化。
如图4所示,对于一个正弦波取N等分离散点,按定义计算出对应于1,2,3......N各离散点的数据值D1,D2,D3,D4....DN制成一个正弦表。
因为正弦波在半周期内是以极值点为中心对称,而且正负波形为互补关系,故在制正弦表时只需进行1/4周期,取0~Pi/2之间的数值,步骤如下:
(1)计算0~Pi/2区间N/4个离散的正弦值
(2)根据对称关系,复制Pi/2~Pi区间的值
(3)将0~Pi区间各点根据求补即得Pi~2Pi区间各值
将得到的这些数据根据所用DAC的位数进行量化,得到相应的数字值,依次存入RAM或固化于EPROM中,从而得到一个全周期的正弦编码表
LOOP4:
正弦波
MOVR1,#06H
MOVR4,#00H
L51:
MOVA,R4
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVDPTR,#7FFFH
INCR4
CJNER4,#255,L51
JBP2.4,ST
ST:
LJMPSTR
AJMPL51
DISP:
MOVA,R1
MOVP1,A
DISP1:
MOVA,#0DH
TABLE:
DB80H,83H,86H,89H,8CH,8FH,92H,95H
DB98H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB0B0H,0B3H,0B6H,0B9H,0BCH,0BFH,0C1H,0C4H
DB0C7H,0C9H,0CCH,0CEH,0D1H,0D3H,0D5H,0D8H
DB0DAH,0DCH,0DEH,0E0H,0E2H,0E4H,0E6H,0E8H
DB0EAH,0ECH,0EDH,0EFH,0F0H,0F2H,0F3H,0F5H
DB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FCH
DB0FDH,0FEH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH
DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FEH
DB0FDH,0FCH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H
DB0F6H,0F5H,0F3H,0F2H,0F0H,0EFH,0EDH,0ECH
DB0EAH,0E8H,0E6H,0E4H,0E2H,0E0H,0DEH,0DCH
DB0DAH,0D8H,0D5H,0D3H,0D1H,0CEH,0CCH,0C9H
DB0C7H,0C4H,0C1H,0BFH,0BCH,0B9H,0B6H,0B3H
DB0B0H,0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH
DB98H,95H,92H,8FH,8CH,89H,86H,83H
DB80H,7CH,79H,76H,73H,70H,6DH,6AH
DB67H,63H,60H,5DH,5AH,57H,54H,51H
DB4FH,4CH,49H,46H,43H,40H,3EH,3BH
DB38H,36H,33H,31H,2EH,2CH,2AH,27H
DB25H,23H,21H,1FH,1DH,1BH,19H,17H
DB15H,13H,12H,10H,0FH,0DH,0CH,0AH
DB09H,08H,07H,06H,05H,04H,03H,03H
DB02H,01H,01H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,01H,01H
DB02H,03H,03H,04H,05H,06H,07H,08H
DB09H,0AH,0CH,0DH,0FH,10H,12H,13H
DB15H,17H,19H,1BH,1DH,1FH,21H,23H
DB25H,27H,2AH,2CH,2EH,31H,33H,36H
DB38H,3BH,3EH,40H,43H,46H,49H,4CH
DB4FH,51H,54H,57H,5AH,5DH,60H,63H
DB67H,6AH,6DH,70H,73H,76H,79H,7CH
END
正弦波程序流程图:
正弦波仿真图:
正弦波图
4.3.5梯形模块
梯形程序:
LOOP3:
梯形波
MOVR1,#05H
L41:
L42:
CJNER3,#0FFH,L42
L43:
CJNER3,#00H,L43
JBP2.3,STR
AJMPL41
梯形仿真波形图:
梯形程序流程图:
5.硬件设计
5.1显示波形编号部分
如下图电路图所示:
由74LS47和数码管组成,74LS47负责把单片机送来的信号译码为数码管显示信号。
5.2数模转换部分
数模转换部分主要由DAC0832和集成运放放大电路组成,DAC0832的主要功能是将单片机AT89C51的输出信号转换成模拟信号,转换后的模拟信号由DAC0832引脚OUT1和OUT2输出,经过集成运放的两极放大和电流转换成电压功能的电路,连接到示波器上即可观察波形,如下图所示:
5.3整体电路图
6.仿真结果
7.实验设计不足之处
通过本次单片机课程设计过程,我不仅发现设计的波形发生器有所欠缺,同时也感到了自身的不足。
首先,本次设计的程序实现较为简单,没有涉及到到中断、串行口和定时/计数等功能,仅仅只是编写了几段基本波形发生代码,在主程序里调用,通过不同的键是否按下来选择波形。
由于真正意义上的程序设计还不多,因此还不是很得心应手,所以在设计中遇到一些问题和一些难点。
比如:
在程序设计中如何实现程序结构的最优化,以达到较高的质量。
这是以后设计中要注意的问题。
但也多到了很学实践知识。
最重要的是本程序在设计中出现了因为代码太长,当执行到正弦波时无法返回,经过老师的指导,知道了当遇到这种一次跳不回的情况可以通过多跳一次而跳回。
其次,这次设计的波形发生器缺少一个控制波形频率的,我感到十分遗憾,如果到大四做毕业设计的时候,我想我会将其改进并完善的。
最后,由于自身能力有限,无法对这次设计进行更深层次的拓展,我将在以后的学习过程中不断的完善自己。
8.实验总结
课程设计是我们理论联系实际的最好的途径之一,让我们有机会把课本上学到的知识运用到实际生活中。
目前单片机在工业检测领域中得到了广泛的应用,在我们平常的生活中也是随处可见,包括我们日常生活中随处可见的交通灯、闹钟等都含有单片机作为一个主要的部件,懂得并熟悉掌握单片机的运用技术是非常有用的。
通过这次课程设计使对单片机语言的理解和掌握上有了很大的进步,以前所了解的单片机语言仅限于一些片面的知识,通过这次编程,将这些零零碎碎的知识汇集起来,编写出了一个完整的系统,并且对单片机语言的应用能力有了极大的提高。
在这次课程设计的过程中,我深深体会到团队合作的精神是极其重要的。
因为身在一个团队,有了困难大家一起解决,减少了压力,同时拓展了思维,交换了意见,一个人的思想当被接受和了解时,我们有了更多的思想关于一个问题,我想这些都是作为一个团队的好处。
经过此次课程设计,我们经历了喜,怒,哀,乐。
同时我们也对明年的毕业设计有了一定的想法和实现自己想法的决心.
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVP2,#0FFH
STR:
MOVR1,#0AH
LCALLDISP1;
开启数码管
START:
JNBP2.0,LOOP0;
控制输出方波
JNBP2.1,LOOP1;
控制输出正向锯齿波
JNBP2.2,LOOP2;
控制输出三角波
JNBP2.3,LOOP3;
控制输出梯形波
JNBP2.4,LOOP4;
控制输入正弦波
LJMPSTART
LOOP0:
MOVR1,#01H
LCALLDISP;
显示波形编号
MOVA,#00H
MOVR1,#02H
CJNER3,#0FFH,L12
JBP2.1,STR
AJMPL11
JBP2.2,STR
INCR4
DB0B0H,0B3H,0B6H,0B9H,0BCH,0BFH,0C1H,0C4H
DB0EAH,0E8H,0E6H,0E4H,0E2H,0E0H,0DEH,0DCH
DB15H,17H,19H,1BH