资源描述
2025-3-8黑龙江科技学院 计算机科学与技术2007级控制01班 周伟
15
设计题目:简易波形发生器设计
设计目的:用单片机产生各种波形及改变波形频率
设计目标:设计一个简易波形发生器,要求该系统能通过开关或按钮有选择性的输出正弦波、三角波、方波、及阶梯波等四种波形,并且这四种波形的频率均可通过输入电位器在一定范围内调节
任务下达时间:2010年3月1日
任务完成时间:2010年3月11日
指导教师评语:
年 月 日
设计成绩:
摘要:单片机主要面对的是测控对象,突出的是控制功能,所以它从功能和形态上来说都是应测控领域应用的要求而诞生的。随着单片机技术的发展,它在芯片内部集成了许多面对测控对象的接口电路,如ADC、DAC、高速I/O接口、脉冲宽度调制器(Pulse Width Modulator, PWM)、监视定时器(Watch Dog Timer,WDT)等。这些对外电路及外设接口已经突破了微型计算机传统的体系结构,所以单片机也称为微控制器(Micro Controller)。
关键词:中央处理器;随机存储器;只读存储器
黑龙江科技学院 计算机科学与技术2007级控制01班 周伟
黑龙江科技学院 计算机科学与技术2007级控制01班 周伟
引言:一般函数发生器是由硬件组成的,它的输出频率范围宽,各项指标高,性能优良,因而在对输出波形要求较高的地方被广泛应用,这种仪器的缺点是电路复杂,成本高,输出波形种类不多,不够灵活。在对波形指标要求不高,频率要求较低的场合,可以用单片机构成一个波形发生器。产生所需要的各种波形,这样的函数发生器靠软件产生各种波形,小巧灵活,便于修改,且成本低廉,容易实现。
1设计概述
1.1 课程设计的目的
通过对本课题的设计,掌握A/D,D/A转换的应用,用单片机产生各种波形的方法及改变波形频率的方法。熟悉单片机应用系统的设计以及软硬件的调试。单片机本身并没有开发能力,必须借助开发工具即硬件开发环境才能进行开发。单片机的硬件开发环境有PC机、编程器和仿真机等。
1.2 设计的内容、要求
设计一个简易波形发生器,要求该系统能通过开关或按钮有选择性的输出正弦波、三角波、方波、及阶梯波等四种波形,并且这四种波形的频率均可通过输入电位器在一定范围内调节。
对于四种波形的切换,用两个开关的四种状态来表示(或用按钮)。选用常用的A/D转换芯片0809来实现模拟量的输入。D/A转换器选用0832来输出波形。
2概要分析
2.1 方案论证
一般函数发生器是由硬件组成的,它的输出频率范围宽,各项指标高,性能优良,因而在对输出波形要求较高的地方被广泛应用,这种仪器的缺点是电路复杂,成本高,输出波形种类不多,不够灵活。在对波形指标要求不高,频率要求较低的场合,可以用单片机构成一个波形发生器。产生所需要的各种波形,这样的函数发生器靠软件产生各种波形,小巧灵活,便于修改,且成本低廉,容易实现。但受单片机工作频率的限制,它所构成的波形发生器的输出频率较低,各项指标也都不太高,只能用于波形要求不高的场合。
2.2 硬件设计
根据设计要求,可以考虑四种波形切换,用两个开关的四种状态来实现。需要两根口线,如果用按钮来切换波形就只需要一根I/O线,而且使用也方便一些。另外,波形频率的改变是通过电位器输入电压来实现的,所以需要一个模拟量输入,选用常用的A/D转换器芯片0809可以满足要求。波形输出是通过D/A转换器实现的,可以选用D/A专用芯片0832来完成。这样系统的主要器件就确定了。其系统原理图如图1所示。
系统选用6MHZ晶振,如用12MHZ晶振,则输出波形的频率可得到相应提高。A/D转换器芯片的地址按图中所示接线为7000H,采样通道为IN0,三个通道地址选择端ADD-A,ADD-B及ADD-C接在数据线上,也可以接到P2口线上,只是按图所示接线,在启动A/D转换器时,累加器A中应送通道值。当然,按设计要求也可将这三根地址线接地,但这样不利于系统扩展,0809EOC端在A/D转换结束后会产生一个上跳变,将其接到P3.2口,这样当A/D转换结束时可按等待及查询两种方式读取数据,编程较为灵活,若采取中断方式读取结果,从EOC输出的信号应加反相器后再送到P3.2口,以便与单片机的中断逻辑相匹配。分频器74ALS74将1MHZ的地址锁存信号四分频,变为250KHZ脉冲后,提供给0809作为其工作脉冲。D/A转换器芯片DAC0832将单片机输入的数字量转变为电流信号并以差分方式送给运算放大器LM324,后者将其变为电压信号输出。若要得到正负电压,则应该为运算放大器提供正负电源。按途中所示,接线0832地址为8000H。
图1 硬件连线图
3详细分析
中断入口
开始
根据硬件设计,系统用按钮切换波形,可考虑采用查询或中断方式进行,这两种方式比较起来后者效率更高。若采用查询方式检测按钮,则系统需花费时间去定期检测P3.3口管脚电位,这样就增加了软件开销,降低了效率,因此采用中断方式编程比较理想。其编程思想是安排一个存储单元存放按钮次数,初值设为0,对应于某种波形,每中断一次数据加1,以对应另一种波形。因此中断程序的任务仅仅是通过改变按钮的次数来存放单元的数据而已,波形转换在主程序中进行。各种波形的输出频率是通过改变两次输出数据之间的时间间隔来实现的。具体做法是首先对模拟量进行采样,得到相应的A/D值用这个A/D值作为延时基数进行延时,这样输出波形的频率就和模拟电压联系起来,只要调整电位器旋钮改变输入电压模拟量,就可以改变波形频率。主程序框图和中断程序框图如图2所示。
保护现场
初始化
延时去抖
读标志单元
调整标志
调整标志
N
=3
=2
=0
=1
P3.2=1
正弦波
阶梯波
方波
三角波
Y
恢复现场
读A/D转换值
中断返回
根据A/D值延时
图2 主程序及中断程序框图
下面分析各种波形的产生原理。
1.正弦波
正弦波可用两种方法,即计算法和查表法产生。计算法要用浮点运算,复杂且耗时太长,一般不采用。查表法是事先将正弦波的数据计算出来,列表放在程序中,运行时直接调取数据。用公式y=127.5+127.5sin(360n/m)可计算出正弦波的输出值,公式中的m为输出点数,n=1,2,…m。m值取小一些可以提高波形频率,但波形畸变会增大,增加输出点虽然可以改善波形,但输出频率会降低,实践表明,m取64时,可以得到很好的正弦波。用上式计算的正弦波如下(有舍入误差),将它放在程序中调用即可。
TAB:DB 140,152,164,176,188,198,208,218,226,234,240,245,253,254,255
DB 254,253,245,240,234,226,218,208,198,188,176,164,152,140,128
DB 115,103,90,79,67,57,47,37,29,21,15,10,5,2,1,0
DB 1,2,5,10,15,21,29,37,47,57,67,79,90,103,115,128
2.三角波
三角波的产生较为简单,因为它的上升沿遵循数据加1的规律。下降沿则按数据减1的规律产生。所以在波形的上升沿只要判断上一次的数据是否为最大值FFH,如果不是最大值,将原数据加1输出;而在波形的下降沿只要判断上一次数据是否为0,如果不是0,则将原数据减1即可,当数据为FFH或0时,应当及时调整升降标志,以便下一次能输出正确的数据。根据上述编程思想绘制的三角波程序框图如图3所示。
3.方波
方波只有两个值,可以采用两个极端值0和FFH,这样只要将缓冲区中的数取出求反后输出即可。设计者可据此直接写出方波程序。
4.阶梯波
阶梯波也是一种很有用的波形,例如,在测晶体管的特性参数时就要用到它。阶梯的设计一般根据实际需要,在这里假定设置五级阶梯,可以将缓冲区中的数据增加到50后输出,如初值为0,则输出的数就是0、50、100、150、200及250这六个数。
为了将这六个数顺次输出,可以采用列表或将原数加50再判断这两种方式。采用后者输出数据的阶梯波程序框图如图4所示。
5.频率控制
每种波形输出一个数据后程序都转到程序控制部分,各种波形的频率就是通过这一部分控制的。它的控制原理是首先读出0809的A/D转换值,并以此为基值延时,延时完毕后再启动0809开始采样模拟电压,为下一次读数做准备。当然,也可以隔几秒钟进行一次A/D转换,这样要用到定时器中断。若直接将A/D转换值作为延时基数去延时,则频率的变换范围有限。若将A/D转换值乘以一个倍率再去延时,虽然可扩大频率的变化范围,但波形的失真会明显增大。
读取数据缓冲单元
N
输出缓冲区数据
是上升沿?
Y
数据输出后—1
数据=250?
N
数据输出后+1
Y
N
数据=00H?
数据=OFFH?
数据+50
缓冲区清零
Y
Y
置上升标志
保存数据
置下降标志
转频率控制
跳出
图4 阶梯波程序框图
图3 三角波程序框图
4程序的调试与运行
完成硬件制作后,可将整个系统分成几个部分,先编出四种波形的程序,单独调试,成功后再加入频率调节部分。采用图2-2-1所示参数,正弦波的最高输出频率可大于200HZ,方波的最高输出频率在4KHZ左右,如果12MHZ晶振,则各种波形的最高输出频率可提高1倍。另外,按钮的抗干扰问题在编程时要加以考虑,由于图2-2-1所示电路中没有加硬件消除按钮抖动电路,所以必然要增加软件开销。一般开关、按钮的抖动在几毫秒时间以内,因而用延时程序避开10ms左右的时间即可防止按一次按钮产生多次中断的现象。为了节省硬件,0809的转换完成信号端EOC直接接到了单片机外部中断0输入端P3.2上。由于中断逻辑不匹配,因而不能用中断的方式读取A/D转换结果。最后,在程序统调时要借助调试工具采用单步和断点及连续运行的方式反复调试程序,迅速找出问题所在,及时修改,直至程序运行成功为止。
结论
通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。正所谓纸上得来终觉浅,绝知此事要躬行。
课程设计体会
两周的课程设计,我加深了对单片机的了解与应用,学会了如何把理论应用于实际,如何用我们所学的知识去解决正常生活中的问题。在当今科技发展如此迅速的时代,计算机已经成为了必不可少的工具,它无处不在,学习掌握计算机的技能已成为一项必修课,想要在这个社会有一立足之处,就必须学好计算机,能准确的掌握计算机知识,并熟练的贯彻到生活之中。
附录 程序清单:
;0809地址7000H,0832地址8000H,
0H位=0三角波上升沿标志
org 0000
ajmp main
org 0013h
ljmp int_x1
org 0030h
main:
mov sp,#60h ;初始化
mov a,#00
mov dptr,#7000h ;启动0809
movx @dptr,a
mov ie,84h
clr it0
clr 0 ;上升标志
mov r4,#0
mov 10h,#0 ;正弦波数据指针
mov 11h,#0 ;三角波初值
mov 12h,#0 ;方波初值
mov 13h,#0 ;梯形波初值
sign: mov a,r4
rl a
mov dptr,#base
jmp @a+dptr
base: ajmp wave1 ;转正弦波程序
ajmp wave2 ;转三角波程序
ajmp wave3 ;转方波程序
ajmp wave4 ;转梯形波程序
wave1:
mov dptr,#tab
mov a,10h ;取数据指针
movc a,@a+dptr ;查表
mov dptr,#8000h ;0832地址
movx @dptr,a ;输出到0832
mov a,10h
cjne a,#63,w11
mov 10h,#0 ;指针回0
ajmp w12
w11: inc a ;调整指针
mov 10h,a ;正弦波程序结束
w12:
ajmp zad
wave2: ;三角波程序
mov a,11h
jb 0,down
mov dptr,#8000h
movx @dptr,a
inc a
mov 11h,a
cjne a,#0ffh,zad
setb 0
ajmp zad
down:
mov dptr,#8000h
movx @dptr,a
dec a
mov 11h,a
cjne a,#0,zad
clr 0
ajmp zad ;三角波程序结束
wave3: ;方波程序
mov dptr,#8000h
mov a,12h
movx @dptr,a
cpl a
mov 12h,a
ajmp zad ;方波程序结束
wave4: ;梯形波程序
mov dptr,#8000h
mov a,13h
movx @dptr,a
cjne a,#250,w41
mov 13h,#0
ajmp zad
w41: add a,#50
mov 13h,a
ajmp zad ;梯形波程序结束
zad: mov dptr,#7000h ;频率控制程序
jnb p3.2 ,$ ;没转换完,等待
movx a,@dptr
jz skip
djnz acc,$ ;根据A/D转换值延时
skip: movx @dptr,a ;启动0809
ljmp sign ;频率控制程序结束
int_x1:push acc ;外部中断1中断子程序
acall delay
jb p3.3,wexit
mov a,r4
inc a
anl a,#3 ;调整
mov r4,a ;保存标志
jnb p3.3,$
wexit:
pop acc
reti ;中断子程序结束
delay:
mov r6,#10 ;10ms延时子程序
del: mov r7,#250
djnz r7,$
djnz r6,del
ret
tab: db 140,152,164,176,188,198,208,218,226,234,240,245,253,254,255
db 254,253,245,240,234,226,218,208,198,188,176,164,152,140,128
db 115,103,90,79,67,57,47,37,29,21,15,10,5,2,1,0
db 1,2,5,10,15,21,29,37,47,57,67,79,90,103,115,128
end
参考文献
1 马忠梅.单片机的C语言应用程序设计[M].北京;北京航空肮天大学出版社,1996.
2 何立民.单片机应用系统设计[M].北京航空航天大学,1996.
3 李 华.MCS—51系列单片实用接口技术[M].北京:北京航空航天大学出版社,1993.
4 何立民.单片机应用技术选编(一)[M]北京:北京航空航天大学出版社,1993.
5 梁 钥,李爱齐.C语言程序设计实用技术与程序实例[M].上海:上海科普出版社,1996.
6 邬宽明.单片机外围器件实用手册(数据传输接口器件分册)[M].北京:北京航空航天大学出版社.2002.
7 李胡育.单片机原理及接口技术[M].北京:北京航空航天大学出版社,1994.
展开阅读全文