单片机课程设计 之波形发生器.docx
《单片机课程设计 之波形发生器.docx》由会员分享,可在线阅读,更多相关《单片机课程设计 之波形发生器.docx(22页珍藏版)》请在冰豆网上搜索。
![单片机课程设计 之波形发生器.docx](https://file1.bdocx.com/fileroot1/2022-12/17/38ef681c-fc8f-46ab-9d66-a8e97f344f06/38ef681c-fc8f-46ab-9d66-a8e97f344f061.gif)
单片机课程设计之波形发生器
《单片机技术及应用》
课程设计报告
专业:
电子信息工程
班级:
07302(本)
姓名:
陈丽华
指导教师:
包玲
二零一零年六月二十
目录
一课程设计目的3
二课程设计题目描述和要求3
三课程设计报告内容4
3.1波形图思路4
3.2波形图设计过程(方案设计与论证,调试与仪器说明)4
3.1.1锯齿波模块:
4
3.1.2三角波模块:
6
3.1.3方波模块:
7
3.1.4正弦波模块:
9
3.1.5顶层模块:
11
3,1,6采用DAC0832实现波形发生器的总程序模块14
四原始硬件图18
五改进后的硬件图……………………..…………………………..19
六总结………………………………………………………….…….20
七老师评语………………………………………………………….22.
参考文献23
《波形发生器》
一课程设计目的
实现波形发生器可以产生锯齿波、三角波、方波和正弦波等常用标准波形。
二课程设计题目描述和要求
利用DAC接口实现波形发生器可以产生锯齿波、三角波、方波和正弦波等常用标准波形。
将P1.0,P1.2,P1.4和P1.6分别作为这四种波的控制位,当相应的控制键按下后,出现相应的波形
设计原理
DAC接口技术
DAC(Digital-Analog-Conventor)的功能是将数字量转化为与其成比例的模拟电压或电流信号,输出到仪表外部进行各种控制
DAC芯片种类很多,有通用廉价的DAC芯片,也有高速高精度及高分辨率的DAC芯片
在这里我们采用的的是DAC0832
各种类型的DAC芯片都具有数字量输入端,模拟量输入端和基准电压端。
数字量输入端有以下几种类型:
1无数据锁存,2带单数据锁存器,3带双数据锁存器,4可接收串行数字输入。
第一种在与单片机接口时,要外加锁存器,第二种和第三种可直接与单片机接口,第四种与单片机接口十分简单,接收数据较慢,适用于远距离现场控制的场合
模拟量输出有两种方式:
电压输出及电流输出。
电压输出的DAC芯片相当于一个电压源,其内阻很小,选用这种芯片时,与它匹配的电阻应较大,电流输出的芯片相当于电流源,其内阻较大,选用这种芯片时,负载电阻不可太大。
在实际应用中,常选用电流输出的DAC芯片实现电压输出
三课程设计报告内容
3.1波形图思路
在8051单片机的控制下,产生三角波,锯齿波,方波以及正弦波,各种波形所采用的硬件接口都是一样的,由于控制程序不同而产生不同的波形
3.2波形图设计过程(方案设计与论证,调试与仪器说明)
将该任务分成六个模块进行设计,分别为:
锯齿波模块,三角波模块,方波模块,正弦波模块,然后是顶层模块,最后是将所有模块拼合成总体模块
我们所涉及的电路:
DAC0832工作于单缓冲器方式,它的ILE接+5V。
/CS和/XFER相连后由8051的P2.7控制,/WR1和/WR2相连后由8051的/WR控制
DAC0832的地址为7FFFH,工作于单缓冲器方式,执行一次对DAC0832的写入操作即可完成一次D/A转换。
3.2.1锯齿波模块:
8051单片机的累加器A从0开始循环增量,每增量一次向DAC0832写入一个数据,得到一个输出电压,这样可以获得一个正向的阶梯波
DAC0832的分辨率为8位,如其满足的电压为5V,则一个阶梯的幅度为
5V/(2*2*2*2*2*2*2*2)=19.5mV
程序如下:
MOVDPTR,#7FFFH;DAC0832地址
ST:
MOVA,#00H
LOOP:
MOVX@DPTR,A;启动D/A转换
INCA;累加器内容加一
AJMPLOOP;连续输出波形
程序从标号LOOP处执行到指令到执行AJMPLOOP共需5个机器周期,采用12MHZ的晶振,一个机器周期为1us,则每个阶梯的时间为t=5*1us,一个正向阶梯波的总周期的总时间为T=255*t=1275us,即此阶梯波的重复频率为F=1/T=78HZ.由此可见,由软件来产生波形,其频率是较低的。
要想提高频率,可通过改进程序,减少执行时间,但这种方法是有限的,根本的办法还得靠改进路.
图8.13
由图8.13可见,由于每一个阶梯波较小,总体看起来是一个锯齿波.如果要改变这种波形的周期,可采用延时的方法,程序若如下:
MOVDPTR,#7FFFH;DAC0832地址
ST:
MOVA,#00H
LOOP:
MOVX@DPTR,A;启动D/A变换
ACALLDELAY;延时
INCA
AJMPLOOP;连续输出波形
DELAY:
MOVR4,#0FFH;延时子程序
LOOP1:
MOVR5,#10H
LOOP2:
NOP
DJNZR5,LOOP2
DJNZR4,LOOP1
RET
在延时子程序中改变延时时间的长短,即可改变输出波形的周期。
锯齿波波形:
3.2.2三角波模块:
在以上这个正向的锯齿波的前提下,若要获得负向的锯齿波只需将以上程序中的指令INCA换成指令DECA即可,如果想获得任意起始电压和终止电压的波形,则需先确定起始电压和终止电压所对应的数字。
程序中首先从起始电压对应的数字量开始输出,当达到终止电压对应的数字量时返回,如此反复。
将正向锯齿波与负向锯齿波组合起来就可以获得三角波,程序如下:
MOVDPTR,#7FFFH;DAC0832地址
TRI:
MOVA,#00H;三角波
UP:
MOVX@DPTR,A;启动D/A转换
INCA;上升沿
CJNEA,#0FFH,UP
DOWN:
MOVX@DPTR,A;启动D/A转换
DECA;下降沿
CJNEA,#00H,DOWN
AJMPUP;连续输出波形
3.2.3方波模块:
方波信号也是波形发生器中常用的一种信号,下面的程序可以从DAC的输出端得到矩形波,当延时子程序DELAY1与DELAY2的延时时间大体相同时即为方波,改变延时时间可得到不同占空比的矩形波,上限电平及上限电平对应的数字量可用前面讲过的方法获得。
程序如下:
MOVDPTR,#7FFFH;DAC0832地址
SQ:
MOVA,#LOW;取低电平数字量
MOVX@DPTR,A;DAC输出低电平
ACALLDELAY1;延时1
MOVA,#HIGH
MOVX@DPTR,A;DAC输出高电平
ACALLDELAY2;延时2
AJMPSQ;连续输出波形
以上程序中未列出延时子程序,可仿照前面锯齿波中的延时子程序编写,输出矩形波的占空比为T1/(T1+T2),输出波形如图8.15所示。
改变延时值使T1=T2即可得到方波
矩形波
矩形波实验图
3.2.4正弦波模块:
图8.14
利用DAC接口实现正弦波发生器时,先要对正弦波模拟电压进行离散化。
如图8.14所示,对于一个正弦波取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中,从而得到一个全周期的正弦编码表
程序如下:
SIN:
MOVDPTR,#SINTAB;正弦波
MOVR0,#6DH
LOOP:
CLRA
MOVCA,@A+DPTR
MOV@R0,A
INCDPTR
INCR0
CJNER0,#80H,LOOP
MOVDPTR,#7FFFH;DAC0832端口地址
MOVR0,#6DH
LOOP1:
MOVA,@R0;取得第一个1/4周期的数据
MOVX@DPTR,A;送往DAC0832
INCR0
CJNER0,#7FH,LOOP1
LOOP2:
MOVA,@R0;取得第二个1/4周期的数据
MOVX@DPTR,A;送往DAC0832
DECR0
CJNER0,#6DH,LOOP2
LOOP3:
MOVA,@R0;取得第三个1/4周期的数据
CPLA;数据取反
MOVX@DPTR,A;送往DAC0832
INCR0
CJNER0,#7FH,LOOP3
LOOP4:
MOVA,@R0;取得第四个1/4周期的数据
CPLA;数据取反
MOVX@DPTR,A;送往DAC0832
DECR0
CJNER0,#6DH,LOOP4
JB20H.3,LOOP1;输出连续波形
LJMPHERE
SINTAB:
DB7FH,89H,94H,9FH,0AAH,0B4H,0BEH,0C8H,0D1H,0D9H
DB0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,0FEH,0FFH
正弦波图
3.2.5顶层模块:
根据按键按下的不同,中断0对应于不同的波形处理
ORG0000H
START:
LJMPMAIN
ORG0003H;外部中断入口
LJMPINSER;转到中断服务程序
ORG0030H
MAIN:
MOVDPTR,#7FFFH;DAC0832地址
SETBEX0;允许中断
SETBIT0;负边沿触发方式
SETBEA;开中断
HERE:
JB20H.0,ST;阶梯波处理
JB20H.1,TRI;三角波处理
JB20H.2,SQ;方波处理
JB20H.3,SIN;正弦波处理
SJMPHERE;等待中断
INSER:
JNBP1.0,LL1;中断服务程序,查询按键
SJMPL1
LL1:
MOV20H,#00H
SETB20H.0;设置阶梯波标志
SJMPRT
L1:
JNBP1.2,LL2
SJMPL2
LL2:
MOV20H,#00H
SETB20H.1;设三角梯波标志
SJMPRT
L2:
JNBP1.4,LL3
SJMPL3
LL3:
MOV20H,#00H
SETB20H.2;设置方波标志
SJMPRT
L3:
JNBP1.6,LL4
SJMPRT
LL4:
MOV20H,#00H
SETB20H.3;设置正弦波标志
RT:
RETI;中断返回
………..;波形程序略
END
运用Proteus设计的波形发生器仿真原理图
如上图是运用Proteus仿真的图形,可是出现的图形很不理想,所以进行了改进
下图为改进后的同相比例运算电路
改进后的Proteus仿真的图形如下
.元件列表
STC89C51芯片1块
DAC0832芯片1块
UA741CN芯片一块
按键4个
电阻10K1个电阻0.22K4个
可提供在线的STC89C小系统板(其中包括了晶振CRYSTAL12Hz
有源电容10u一个陶瓷电容22Pf2个)
导线若干
还用到实验室里的直流电压源和示波器
74LS21引脚图UA741CN引脚图
3.2.6采用DAC0832实现波形发生器的总程序模块
ORG0000H
START:
LJMPMAIN
ORG0003H;外部中断入口
LJMPINSER;转到中断服务程序
ORG0030H
MAIN:
MOVDPTR,#7FFFH;DAC0832地址
SETBEX0;允许中断
SETBIT0;负边沿触发方式
SETBEA;开中断
HERE:
JB20H.0,ST;阶梯波处理
JB20H.1,TRI;三角波处理
JB20H.2,SQ;方波处理
JB20H.3,SIN;正弦波处理
SJMPHERE;等待中断
INSER:
JNBP1.0,LL1;中断服务程序,查询按键
SJMPL1
LL1:
MOV20H,#00H
SETB20H.0;设置阶梯波标志
SJMPRT
L1:
JNBP1.2,LL2
SJMPL2
LL2:
MOV20H,#00H
SETB20H.1;设三角梯波标志
SJMPRT
L2:
JNBP1.4,LL3
SJMPL3
LL3:
MOV20H,#00H
SETB20H.2;设置方波标志
SJMPRT
L3:
JNBP1.6,LL4
SJMPRT
LL4:
MOV20H,#00H
SETB20H.3;设置正弦波标志
RT:
RETI;中断返回
ST:
MOVA,#00H;阶梯波
LOOPP:
MOVX@DPTR,A;启动D/A转换
INCA
JB20H.0,LOOPP;连续输出波形
LJMPHERE
TRI:
MOVA,#00H;三角波
UP:
MOVX@DPTR,A;启动D/A转换
INCA;上升沿
CJNEA,#0FFH,UP
DOWN:
MOVX@DPTR,A;启动D/A转换
DECA;下降沿
CJNEA,#00H,DOWN
JB20H.1,UP;连续输出波形
LJMPHERE
SQ:
MOVA,#00H;方波
MOVX@DPTR,A;DAC输出低电平
ACALLDELAY;延时1
MOVA,#0FFH
MOVX@DPTR,A;DAC输出高电平
ACALLDELAY;延时2
JB20H.2,SQ;连续输出波形
LJMPHERE
SIN:
MOVDPTR,#SINTAB;正弦波
MOVR0,#6DH
LOOP:
CLRA
MOVCA,@A+DPTR
MOV@R0,A
INCDPTR
INCR0
CJNER0,#80H,LOOP
MOVDPTR,#7FFFH;DAC0832端口地址
MOVR0,#6DH
LOOP1:
MOVA,@R0;取得第一个1/4周期的数据
MOVX@DPTR,A;送往DAC0832
INCR0
CJNER0,#7FH,LOOP1
LOOP2:
MOVA,@R0;取得第二个1/4周期的数据
MOVX@DPTR,A;送往DAC0832
DECR0
CJNER0,#6DH,LOOP2
LOOP3:
MOVA,@R0;取得第三个1/4周期的数据
CPLA;数据取反
MOVX@DPTR,A;送往DAC0832
INCR0
CJNER0,#7FH,LOOP3
LOOP4:
MOVA,@R0;取得第四个1/4周期的数据
CPLA;数据取反
MOVX@DPTR,A;送往DAC0832
DECR0
CJNER0,#6DH,LOOP4
JB20H.3,LOOP1;输出连续波形
LJMPHERE
SINTAB:
DB7FH,89H,94H,9FH,0AAH,0B4H,0BEH,0C8H,0D1H,0D9H
DB0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,0FEH,0FFH
DELAY:
MOVR4,#0FH;延时子程序
LOOP11:
MOVR5,#10H
LOOP22:
NOP
NOP
NOP
DJNZR5,LOOP22
DJNZR4,LOOP11
RET
END
原理是基于DAC的电压输出与其数字输入量成正比关系
四原始硬件图
可供在线下载的STC89C51小系统板
实验现象
按下阶梯波键时按下三角波键时
按下方波键时按下正弦波键时
五经改进后的硬件图及改进后的现象图
实验现象
阶梯波形
三角波形
方波波形
按下正弦波波形键时出现的波形(与正弦波有点出入)
六总结
组长:
陈丽华全程参与
组员:
李小兵负责硬件焊接及调试
张欢负责方波模块及PPT
杜浩负责正弦波模块,有参与到硬件调试
张浩负责阶梯波模块和元器件购买
李冲负责三角波模块和元器件购买
通过这次对波形发生器的设计和实践,让我们进一步了解了设计的程序,也让我们了解了关于波形发生器的基本原理与设计理念,要设计一个电路要先用仿真仿真成功后才能实际节线和焊接,但是最后的成品却不一定与仿真时完全一样,因为在实际接线中有着各种个样的条件制约着,例如做音乐发生器时在接蜂鸣器之前必需加一个驱动…..
在程序设计时时有不懂的地方需时时翻书,说明了对单片机技术掌握的并不是很熟悉,有待进一步提高对其的深入了解,同时在做这个课程设计的过程中我们了解到了更多有关于单片机的应用,像老师所说的那样,什么东西都可以用单片机做出来,只是看你钻没钻进去,还有就是意识到了学好模拟电路基础和数字电路基础是十分重要的,那是做单片机应用知识所必备的
在硬件电路的焊接时,一定要记住每个芯片都有正极和负极,它们必须接相应的地方不可遗漏,在去购买元器件之前,一定要把所有要买的东西列一个清单,不是仅仅拿着已经仿真好的电路图就可以,那样很可能会造成不必要的麻烦,为了以后的学习方便,我们直接买了个小系统版,却因为在接了直流电压源以后就只顾着看示波器,电流源突然跳变到10V而使得小系统板上的芯片STC89C51爆炸,主要的供在线下载功能的芯片也一起损坏,以至于此小系统板只能做外扩而不得下载了,于是又买了一个,由此耗资甚大,所以得结论:
在未接电源之前一定要等电压源稳定才接,已连接焊好的板子要放平,动作要轻缓,不要因为大意而触动了连线带动电压源变化使得电流过大烧坏元件。
通过这次设计,让我们进一步加深了对单片机的了解,让我们对它有了更加浓厚的兴趣,特别是在焊接完后调试找观察现象时,遇到了一些难题时,要冲破这些障碍的心让我们更加迫切的想要去了解更多关于单片机的东西,原来以为很简单的东西并非想像中简单,而难得也并非无法可破,这次课程的设计使我们懂得了理论与实际相结合是很重要的,只是有知识是不够的,只有把所学的理论知识与实践结合起来,从理论中得出结论,才能更好的学习和运用我们学的这门课程,
在这次课程设计的过程中,我深深体会到团队合作的精神是极其重要的
因为身在一个团队,有了困难大家一起解决,减少了压力,同时拓展了思维,交换了意见,一个人的思想当被接受和了解时,我们有了更多的思想关于一个问题,我想这些都是作为一个团队的好处
经过此次课程设计,我们经历了喜,怒,哀,乐。
同时我们也对明年的毕业设计有了一定的想法和实现自己想法的决心.
七老师评价:
参考文献
(1)单片机原理实用教程---基于Proteus虚拟仿真
(2)单片机原理,接口技术及应用