单片机课程设计 函数发生器Word格式文档下载.docx

上传人:b****3 文档编号:18394618 上传时间:2022-12-16 格式:DOCX 页数:14 大小:1.13MB
下载 相关 举报
单片机课程设计 函数发生器Word格式文档下载.docx_第1页
第1页 / 共14页
单片机课程设计 函数发生器Word格式文档下载.docx_第2页
第2页 / 共14页
单片机课程设计 函数发生器Word格式文档下载.docx_第3页
第3页 / 共14页
单片机课程设计 函数发生器Word格式文档下载.docx_第4页
第4页 / 共14页
单片机课程设计 函数发生器Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机课程设计 函数发生器Word格式文档下载.docx

《单片机课程设计 函数发生器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计 函数发生器Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

单片机课程设计 函数发生器Word格式文档下载.docx

这种仪器的缺点是电路复杂,成本高,输出波形种类不多,不够灵活。

在对波形指标要求不高,频率要求较低的场合,可以用单片机构成一个波形发生器,产生所需要的各种波形,这样的函数发生器靠软件产生各种波形,,小巧灵活,便于修改,且成本低廉,容易实现。

但受单片机工作频率的限制,它所构成的函数发生器的输出频率较低,各项指标也都不太高,只能用于对波形要求不高的场合。

根据设计要求,可以考虑两种波形的切换,用一个开关的两种状态来表示。

另外,波形频率的改变是通过改变输入电压来实现的,所以需要有一个模拟量输入。

选用常用的A/D转换器芯片0809可满足要求。

波形输出是通过D/A转换器实现的,可选用D/A专用芯片0832来完成。

这样系统的主要器件就确定了。

系统选用6MHz晶振,如用12MHz晶振,则输出波形的频率可得到相应的提高。

A/D转换器芯片的地址按可接成为7000H,采样通道为IN0,三个通道地址选择端ADD-A,ADD-B及ADD-C接在数据线上,当然按设计要求也可将这三根地址线接地,但这样不便于系统扩展。

0809EOC端在A/D转换结束后会产生一个上跳变,将其接到P3.2口,这样当A/D转换结束时,可按等待及查询两种方式读取数据,编程较为灵活。

若采取中断方式读取结果,从EOC输出的信号应加反相器后再送到P3.2口,以便与单片机的终端逻辑相匹配。

分频器74ALS74将1MHz的地址锁存信号四分频,变为250kHz脉冲后,提供给0809作为其工作脉冲。

D/A转换器芯片DAC0832将单片机输入的数字量转变为电流信号并以差分方式送给运算放大器LM324,后者将其变为电压信号输出。

若要得到正负电压,则应该为运算放大器提供正负电源。

三、程序模块的设计

3.1、波形产生

根据硬件设计,系统用按钮切换波形,采用中断方式进行,中断方式的效率更高。

其编程思想是安排一个存储单元存放按钮次数,初值设为0,对应于某种波形,每中断一次数据加1,以对应另一种波形。

因此中断程序的任务仅仅是通过改变两种输出数据之间的时间间隔来实现的。

具体做法是首先对模拟量采样,得到相应的A/D值,用这个A/D值(或用它的反码)作为延时基数去延时,这样输出波形的频率就和模拟电压联系起来,只要调整电位器旋钮改变输入电压模拟量,就可以改变波形频率,主程序框图和中断程序框图如图1所示。

图1:

主程序及中断程序框图

3.2、波形产生

下面分析两种波形产生的原理。

(1)正弦波

正弦波可用两种方法,即计算法和查表法。

计算法要用到浮点运算,复杂且耗时太长,一般不采用。

查表法是事先将正弦波的数据计算出来,列表放在程序中,运行是直接调取数据。

用公式y=127.5+127.5sin(360n/m)可计算出正弦波的输出值,公式中的m为输出点数,n=1,2,3…,m。

m值取小一些可以提高波形频率,但波形畸变会增大,增加输出点虽然可以改变波形,但输出频率降低,实践表明,m取64时,可以得到较好的正弦波。

用上式计算的正弦波如下(有舍入误差),将其放在程序中调用即可。

TAB:

DB140,152,164,176,188,198,208,218,226,234,240,245,253,254,255

DB254,253,245,240,234,226,218,208,198,188,176,164,152,140,128

DB115,103,90,79,67,57,47,37,29,21,15,10,5,2,1,0

DB1,2,5,10,15,21,29,37,47,57,67,90,103,115,128

(2)方波

方波只有两个值,可以采用两个极端值0和FFH,这样只要将缓冲区的数据取出求反后输出即可。

产生方法较为简单

图2:

产生正弦波的硬件

3.3、频率控制

每种波形输出一个数据后程序转换到频率控制部分,各种波形的频率就是通过这一部分控制的。

它的控制原理是首先读出0809的A/D转换值,并以此为基值延时,延时完毕后再启动0809开始采样模拟电压,为下一次读数做准备。

当然,也可以隔几秒钟进行一次A/D转换,这样要用到定时器中断。

若直接将A/D转化值作为延时基数去延时,则频率变化的范围有限。

若将A/D转换值乘以一个倍率再去延时,虽然可扩大频率的变化范围,但波形的失真会明显增大。

图3:

通过按钮得到不同电压值,经ADC0809模数转换延时调整频率

3.4、程序的调试与运行

经过各个模块的设计,总的原理图设计如下:

(报告后附放大图)

图4:

电路图分为两块,显示部分两根线接到单片机P3.0、P3.1口

完成硬件制作后,可将整个系统分为几个部分,先编出四种波形的程序,单独调试,成功后再加入频率调节部分。

采用图4所示参数,正弦波的最高输出频率可大于200Hz,方波的最高输出频率在4kHz左右,如果用12MHz晶振,则各种波形的最高输出频率可提高1倍。

另外,按钮的抗干扰问题在编程时要加以考虑,由于图4电路中没有加硬件消除按钮抖动电路,所以必然要增加软件开销。

一般开关、按钮的抖动在几秒钟时间以内,因而用延时程序避开10ms左右的时间即可防止按一次按钮产生多次中断的现象。

为了节省硬件,0809的转换完成信号端EOC直接接到了单片机的外部中断0输入端P3.2上。

由于中断逻辑不匹配,因而不能用中断的方式读取A/D转换结果。

最后,在程序统调时要借助调试工具采用单步和断点及连续运行的方式反复调试程序,迅速找到问题所在,即使修改,直至程序运行成功为止。

四、汇编程序的设计及编译调试

4.1、程序设计

ORG0000;

0809地址7000H,0832地址8000H

AJMPMAIN

ORG0013H;

外部中断1入口地址

LJMPINT_X1

ORG0030H

MAIN:

MOVSP,#60H;

初始化

MOVA,#00

MOVDPTR,#7000H;

启动0809(控制频率)

MOVX@DPTR,A

MOVIE,#84H;

开中断,10000100

CLRIT1;

选择了电平触发方式

MOVR4,#0

MOV10H,#0;

正弦波数据指针

MOV11H,#0;

方波数据初值

SIGN:

MOVA,R4

RLA

MOVDPTR,#BASE;

把BASE的地址送给DPTR

JMP@A+DPTR

BASE:

AJMPWAVE1;

转正弦波程序

AJMPWAVE2;

转方波程序

WAVE1:

MOVDPTR,#TAB

MOVA,10H;

取数据指针

MOVCA,@A+DPTR;

查表

MOVDPTR,#8000H;

0832地址

MOVX@DPTR,A;

输出到0832

MOVA,10H

CJNEA,#63H,W11

指针回零

AJMPW12

W11:

INCA;

调整指针

MOV10H,A;

正弦波程序结束

W12:

AJMPZAD

WAVE2:

方波程序

MOVA,11H

MOVX@DPTR,A

CPLA

MOV11H,A

AJMPZAD;

方波程序结束

ZAD:

频率控制程序

JNBP3.2,$;

位不为1,在此转移(等待)

(是在等待转换,因为0809转换完了,会在这端输出高电平,转换期间为0)

MOVXA,@DPTR

JZSKIP

DJNZACC,$;

根据A/D转换值延时

(把ACC中的内容减1,不等于0就在此处继续,等于0了,再往下执行)

SKIP:

MOVX@DPTR,A;

启动0809

LJMPSIGN;

频率控制程序结束

INT_X1:

PUSHACC;

外部中断1中断子程序

ACALLDELAY

JBP3.3,WEXIT

MOVA,R4

INCA

ANLA,#3;

调整

MOVR4,A;

保存标志

JNBP3.3,$

WEXIT:

POPACC

RETI;

中断子程序结束

DELAY:

MOVR6,#10;

10ms延时子程序,防抖动

DEL:

MOVR7,#250

DJNZR7,$

DJNZR6,DEL

RET

DB140,152,164,176,188,198,208,218,226,234,240,245,253,254,255

DB254,253,245,240,234,226,218,208,198,188,176,164,152,140,128

DB115,103,90,79,67,57,47,37,29,21,15,10,5,2,1,0

DB1,2,5,10,15,21,29,37,47,57,67,79,90,103,115,128

END

4.2、程序编译与调试

汇编程序编译与调试用的是keilu3软件,由于程序已经经过多次修改编写,在编译与调试过程中没有什么错误,之前的准备工作使调试的工作量大大减小了。

图5:

编译成功

图6:

调试程序

图7:

单步运行程序这一步是把7000送给DPTR

五、我们工作的过程

在整个设计,调试过程中,我们都亲自动手,合理分工,才完成了这个设计。

图8:

用protues7.6sp4画了一半的电路图

我们还发现,如果把0809输入的模拟量改成下图的形式,频率就由现在设计的四种,变成连续可调的了。

图9:

频率改成了在一定范围内连续可调

六、小结及感想

本设计实现的信号发生器为简易信号发生器,它的优点在于能通过单片机产生任意周期的波形,而且小巧灵活,价格低廉。

但它同时受到单片机工作频率的局限,各项指标都不高,使用受到一定限制。

这次单片机课程设计,我们有很多第一次。

第一次动手设计这么系统的程序,第一次用protues画图,第一次用keil防真,真的让我们意识到,学习使用,并且熟练使用专业软件的必要。

通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,。

更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。

设计过程中,我们有好多不会的东西,最开始无从下手,比如正弦波不会产生,软件都不会用,不会数码管显示频率等等,甚至连汇编语言也忘得很多,但我们决不后退,先从课本看起,把汇编语言这一关先搞定,再网上查文献,图书馆借资料,终于基本完成了我们的设计。

我们觉得这也许就是一个成长的过程,常有一些困难,也许这就是在对我们提出了挑战,只有想办法战胜他,才可能胜利。

本次设计也有不足之处,比如最后数码管显示频率,是参考的文献资料,由于文献资料用词比较高深,对于这里的原理还不是很清楚,所以最后数码管显示没有仿真,希望在接下来的时间把它弄清楚或者答辩中请教老师。

总之,本次单片机课程设计让我学到了许多东西:

第一,就是对资料的搜索、保存的能力是一个至关重要的个人能力。

如果没有这种能力,在大学学习阶段,那么我们的学习将会是一种负担;

资料的占有,可能决定一个人成功与否,第二,我们要学会坚持不懈,看到困难首先就放弃了,是不能成功的。

第三,扎实学习,专业软件的应用很重要。

在这个计算机高度发达的社会,机会什么东西都要在电脑上模拟一下,防真一下,所以专业软件的熟练应用反映一个人的科学素养。

因此,我们真的要珍惜现在时光,循序渐进的培养这些能力,这样才不会被落下。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1