简易波形发生器课程设计Word下载.docx
《简易波形发生器课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《简易波形发生器课程设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
2.2总体设计思路
本次设计结合D/A和A/D转换,用键盘输入来选择DAC0832的输出波形,再通过ADC0809采集后在PC机上以图形方式显示。
实验主要利用实验箱上的DAC0832、ADC0809和8255等硬件电路和PC机资源。
设计要求该波形发生器能产生正弦波、方波、三角波等形状的波形,频率和幅度可调。
不同的波形主要是由输入DAC0832的不同规律的数据,所以在软件设计是主要是构造各种波形的数据表格。
方波只需要控制输出高低电平的时间,三角波的表格可以由数字量的增减来控制,产生正弦波关于构造一个正弦函数数值表,通过查该函数表来实现波形的输出。
波形的频率控制是通过对输出数据的时间间隔控制。
幅度是通过改变输出数据的大小来控制的。
为了程序实现方便,可以把每种波形的数据表构造好,再统一查表来实现。
第3章系统结构图及工作原理
3.1系统结构框图
3.2工作原理
在双极性电压波形发生器中,DAC0832转换器输入数据采用单缓冲方式,与89C51接口电路。
DAC0832转换器输出部分接口电路,由于考虑到软件产生电压波形有正负极性输出,因此这部分设计成双极性电压输出,其方法是单极性输出运算放大器后面加一级运算放大器,形成比例求和电路,通过电平移动,使单极性输出变为双极性输出。
第4章各单元硬件设计及计算方法
4.1硬件设计
硬件由于采用了PC机的资源和微机实验平台,不用外加其他的电路,比较简单。
将微机系统里面的中断、8255、DAC0832以及ADC0832的电路弄清楚,通过相应的跳线就可以完成电路的设计。
本次设计中,通过PC机键盘选择波形,启动DAC0832工作,在其输出端口VOUT1将会产生0~5V的直流电压,再由ADC0809的IN0端口进行采样,显示到屏幕上。
DAC0832所对应的片选为CS4,ADC0809所对应的片选为CS0。
DAC0832和ADC0809硬件连接图如图1所示。
在ADC0809芯片连接中,CLOCK用来接收外部时钟信号,在本实验中接收Q3端产生的时钟信号。
ADD_A,ADD_B和ADD_C这三个端口为三位地址线,用来选通8路模拟量输入中的一路。
在本实验中,只使用ADC0809中的IN0端口,当ADD_A,ADD_B和ADD_C端口都为低电平时,才能选中IN0端口。
在本PC实验箱中ADC0809IN0端口地址为280H,其地址总线中的A0,A1,A2均为低电平。
故将ADD_A,ADD_B和ADD_C与A0,A1,A2如图所示连接。
REF(+)接正参考电压(+5V),REF(-)接负参考电压(接地)。
图1设计硬件连接图
第5章软件设计与说明
5.1软件设计
本设计的主要是掌握各种典型波形的产生方法,例如三角波、方波和正弦波。
构造各种波形的数据表和对ADC0832的编程输出。
1.波形数据表的构造
每个周期的数据表由64个数据组成,不同的幅度对应的数据不一样,可以根据倍数关系求出。
但是为了简化计算,将每个幅值的数据表列出。
这边我们只讨论幅值为5V时的数据表,其他的数据表可以根据倍数关系求得。
1)方波数据表的构造
只要输出高电平和低电平就可以了,所以输入到ADC0832的数据由32个00H和32个FFH组成。
2)三角波数据表的构造
三角波是由数据量的增减来控制的。
在前半个周期数据由00H增加到FFH,在后半个周期数据由FFH减少到00H,每次变化为08H。
所以三角波的数据表为:
BUF
DB00H,08H,10H,18H,20H,28H,30H,38H,40H,48H,50H,58H,60H,68H,70H,78H
DB80H,88H,90H,98H,0A0H,0A8H,0B0H,0B8H
DB0C0H,0C8H,0D0H,0D8H,0E0H,0E8H,0F0H,0F8H
DB0FFH,0F8H,0F0H,0E8H,0E0H,0D8H,0D0H,0C8H
DB0C0H,0B8H,0B0H,0A8H,0A0H,98H,90H,88H
DB80H,78H,70H,68H,60H,58H,50H,48H,40H,38H,30H,28H,20H,18H,10H,08H
3)正弦波数据表的构造
DAC0832的输入数据与输出电压的关系为:
Ua=(UREF)/256*N,其中UREF表示参考电压(+5V),N表示数据。
由于8位D/A转换器DAC0832的数据N的范围为:
00H—FFH,故Ua的范围为:
0V—4.98V。
则产生的正弦波的幅度也为0V—4.98V。
我们以正弦函数的0--
/2为例,0度时我们设定其对应的N为:
80H,
/2时必然对应的N为:
FFH,在0--
/2的范围内有16个点,故间隔为6度。
综上所诉正弦波函数为:
Ua=2.48*sin6x+2.5(x=0,1,……15)。
联合上述两式,就可得出0--
/2范围内的16个N值。
构造出正弦波数据表如下:
SINBUF:
DB080H,08CH,098H,0A5H,0B0H,0BCH,0C7H,0D1H
DB0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH
DB0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH
DB0D1H,0C7H,0BCH,0B0H,0A5H,098H,08CH,080H
DB7FH,73H,67H,5AH,4FH,43H,38H,2EH
DB25H,1DH,15H,0FH,09H,05H,02H,00H
DB00H,02H,05H,09H,0FH,15H,1DH,25H
DB2EH,38H,43H,4FH,5AH,67H,73H,7FH
2.程序的主要模块
程序主要由主程序和中断服务程序构成。
主要由菜单显示、键盘读取、DA输出、AD采样、屏幕画图等模块组成。
菜单显示包含有3个菜单:
主菜单和2个子菜单。
主菜单有选择波形和退出选项,子菜单有选择频率菜单和选择幅度菜单。
键盘读取是配合菜单显示的条件下,接收键盘的输入,得到相应的数据来处理,决定输出波形的信息。
DA输出是将数据输出到ADC0832转换为模拟量输出。
ADC0809的转换控制如下:
选择通道并启动转换延时等待读取转换结果。
第6章调试结果与调试说明
6.1调试步骤
1.输入源程序
输入源程序时,应以西文方式输入字母和符号,且中文注释前要加分号。
2.对源程序进行汇编和纠错
根据自动汇编提供的错误信息逐条纠正错误,直至汇编信息提示无误。
3.确定调试方案
在调试程序前认真分析源程序,确定各功能程序运行的预期结果。
然后结合源程序应达到的结果,通过某些关键参数和实验现象检验程序运行结果正确与否。
并针对具体的分析和观察对象选择较合适的调试方法。
如单步运行、跟踪运行、连续运行、快速运行至光标处、设置断点等调试方法。
4.调试程序
1)调试子程序。
由于程序比较多,整体调试不容易发现和改正错误,故采取子程序调试的方法,但要明确子程序的具体功能。
例如:
调试显示子程序时,只将显示子程序进行汇编,确认无误后单步执行,观察CPU窗口和DATA窗口以及CODE窗口相应单元的变化是否跟预期的一样。
如果有问题找出问题所在。
采取各个击破的方法调试好各个子程序。
2)确定各子程序无误后,再调试完整的程序,要注意各子程序之间的衔接以及和主程序之间的调用和返回。
运行后,观察有无显示,显示的变化过程是否正确。
若运行结果不正确,首先应根据程序运行的实际现象分析判断哪些因素可引起相关故障,再通过调试方法逐一认证和排除。
通过反复调试,发现并排除软件与硬件存在的各类问题,以满足系统设计的预期目的。
第7章总结
不知不觉中两周的单片机的课程设计就结束了,从刚开始接受课题,查阅相关资料,思考设计方案,从而确定设计方案,然后进行具体的硬件设计、软件设计,实验调试等,想着自己在这两周中学到的东西,心中好是高兴。
在第一周时,我们通过找大量相关的资料以及跟同学们和老师一起研究和讨论,认识设计的内容,将其分为两大部分(硬件设计部分和软件设计部分),终于设计出一套比较好的的方案。
但是将这些具体的方案在实际设计中执行,出现一定的错误,这就需要我们在调试过程中利用所掌握的知识认真检查,调试到位。
然后在讨论如何解决不足,如此反复查找,反复修改,反复调试,直到基本符合我们的功能要求。
无数次的尝试总算是把设计搞好了,电路调试成功。
真是难以用言语去形容那种愉悦的心情。
自己的付出总算是有了回报。
我也得到了自己知识不足而得到弥补。
感觉在知识不牢固的时候是多么无助跟绝望。
自己要反复的去查阅以前的课本和书籍是多烦琐的事情。
这也就坚定了我在以后的学习中要认真学好基础知识的决心。
同时,我也注意到了以下:
在调试程序前,一定要预先将源程序分析透彻,在此基础上训练如何通过实验现象分析和判断产生故障的原因及故障可能存在的大致范围;
灵活运用开发系统所提供的各种调试方法,快速有效地排查和缩小故障范围。
通过反复调试,不断地分析和排除故障,调试软件和硬件的能力及速度。
调试程序时,要结合能反映故障存在与否的参数变化、运行路径变化、显示内容变化等,选择合适的观测点和观测对象,再运用适当的调试方法,快速地检验调试结果,由此分析和判断故障点。
总体来说,这次单片机的课程设计使我受益匪浅。
在摸索该如何设计电路使之实现所需功能的过程中,特别有趣,培养了我的设计思维,增加了实际操作能力。
在让我体会到了设计电路的艰辛的同时,更让我体会到成功的喜悦和快乐。
两周的课程设计结束了,在此我想对我的指导老师李世军老师表达我衷心的感谢。
在李世军老师的耐心的指导下,使这次课程设计取得了较满意的结果。
这次设计过程中得到了其他老师的指导和帮助,在此一并表示衷心的感谢!
同时,也对帮助过我的同学深表感谢!
参考文献
[1]张迎新.《单片微型计算机原理、应用及接口技术》.国防工业出版社
[2]房小翠.《单片机实用系统设计技术》.国防工业出版社
[3]何立民.《单片机应用系统设计》.北航出版社
[4]王迎旭.《单片机原理及及应用》.机械工业出版社.2004年7月
[5]戴梅萼、史嘉权《微型计算机技术及运用》清华大学出版社,2003年
[6]潘新民《微型计算机硬件技术教程-原理*编译*接口及体系结构》机械工业出版社,2004年
[7]郑学坚《微型计算机原理及运用(第三版)》清华大学出版社,2001年
附录
A:
系统原理图
B:
印刷电路图:
C:
程序清单:
ORG0000H
LJMPSTART
ORG4100H
PORTEQU0cfa0H
START:
MOVR3,#1FH
SETBP1.0;
按键位置高电平
SETBP1.1
SETBP1.2
SETBP1.3
SETBP1.4
JNBP1.0,LXP0;
锯齿波选择
JNBP1.1,LXP1;
三角波选择
JNBP1.2,LXP2;
矩形波选择
JNBP1.3,LXP3;
梯形波选择
JNBP1.4,LXP4;
正弦波选择
WAIT:
DJNZR3,WAIT;
延时,等待
AJMPMOTOP
LXP0:
ACALLPRG1;
调用锯齿波
LXP1:
ACALLPRG2;
调用三角波
LXP2:
ACALLPRG3;
调用矩形波
LXP3:
ACALLPRG4;
调用梯形波
LXP4:
ACALLPRG5;
调用正弦波
MOTOP:
ACALLPRG1
NOP
ACALLPRG2
ACALLPRG3
ACALLPRG4
ACALLPRG5
PRG1:
MOVR1,#1
MOVDPTR,#0CFABH;
设定DPTR指向8255控制端口
MOVA,#80H;
写入控制字
MOVX@DPTR,A
MOVDPTR,#0CFA8H
MOVA,#06H;
写入数码管显示代码(数字1~5)显示代码,锯齿波,三,方,梯形,正分别对应#06,#5BH,#4FH,#66H,#6DH
MOVDPTR,#0CFA9H;
设定DPTR指向8255端口
MOVA,#02H;
写入位选字,使数码管选通
PG1:
MOVDPTR,#PORT;
指向0832端口地址
MOVR2,#15;
LOOP:
MOVA,#00H
LOOP1:
MOVDPTR,#PORT
MOVX@DPTR,A
INCDPTR
INCA
CJNEA,#0FFH,LOOP1;
DJNZR2,LOOP;
内循环次数控制
DJNZR1,PG1;
外循环次数控
RET;
子程序调用返回
PRG2:
MOVR1,#2;
三角波生成
指向8255控制端口
MOVDPTR,#0CFA8H;
指向A端口地址
MOVA,#5BH;
写入数码管显示2代码
指向B端口地址
MOVA,#02H;
写入位选,数码管选通
PG2:
MOVR2,#8
LOOP0:
MOVDPTR,#0cfa0H
CJNEA,#0FFH,LOOP0
LOOP01:
MOVDPTR,#0cfa0H
MOVX@DPTR,A
DECA
CJNEA,#00H,LOOP01
DJNZR2,LOOP0
DJNZR1,PG2
RET
PRG3:
MOVR1,#5
MOVA,#80H
MOVA,#4FH
MOVDPTR,#0CFA9H
MOVA,#02H
PG3:
LP1:
MOVA,#0FFH
LCALLDELAY
LP2:
DJNZR2,LP1
DJNZR1,PG3
DELAY:
MOVR4,#1FH
LP3:
MOVR5,#0FH
LP4:
DJNZR5,LP4
DJNZR4,LP3
PRG4:
MOVR1,#4
MOVA,#66H
PG4:
LP00:
CJNEA,#0D0H,LP00
ACALLDELAY1
LP001:
CJNEA,#00H,LP001
ACALLDELAY1
DJNZR2,LP00
DJNZR1,PG4
DELAY1:
MOVR4,#02H
LP10:
MOVR5,#0FFH
LP11:
DJNZR3,LP11
DJNZR4,LP10
PRG5:
MOVR1,#0FFH
MOVA,#6DH
LPG0:
MOVDOTR,#TAB
MOVR7,#00H
LPG1:
MOVR3,DPH
MOVR4,DPL
MOVA,R7
MOVCA,@A+DPTR
MOVDPTR,#PORT
INCDPTR
MOVDPH,R3
MOVDPL,R4
INCR7
DJNZR5,LPG1
DJNZR1,LPG0
RET
TAB:
DB080H,08CH,098H,0A5H,0B0H,0BCH,0C7H,0D1H;
正选波数据表
DB0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH
DB0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH
DB0D1H,0C7H,0BCH,0B0H,0A5H,098H,08CH,080H
DB7FH,73H,67H,5AH,4FH,43H,38H,2EH
DB25H,1DH,15H,0FH,09H,05H,02H,00H
DB00H,02H,05H,09H,0FH,15H,1DH,25H
DB2EH,38H,43H,4FH,5AH,67H,73H,7FH
END;
汇编结束
忽略此处..