欢迎来到天天文库
浏览记录
ID:13076475
大小:241.00 KB
页数:6页
时间:2018-07-20
《实验五硬件电子琴》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验五硬件电子琴----《化蝶》乐曲演奏的实现实验目的:***了解蜂鸣器发生原理和硬件实现乐曲演奏的原理。***了解数控分频器的工作原理;***进一步熟悉VerilogHDL的设计方法;实验原理:根据蜂鸣器输入信号频率的不同决定了其发声不同的原理,来设计一个由数控分频器控制蜂鸣器发声的简单实验。数控分频器的预置值由乐曲的音调的值来决定,从而间接的控制蜂鸣器的发声频率。1.乐曲选取《梁祝》中化蝶部分,其简谱如下图所示。2.音符与频率的关系我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,首先让我们来了解音符和频率的关
2、系。乐曲的12平均率规定:每2个八度音(如简谱中的中音1和高音1)之间的频率相差1倍。在2个八度音之间,又可以分为12个半音,音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间是半音,其余为全音。由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如下表所示产生各音符所需的频率可用一个分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差标校,但会增加分频器的分频级数。实际的设计应综合考虑
3、两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。这里设计的乐曲发生器选取5MHz的基准频率。即使基准频率有所变化,实际上,只要各个音符间的相对平铝关系不变,演奏出的乐曲听起来都不会“走调”。化蝶简谱中各音符对应的分频系数如下表所示:为了减小输出的偶次谐波分量,最后输出到蜂鸣器的波形应是对称方波,因此在到达蜂鸣器之前,有一个二分频的分频器,所以上表中的分频系数是从5MHz频率二分频得到的2.5MHz频率基础上计算得到的。由于最大的分频系数为7584,故采用13位二进制计数器已能满足分频要求。每个音符持续的时间是乐曲能连续演奏所需的另一个基本要素。
4、化蝶的最小的节拍为1/4拍,将1拍的时间长度定为1秒,则只需要再提供一个4Hz的时钟频率即可产生1/4拍的时长。演奏的时间控制通过记录来完成,对于占用时间较长的节拍(一定是1/4拍的整数倍,如n/4拍),只需将该音符连续记录n次即可。1.模块设计下图是化蝶乐曲发生器的部分顶层电路:音符的频率由pulse模块输出至spk发声,这是一个数控分频器,但其clk5mhz端输入5MHz脉冲信号,分频比由预置输入端d[12..0]决定。输出为对称脉冲方波信号,其频率为2500000/(1+d[12..0]),单位为Hz。音符的持续时间需根据乐曲的速度及每个音符的节拍
5、数来确定,tonetable模块首先是为pulse模块提供决定所发音符的分频预置数,而此数停留的时间即为此音符的节拍值。在tonetable模块中设置了一个8位二进制计数器(计数最大值为135,即相当于有135个四分音符),这个计数器的计数频率选为4Hz,所以每一个计数值的停留时间为0.25秒,即四四拍的四分音符持续时间。例如,化蝶乐曲的第一个音符为“低音3”(1拍),停留的时间需用4个计数时钟节拍,即1秒。相应地,所对应的“低音3”音符分频预置值为7583,其值在tonetable模块输出端停留了1秒。随着tonetable模块中的计数器按4Hz的时钟
6、速率递增并依次输出分频预置数,化蝶乐曲就开始连续自然地演奏起来了。音符tonetable模块的参考设计如下://tonetablemoduletonetable(clk4hz,predata);inputclk4hz;output[12:0]predata;reg[12:0]predata;parameterlow_3=13'd7583;parameterlow_5=13'd6377;parameterlow_6=13'd5681;parameterlow_7=13'd5062;parametermid_1=13'd4777;parametermid_2
7、=13'd4256;parametermid_3=13'd3791;parametermid_5=13'd3188;parametermid_6=13'd2840;parameterhigh_1=13'd2391;parameterstop=13'd0;reg[7:0]counter;always@(posedgeclk4hz)if(counter>=135)counter=8'b0;elsecounter=counter+1'b1;always@(counter)case(counter)8'd0:predata=low_3;8'd1:predata=
8、low_3;8'd2:predata=low_3;8'd3:predata=lo
此文档下载收益归作者所有