基于单片机的波形发生器的设计.docx
《基于单片机的波形发生器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的波形发生器的设计.docx(19页珍藏版)》请在冰豆网上搜索。
基于单片机的波形发生器的设计
课程设计(论文)
题目名称基于单片机的波形发生器设计
课程名称单片机原理及在电气与测控学科中的应用
学生姓名
学号0941201090
系、专业电气工程系、电气测控类
指导教师
2011年6月16日
邵阳学院课程设计(论文)评阅表
学生姓名学号0941201090
系电气工程系专业班级测控2班
题目名称基于单片机的波形发生器设计课程名称单片机原理及在电气与测控学科中的应用
一、学生自我总结
通过这次课程设计,让我进一步加深了对单片机及在电气与测控学科中的应用这门课程的了解,更重要的是培养了我的创新的能力。
这次设计是一次理论知识和动手能力的综合演练,虽然在设计过程中遇到了一些困难,但经过一次又一次的思考,以及参考一些文献和在老师的帮组下终于找出了原因解决了问题,同时也培养了我团队合作的能力。
虽然只有短短的一周,但我却过得非常充实。
学生签名:
年月日
二、指导教师评定
评分项目
平时成绩
论文
答辩
综合成绩
权重
30
40
30
单项成绩
指导教师评语:
指导教师(签名):
年月日
注:
1、本表是学生课程设计(论文)成绩评定的依据,装订在设计说明书(或论文)的“任务书”页后面;
2、表中的“评分项目”及“权重”根据各系的考核细则和评分标准确定。
目录
摘要………………………………………………………………………………………Ⅰ
1课程设计的意义……………………………………………………………………1
2设计方案简介………………………………………………………………………1
2.1波形发生器原理…………………………………………………………………2
2.2总体设计方案……………………………………………………………………2
3硬件设计简介………………………………………………………………………2
3.1硬件电路…………………………………………………………………………2
3.2复位电路…………………………………………………………………………2
3.3晶振电路…………………………………………………………………………4
4软件设计简介………………………………………………………………………4
4.1主程序流程………………………………………………………………………4
4.2三角波流程………………………………………………………………………5
4.3方波流程…………………………………………………………………………6
4.4正弦波流程…………………………………………………………………………7
4.5程序清单……………………………………………………………………………8
5仿真调试……………………………………………………………………………15
5.1Proteus简介……………………………………………………………………15
5.2仿真结果…………………………………………………………………………15
6课程设计体会……………………………………………………………………17
参考文献………………………………………………………………………………20
摘要
本系统是基于AT89C51单片机的波形发生器。
采用AT89C51单片机作为控制核心,外围电路包括数字/模拟转换电路(DAC0832)、运放电路(LM324)、按钮和显示器等。
通过子程序设计产生方波、三角波、正弦波、锯齿波四种波形,通过扫描程序得到按钮信息从而选择输出波形,通过开关可以调节频率,调节滑动变阻器可以改变幅度,最终波形显示在显示器上。
其设计简单、性能良好,可用于多种需要低频波形信号的场所,具有一定的实用性。
关键词:
单片机;按钮;显示器
1课程设计的意义
在平时的学习中,我们所学的知识大都是课本上的,在机房的练习大家也都是分散的对各个章节的内容进行练习。
因此,缺乏一种系统的设计锻炼。
在课程所学结束以后,做这样的课程设计其意义在于:
(1)利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、提高我们的综合应用能力。
(2)我们这次的课程设计是以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、方波、梯形波等)且频率、幅度可变的函数发生器。
(3)掌握各个接口芯片(如0832等)的功能特性及接口方法,并能运用其实现一个简单的微机应用系统功能器件。
(5)通过这几个波形进行组合形成了一个函数发生器,使得我对系统的整个框架的设计有了一个很好的锻炼。
这不仅有助于大家找到自己感兴趣的题目,更可以锻炼大家单片机知识的应用。
2设计方案简介
2.1波形发生器的原理
本文利用AT89C51单片机接数模转换器和运算放大电路,用用户通过按钮选择输出4种基本波形:
方波、锯齿波、正弦波和三角波。
方波由单片机将最大值和最小值输出给D/A转换器进行转换,并由用户通过按钮开关选择波形周期。
与微处理器兼容的8位数模转换器DAC8032进行转换为模拟电压信号,通过运放电路得到方波、锯齿波、正弦波和三角波,波形保证了它的精度、平滑、稳定。
以产生正弦波为例,采用定点法来产生波形,即将一个周期的正弦波按360度等分为若干点,计算出各点的正弦函数值,并转换相应的D/A转换器输入数值,这样得到一个正弦函数表。
通过程序将该表程序存储器中,利用单片机的定时器来产生定时,每当定时时间到,查表的该点对应的输出值,然后通过D/A转换器转换得到该点的对应电压值。
如此,反复的查表输出,就得到所谓的正弦波。
由于一个周期正弦波的点数固定,改变定时器的定时值,就可以改变正弦波的频率值。
锯齿波和三角波的产生类似于正弦波。
方波的产生较简单,只要交替地将最大值和最小值输出给D/A转换器进行转换即可,它们的延续时间为周期的一半。
2.2总体设计方案
根据设计需要,可采用单片机程序产生4种波形,并通过一片D/A转换器输出。
另外,采用一个滑动变阻器来改变参考电压,从而改变输出波形幅值,见图2.1所示。
通过按钮或开关来设定波形的类型、频率。
图2.1波形发生器原理框图
3硬件设计
3.1硬件电路
波形的产生是通过AT89S52单片机执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。
AT89S52单片机的最小系统有三种联接方式。
一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送D/A转换电路。
第二种是单级缓冲器型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。
第三种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换。
3.2复位电路
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,根据应用的要求,复位操作通常有两种基本形式:
上电复位和上电或开关复位。
上电复位要求接通电源后,自动实现复位操作。
上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作,复位电路如图3.2所示,硬件电路如图3.1所示。
图3.1硬件电路
图3.2复位电路
3.3晶振电路
为什么要用晶振电路?
单片机工作,是一条一条的从ROM中取指令,然后一步一步的运行。
单片机访问一次存储器的时间,就是一个机器周期,这是一个时间基准。
一个机器周期包括12个时钟周期。
因为没有晶振,就没有时钟周期,没有时钟周期,就没有机器周期,没有机器周期,就无法运行程序代码,单片机就无法工作。
由此可见,必须要有晶振电路。
单片机的晶振电路是一种典型的电路,晶振频率一般选择在4MHZ-12MHZ之间,外接两个晶振电容,该电容的典型值为30pF,电路图如图3.3所示。
图3.3晶振电路
4软件设计
4.1主程序流程
系统软件由主程序和产生波形的子程序组成,软件设计重点是设计各种波形的子程序的程序,通过编程可得到各种波形,波形产生原理可参照2.1波形发生器原理一节。
波形周期的改变可采用插入延时子程序的方法来实现。
主程序开始后通过读取按钮状态,判别是哪种波形需求,然后调用相应的子程序,输出相应的波形。
利用8位D/A转换器DAC0832,可以将8位数字量转换成模拟量输出。
数字量输入的范围为0~255,对应的模拟量输出的范围在VREF-到VREF+之间。
根据这一特性,可以利用单片机的并行口输出的数字量,产生常用的波形。
波的幅度调节范围:
0.87v~9.54v。
主程序流程图如图4.1所示。
图4.1主程序流程图
4.2三角波流程
三角波的流程是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作,这个操作跟锯齿波的实现是相似的。
此程序输入的VREF的电压是+5V,因此该波形输出的最大频率是初值为00H和最终值为0FFH,且步数为1,这样输出的波形是最大的。
程序流程图如图4.2所示:
图4.2程序流程图
4.3方波流程
此波形的实现更加简单,只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。
这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。
流程图如图4.3所示:
图4.3方波流程图
4.4正弦波流程
正弦波的实现则相对比较复杂,因为正弦波的实现是输出各个点的值就行了,可是各个点值则要通过正弦函数来求出,不过这些值直接去网上下载下来使用就可以了。
输出的数据刚好是256个数据,这样则可以直接相加就行了。
流程图如4.4所示
图4.4正弦波流程图
4.5程序清单如下
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
JNBP1.0,p10
JNBP1.1,P11
JNBP1.2,P12
JNBP1.3,P13
LJMPMAIN
p10:
MOVR7,#00H
LCALLSQU
LJMPMAIN
P11:
MOVR7,#01H
LCALLSAW
LJMPMAIN
P12:
MOVR7,#02H
LCALLTRI
LJMPMAIN
P13:
MOVR7,#03H
LCALLSIN
LJMPMAIN
SQU:
JNBP1.1,N1
JNBP1.2,N2
JNBP1.3,N3
LJMPSSQU
N1:
MOVR7,#01H
LJMPTC0
N2:
MOVR7,#02H
LJMPTC0
N3:
MOVR7,#03H
LJMPTC0
SSQU:
CJNER7,#00H,TC0
MOVR0,#00H
;MOVDPTR,#7FFFH
K00:
MOVA,#0FFH
MOVX@DPTR,A
MOVP0,#0FFH
MOVP2,#0FFH
MOVA,P2
CPLA
MOVR3,A
L00:
DECR3
CJNER3,#255,L00
INCR0
INCR0
CJNER0,#254,K00
MOVR0,#00H
K01:
MOVA,#00H
MOVX@DPTR,A
MOVP0,#00H
MOVP2,#0FFH
MOVA,P2
CPLA
MOVR3,A
L01:
DECR3
CJNER3,#255,L01
INCR0
INCR0
CJNER0,#254,K01
LJMPSQU
TC0:
RET
SAW:
JNBP1.0,N4
JNBP1.2,N5
JNBP1.3,N6
LJMPSSAW
N4:
MOVR7,#00H
LJMPTC1
N5:
MOVR7,#02H
LJMPTC1
N6:
MOVR7,#03H
LJMPTC1
SSAW:
CJNER7,#01H,TC1
MOVR0,#0FFH
MOVDPTR,#7FFFH
K10:
MOVA,R0
MOVX@DPTR,A
MOVP0,R0
MOVP2,#0FFH
MOVA,P2
CPLA
MOVR3,A
L10:
DECR3
CJNER3,#255,L10
INCR0
CJNER0,#255,K10
LJMPSAW
TC1:
RET
TRI:
JNBP1.0,N7
JNBP1.1,N8
JNBP1.3,N9
LJMPTTRI
N7:
MOVR7,#00H
LJMPTC2
N8:
MOVR7,#01H
LJMPTC2
N9:
MOVR7,#03H
LJMPTC2
TTRI:
CJNER7,#02H,TC2
MOVR0,#00H
MOVDPTR,#7FFFH
K20:
MOVA,R0
MOVX@DPTR,A
MOVP0,R0
MOVP2,#0FFH
MOVA,P2
CPLA
MOVR3,A
L20:
DECR3
CJNER3,#255,L20
INCR0
INCR0
CJNER0,#254,K20
K21:
MOVA,R0
MOVX@DPTR,A
MOVP0,R0
MOVP2,#0FFH
MOVA,P2
CPLA
MOVR3,A
L21:
DECR3
CJNER3,#255,L21
DECR0
DECR0
CJNER0,#0,K21
LJMPTRI
TC2:
RET
SIN:
JNBP1.0,N10
JNBP1.1,N11
JNBP1.2,N12
LJMPSSIN
N10:
MOVR7,#00H
LJMPTC3
N11:
MOVR7,#01H
LJMPTC3
N12:
MOVR7,#02H
LJMPTC3
SSIN:
CJNER7,#03H,TC3
MOVR0,#00H
MOVDPTR,#7FFFH
K30:
MOVA,R0
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPTR,#7FFFH
MOVX@DPTR,A
MOVP0,A
INCR0
MOVP2,#0FFH
MOVA,P2
CPLA
MOVR3,A
L30:
DECR3
CJNER3,#255,L30
CJNER0,#255,K30
LJMPSIN
TC3:
RET
TAB:
DB80H,82H,84H,86H,88H,8AH,8CH,8EH,90H,92H,94H,96H,98H,9AH,9CH,9EH
DB0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ABH,0ADH,0AFH,0B1H,0B2H,0B4H,0B6H,0B7H,0B9H,0BAH
DB
0BCH,0BDH,0BFH,0C0H,0C1H,0C3H,0C4H,0C5H,0C6H,0C8H,0C9H,0CAH,0CBH,0CCH,0CDH,0CEH
DB
0CEH,0CFH,0D0H,0D1H,0D1H,0D2H,0D2H,0D3H,0D3H,0D4H,0D4H,0D4H,0D4H,0D5H,0D5H,0D5H
DB
0D5H,0D5H,0D5H,0D5H,0D4H,0D4H,0D4H,0D4H,0D3H,0D3H,0D2H,0D2H,0D1H,0D1H,0D0H,0CFH
DB
0CEH,0CEH,0CDH,0CCH,0CBH,0CAH,0C9H,0C8H,0C6H,0C5H,0C4H,0C3H,0C1H,0C0H,0BFH,0BDH
DB0BCH,0BAH,0B9H,0B7H,0B6H,0B4H,0B2H,0B1H,0AFH,0ADH,0ABH,0AAH,0A8H,0A6H,0A4H,0A2H
DB0A0H,9EH,9CH,9AH,98H,96H,94H,92H,90H,8EH,8CH,8AH,88H,86H,84H,82H
DB80H,7DH,7BH,79H,77H,75H,73H,71H,6FH,6DH,6BH,69H,67H,65H,63H,61H
DB5FH,5DH,5BH,59H,57H,55H,54H,52H,50H,4EH,4DH,4BH,49H,48H,46H,45H
DB43H,42H,40H,3FH,3EH,3CH,3BH,3AH,39H,37H,36H,35H,34H,33H,32H,31H
DB31H,30H,2FH,2EH,2EH,2DH,2DH,2CH,2CH,2BH,2BH,2BH,2BH,2AH,2AH,2AH
DB2AH,2AH,2AH,2AH,2BH,2BH,2BH,2BH,2CH,2CH,2DH,2DH,2EH,2EH,2FH,30H
DB31H,31H,32H,33H,34H,35H,36H,37H,39H,3AH,3BH,3CH,3EH,3FH,40H,42H
DB43H,45H,46H,48H,49H,4BH,4DH,4EH,50H,52H,54H,55H,57H,59H,5BH,5DH
DB5FH,61H,63H,65H,67H,69H,6BH,6DH,6FH,71H,73H,75H,77H,79H,7BH,7DH
END
5.仿真调试
5.1Proteus简介
Proteus是一款仿真软件。
它能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持AT89系列单片机。
5.2仿真结果
四种波形仿真结果分别如图5.1,图5.2,图5.3,图5.4所示。
图5.1方波仿真结果
图5.2锯齿波仿真结果
图5.3三角波仿真结果
图5.4正弦波
6心得体会
经过将一周的单片机课程设计,终于完成了我的波形发生器的设计,基本达到设计要求!
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。