基于FPGA的音乐播放控制电路设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

音乐播放器控制电路课程设计报告
班级:
学号:
姓名:
指导老师:
一、设计目的
将《断桥残雪》简谱按照要求进行编码并将其写入只读存储器ROM之中,然后通过设计的电路读出ROM的内容,进行解码后驱动蜂鸣器播放。

二、开发环境
采用Altera Quartus II 9.0软件设计环境。

它提供了全面的逻辑设计能力,包括电路图、文本和波形的设计输入以及编译、逻辑综合、仿真和定时分析以及器件编程等诸多功能。

特别是在原理图输入等方面,Altera Quartus II 9.0被公认为是最易使用、人机界面最友好开发软件。

并采用FPGALP-2900开发装置硬件实现,给人们带来极大的方便。

三、设计过程概述
1、数字简谱简介
数字简谱用不同的点和线段配合8个阿拉伯数字0~7构成音符,记录表示千变万化的音乐曲子及其基本音乐元素。

乐音是由三个要素决定的:频率决定了乐音的音高,频谱决定过了乐音的音色,音形标志着演奏方式。

乐曲的基本元素是:音的高低(音高)、音的长短(时值)、音的力度和音质(音色)。

音的高低和长短不同决定了乐曲的不同,因此构成了音乐的最重要的基础元素。

音乐用1、2、3、4、5、6、7分别表示同一调式7个不同的音高:多、来、米、法、索、拉、西。

这七个数字上、下标注的点表示音调升高8度音程或降低8度音程。

数字0为休止符,表示停止发音。

数字下或数字上的线段表示因的持续时间的长短。

没有线段的数字为4分音符,器时值为音长的基本度量单元,成为一拍。

数字下面标注的线段表示时间减短,没增加一条线段,表示时值减少一半,音符相应的成为8分音、16分音……数字后面的线段称为延长线,表示前一个音符的市场的增加,每条延长线的时值增量为1拍。

音长是一个相对的时间概念,一拍的时间长度没有限制,可以是1s,也可以是2s或是0.5s,。

若将4分音符的时长定为1s,其他音符的时值长度以其为基本参照度量,半拍为0.5s,2拍为2s,以此类推。

2、音高与频率关系
20Hz至20KHz的音频脉冲信号控制蜂鸣器,可以使其根据控制信号的频率发出不同的音调。

一般的音乐我们可以用3个8度音程进行表现,不同的音名和音程具有不同的频率,由此我们可以设计出电子电路根据音符控制输入到蜂鸣器中的频率,从而发出我们想要的声音。

3个八度音程的音高与频率关系
各音高的频率关系:每两个相差8度的音高频率相差一倍.
若计数器输出频率的为高音1,将分频器输入的计数脉冲频率降低一倍,则音调降低8度,发出中音1。

3、音高控制
根据简谱音符的音高控制蜂鸣器频率。

数字电路中,模N的计数器溢出信号的频率是计数脉冲信号频率的1/N。

所以,可以设计一个模可控的计数器实现不同的分频比,使溢出信号频率满足不同的音高要求。

由于三个8度音程中相同音名的信号频率相差一倍。

所以在分频系数不变时,将计数脉冲频率升高(或降低)一倍可使分频器的溢出信号频率升高(或降低)一倍,音调升高(或降低)8度。

4、音长控制
某个音符音长由该音高频率信号的持续时间长短决定
可采用一个计数器对音长进行定时,计数脉冲周期是乐谱时值,决定了该单元音符的持续时间。

所以,可采用计数器对音长进行定时,计数脉冲周期为所选乐谱中时值最短音符的时值,其它音符的音长定时可根据其时值与最短音符音长(度量单位)的倍数关系持续不同的计数脉冲周期。

比如:乐谱中最短音符为8分音长,则4分音符为2个时钟周期,而全音符为8个时钟周期。

5、总体设计思路
①要制作播放器,首先要解决的问题就是找一个能够产生固定频率的源,在这
里很容易实现,我们使用一个10M的晶振,当其接上适当的电路之后,其将发出恒定的振荡波形。

②有了10M的信号源之后,怎样才能使其变成驱动蜂鸣器发出我们需要的声音
的信号,这里我们使用分频器来实现。

③为了发出不同音名的音,用计数器来实现分频器要常常改变分频系数,这里
我们选用一个模可变的计数器来完成这个功能。

④对于如何实现复位控制环节,由于音程码只能用到其中的三种组合,还有一
种可以用作复位信号,当播放到最后一个音节的时候,复位信号有效,经过复位控制产生一个有效电平使得时值计数器清零,实现音乐的循环播放。

⑤对于如何实现间断音控制环节,从“曲谱储存表”中读出间断音控制位被送
入间断音控制环节,这个环节的单稳会产生一个相当于十分之一“音符播放长度”的脉冲,使得计数使能无效产生间断。

⑥对于如何实现不同的音高,选择两个独立的二分频元件对10M的输入信号实
现两次二分频,利用一片74153来实现数据选择,根据“曲谱表”中的音程码控制数据选择器选出需要的频率实现不同的音高。

⑦为了实现音乐播放的连续性,我们把乐谱存储到ROM中,播放电路的通取ROM
中的内容经过特殊的解码操作便可以得到我们需要的计数器分频系数。

分频后便是我们需要的驱动蜂鸣器的信号。

6、设计方案原理框图
四、总体设计电路图
.0]
五、单元电路设计与分析
各单元电路的选择与工作原理分析
1、 二分频
功能作用:作为独立的元件使用在总体电路中。

原理分析:使用一个D 触发器和一个非门实现对输入信号的二分频。

独立的二分频元件:
2、 M 分频和时值计数单元
功能作用: 10M 的晶振中输出的脉冲波cp ,通过“M 分频”,作为时钟脉冲输入“时值计数器”,计数器便按照此时钟进行计时,其输出端连接“曲谱储存表”。

原理分析:预设每秒钟播放5个单元的音符,对来自晶振的CP脉冲进行2000000分频(即M分频器lpm_counter2的模取为2000000),其cout端接时值计数器(lpm_counter1)。

时值计数器(lpm_counter1)的q输出做为地址对ROM 进行访问,由于有125个单元的音符,所以选择8位地址线,在图形上表现出就是q[7..0].
3、曲谱存储表
功能作用:“时值计数器”(lpm_counter2)的输出端连接“曲谱储存表”(lpm_rom0),这就可以使其按照地址访问ROM中的数据,从曲谱输出表ROM的输出端输出数据。

“曲谱储存表”(lpm_rom0)中的音名码作为地址被送入“分频系数表”(lpm_rom1).
address[7..0]q[5..0]
lpm_rom0
inst2d[5..0]
f[7..0]
原理分析:按照编码规则,读出的数据一共分为6位,如下表所示
5 4 3 2 1 0
间断音控制音程码(控制音高)音名码(控制音名)
最高位控制间断音控制。

4、3两位是音程码,用于控制高音、中音和低音。

2、1、0这三个是音名码,用于控制音名,选择播放do re mi fa so la si中的哪个音。

曲谱表用一个ROM储存,当address输入相应的地址之后,q段就输出其中的数据。

《断桥残雪》简谱编码
4、分频系数表
功能作用:“曲谱储存表”(lpm_rom0)中的音名码作为地址被送入“分频系数表”(lpm_rom1),这样相应的分频系数就被读了出来,然后被送进N 分频单元中计数器(lpm_counter0)的置数端data[12..0]。

address[2..0]
q[12..0]
lpm_rom1
inst1
d[2..0]
x[12..0]
原理分析:分频系数表用一个如下图所示的ROM 实现,其中的地址(Addr)就代表这个do re mi fa so la si 和休止符这个8个音符的简谱表示。

其中的数值便是分频系数。

5、N 分频单元
功能作用:从“分频系数表”(lpm_rom1)中读出来的分频系数被送进N 分频单元中的计数器(lpm_counter0)的置数端data[12..0],原始的信号经过N 分频便得到需要的信号。

down counter
sload
data[12..0]clock cnt_en
q[12..0]cout
lpm_counter0
inst8
x[12..0]
N 分频 输出
时钟输入计数使能
原理分析:为了方便计算,采用了减计器,cout 端为溢出端,当计数其计到0以后cout 出高电平,使得同步置数sload 段有效,分频系数被从date[12..0]段置入计数器。

6、间断音控制模块
功能作用:从“曲谱储存表”(lpm_rom0)中读出间断音控制位被送入间断
音控制环节,这个环节的单稳会产生一个相当于十分之一“音符播放长度”的脉冲,使得计数使能无效产生间断。

原理分析:由于需要的间断音的长度是普通播放长度的十分之一,所以这里选择200000分频(计数器的模为200000)。

其输出端接一个由两个D 触发器构成的数字单稳电路,产生一个脉冲宽度为输入脉冲正向的一个有效电平,使得计数使能暂时无效,实现间断。

间断音独立元件
7、音高控制电路
功能作用:10M 的晶振中输出的脉冲波cp 连续被两次二分频,最后连同自身被送入一个数据选择权器(即频率选择器)的数据输入端口,其控制段接“曲谱储存表”(lpm_rom0)输出的音程码,根据音程码的要求把不同频率的信号送入到N 分频单元中,便可以实现不同的音高。

输出信号被送进N 分频单元中的计数器(lpm_counter0)的时钟输入信号clock 。

时钟输入
音高控制模块
原理分析:此处选择了之前已经做好的两个独立的二分频元件实现两次二分频,和一片74153来实现数据选择,根据“曲谱表”中的音程码控制数据选择器选出需要的频率实现不同的音高。

8、放音单元
功能作用:在
N 分频单元的输出端用一个2分频器,得到占空比为百分之五十的信号,最后驱动蜂鸣器实现播放功能。

蜂鸣器

原理分析:使用一个D 触发器实现了二分频,使得脉冲占空比为50%,避免了蜂鸣器的不正常工作导致的磁化。

六、部分电路调试
由于电路的结构比较复杂,采用分段调试的方法
1、二分频
电路图:
VCC
a0
INPUT q0
OUTPUT CLRN D
PRN
Q
DFF
inst
VCC
NOT
inst3
调试结果:
2、音高控制电路
电路图:
A
B C3C2
C1
C0GN Y
74153M
inst4
a0
q0
2fen inst a0
q0
2fen inst1
ad[4]ad[3]
时钟输入
音高控制模块
VCC b
INPUT VCC
a
INPUT f enpin
OUTPUT
VCC
cp
INPUT
调试结果:
3、数字单稳
电路图:
CLRN D
PRN
Q DFF inst16CLRN D
PRN
Q
DFF
inst17
NAND2
inst20
NOT
inst21VCC
VCC
cp
INPUT VCC
en
INPUT d[5]
out
OUTPUT
调试结果:
七、拓展电路设计
1、播放显示模块
原理分析:使用一个8421BCD码的译码器将音符的显示在数码管上,显示出实时播放的音符。

2、变速控制模块
①速度控制电路及生成的独立元件
原理分析:将二分频独立元件串联使用,使得播放速度能够以快2倍速的方式逐渐变化,通一个数据选择器74151选择输出不同频率,从而以实现不同速度的播放。

②速度选择模块
原理分析:利用一个加减计数器74192和之前生成的速度控制元件组合,当DN有效,UP无效时(DN=1,UP=0),为减计数,此时实现减速播放功能;当DN无效,UP有效时(DN=0,UP=1),为加计数,此时实现加速播放功能;当DN与UP均无效时(DN=0,UP=0),则输出预置数(0011),即实现常速播放功能。

3、 暂停播放控制单元
暂停控制键
原理分析:在M 分频单元与变速控制单元之间加一个与门,将M 分频单元的计数器(lpm_counter2)的输出端(cout )与暂停控制键(zhanting )相与,得到的输出信号送进速度选择元件的脉冲输入端PC 。

当暂停控制键为1时,对输出没有影响,当暂停控制键为0
时,输出为0,即实现暂停播放功能。

4、 静音播放控制单元
原理分析:在间断音控制单元与N 分频单元之间加一个与门,将静音控制
键(jingyin )与间断音元件的输出端(out )相与,得到的输出信号送进N 分频单元的脉冲输入信号clock 。

当静音控制键为1 时,对输出没有影响,正常播放;当静音控制键为0时,输出为0,此时蜂鸣器无法发出声音,而对前面的电路没有影响,曲谱仍处于播放状态,即实现静音播放功能。

八、代码转换电路设计
1、集成加法器原理
集成4位加法器74283有两组4位的二进制数输入A(a4~A1)和B(B4~B1),并有进位输入Cin,逻辑符号如图所示。

74283实现A加B加Cin的运算,并输出4位二进制运算和S (S4~S1)及进位输出Cout。

比如输入A为1101,B为0110,Cin为1时,输出S为0100,Cout为1。

集成4位二进制加法器74283逻辑符号
2、设计思路
余3码和8421BCD码都是表示0~9共10个十进制数符的4位二进制编码。

8421BCD
码是有权码,其编码中各位二进制数代表的位权分别是8、4、2、1。

每组8421BCD码表示的十进制数符等于其编码中为“1”的位所表的权值之和。

比如十进制数符“5”的8421BCD 码是“0101”。

余3码是无权码,但若定义其编码中各位二进制数代表的位权仍然是8、4、2、1,则每组余3码表示的十进制数符等于其编码中为“1”的位所代表的权值之和再减3。

比如十进制数符“5”的余3码是“1000”。

所以,表示同样十进制数符的8421BCD码和余三码码值相差3。

考虑到二进制减法可以采用加补码的方式实现,所以采用4位集成加法器74283实现代码转换电路。

当输入码8421BCD码时,利用控制键X的状态产生加数“0011”使输入码加3后输入余3码;当输入码是余三码时,利用控制键状态产生“0011”的补码“1101”,使输入码减3(加3的补码)后输入8421BCD码。

参考电路框图如图。

3、全局电路
九、动态扫描显示电路设计
1、设计思路
动态扫描显示控制的关键问题在于产生顺序脉冲分时选通各显示器的公共端,并同步输出其段控制信号。

在数字电路中,时序波形可以采用移位脉冲发生器产生,也可以采用计数器控制二进制译码器产生。

若采用LP-2900开发装置,由于已在FPGA外部设置了3-8线译码器74138控显示器的共阴极,因此只要采用计数器产生二进制计数信号控制译码器即能实现动态显示扫描。

在LP-2900上实现4
位动态扫描控制电路的设计方案原理框图如下图所示,图中虚线框内为开发装置上的固有器件,框外为FPGA中需要设计的部分。

本设计要求实现4位动态扫描显示,可以任选LP-2900装置上6位显示中的前四位或后四位显示。

若采用六进制计数器产生“000”~“101”6组码控制74138,全部显示的选通信号轮流有效,可以使N1、N2为全“0”灭显前两位显示器或使N5、N6为全零灭显后两位。

如果采用四进制计数器的输出控制DE2、DE1。

并使DE3始终为0(端口接GND),则74138输入码A以“000”、“001”、“010”、“011”
循环变化,输出控制C1~C4轮流为低电平,C5、C6始终为高电平,后两位显示器灭显,不必输出N5、N6信号。

由于Ni必须在相应的Ci有效时同步输出,所以可采用控制产生Ci顺序脉冲的计数器同步控制数据选择器选择各位有显示码,经过显示译码输出七段控制信号Ni,同时选择该位的小数点控制信号控制显示器的dp端。

比如,若需要显示4位十进制数字“42.75”,则各位显示码为E1~A1=“00100”;E2~A2=“00010”;E3~A3=“00111”;E4~A4=“00101”;dp1~dp4=“0100”。

由于4个通道的显示码选择与4位显示器的扫描信号由计数器同时控制,所以当计数器输出DE2,DE1为“00”,C1有效,选择显示码E1~A1(E1、D1、C1、B1、A1)和小数点dp1;若计数器输出全为“01”,C2有效,选择显示是E2~A2和dp2,如此一一对应。

2、分频器
①计数脉冲OSC(10MHz)控制五进制计数器的时钟CLKB,并以五进制计数
器的最高位输出QD控制二进制计数器的时钟CLKA,即构成5421BCD码十进制计数器。

每个QD的下降沿QA翻转,每10个计数脉冲周期计数器输出状态循环一周。

分频信号QA的占空比为50%。

②仿真波形:
3、显示译码器AHDL编码
4、全局电路图
十、遇到的主要问题与解决措施
1、二分频模拟不正常,通过翻阅相关书籍,检查二分频电路,发现D触发
器的PRN与CLRN均未接电源vcc,这主要是平时的学习忽视了一些非功能引脚的连接。

2、电路连接完成,所有的综合分析,编译下载均通过,而蜂鸣器却没有声
音,多次仔细检查电路均发现电路连接无误后,检查曲谱存储表,发现没有引入《断桥残雪》的mif文档,而误引入了分频系数的mif文档。

3、当这个问题解决后发现电路任然无法正常工作,而且从蜂鸣器中发出的
声音只有有限的几个,发现应该是间断使能出现了问题,只有间断的地方发出了声音,而非间断的地方却没有声音,推断使能的电平被弄错了,后来查阅FPGA手册确认计数器的计数使能是高电平有效,这个时侯把间断单元的最后一个与门换成了与非门,问题解决。

4、在拓展电路设计中,制作完变速电路设计,并编译下载,发现只有加速
播放功能,没有预想中的减速播放功能,通过检查速度控制电路和速度选择电路,发现加减计数器74192的预置数被设为0000,致使其只有加计数功能,将预置数改为0011后,能达到预期的效果。

5、在拓展电路设计中,制作完暂停播放功能电路后,通过编译下载,发现
歌曲停止运行,而仍发出所停止的那个音符的声音,按下静音播放功能键后,能达到预期效果。

九、附录附录:
附录二:
收获体会:
(1)、进一步加深了对数字电路的认知。

由于平时对数字电路的了解大部分只是来自于课本上的理论知识,即使平时做的一些数电实验也只是根据已知电路图进行电路的连线,因此,对数电的认知一直处在很肤浅的地方。

而此次课程设计只是给出一些大概的原理及设计要求,需要自己设计电路图,根据设计方案原理框图设计各分电路模块,然后对组装好的电路进行调试,这整个过程都极大地提高了我对数字电路的综合认知。

同时,在这个过程中,让我把数电相关方面知识进行了一次有效地复习,相信会对自己今后的考研有很大帮助。

(2)、认识到自己的不足。

在设计的过程中,发现自己以前学过的很多基本知识都已经忘记,在设计电路图以及在电路调试过程中也出现各种问题,说明自己的基本知识还不扎实,动手实践能力还不够,思考问题的角度还不够全面。

因此,自己在今后的学习中,在努力学好理论知识的基础上,应加强动手能力的培养,只有将理论与实践有效地结合起来才会使知识学的更扎实牢固。

(3)、认识到相互学习的重要性。

在设计过程中,当自己纠结于某一个问题,想尽各种可能的方法去解决却无果而终时,内心就会产生郁闷烦躁的情绪,而这种情绪不但不利于问题的结解决,浪费时间,还会产生各种不必要的麻烦。

然而,此时,向身边的同学老师请教下,他们的一个很小的提示就会使问题得到有效地解决。

因此,这让我明白了,独立思考,独立去解决问题固然很重要,但必要时应该主动向别人学习。

(4)、激发了我对自己专业的学习热情。

本来自己觉得现在所学的专业太过枯燥乏味,想转专业读研。

通过这次的设计实验,让我发觉了其中的乐趣,特别是当自己通过深思熟虑,动手实践,最终取得实验的成功所获得的喜悦是自己其所未有的。

因此,这次设计其实是给我吃了定心丸,让我坚定了自己以后的研究方向,尽管自己现在的水平还很低,但我坚信,只要自己有决心去做,任何时候努力都不晚。

(5)、当通过各种努力终于取得成功时,在老师的提醒下,通过查找相关书籍和充分利用网络资源,加上自己平时的相关知识,我又对实验做了数码管显示,变速播放,暂停播放,静音播放功能的拓展设计,而且最终取得成功。

这极大的增加了我的自信心和积极性,以至于一有时间我就会跑去实验室进行相关实验。

虽然,后来进行对音乐的选择播放和顺序播放等功能都没有取得成功,但在尝试过程中,让我学到了很多知识,也学到了很多经验,让我明白了,勇于尝试,也许不一定会成功,但一定会有收获。

附录三:
参考文献:
1、崔葛瑾. 基于FPGA的数字电路系统设计西安电子科技大学出版社
2、赵曙光. 数字电子电路
3、刘常澍/赵雅光.数字电路与FPGA 人民邮电出版社。

相关文档
最新文档