基于cpld的midi音乐播放器设计毕业设计论文(编辑修改稿)内容摘要:

系数应综合考虑加以选择,从而保证音乐不会走调。 如在 48MHz 时钟下,中音 1(对应的频率值是 )的分频系数应该为: 48000000/(2*)=45867,这样只需对系统时钟进行 45867 次分频即可得到所要的中音 M1(分频系数计算公式为 /2D F K ,由于 /2FK之后,会使分频系数 D 变小,所以功能模块中语句: beep_r=!beep_r,使得输出取反, / 2 _K F co u n t en d ,消除了前面除以 2K 的影响)。 至于其他音符,可以同样求出对应的分频系数。 在程序中设置一个状态机,每 250ms 改变一个状态(即一个节拍),组成乐曲的每个音符的频率值(音调)相对应于状态机的每一个状态。 只要让状态机的状态按顺序转换,就可以自动演奏播放音乐了。 《友谊地久天长》乐曲的简谱 见 附录 5 所示,(注: N 一拍; N 两拍; N四拍; N八拍; N 为音谱)。 宜宾职业技术学院电子信息与控制工程系 基于 CPLD 的 MIDI 音乐播放器设计 9 音 乐 节 奏 时钟彩 灯 闪 烁 节奏 时 钟音 调 发 生 器中 央 控 制 器彩 灯 闪 烁 控制 器彩 灯蜂 鸣 器光 电 传 感 器基 准 时 钟C P L D数 码 管数 码 管显 示 控制 器 图 CPLD 内部芯片 设计原理 有限状态机 有限状态机 FSM 思想广泛应用于硬件控制电路设计,也是软件上常用的一种处理方法 (软件上称为 FMM有限消息机 )。 它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上判断事件,变连续处理为离散数字处理,符合计算机的工作特点。 同时,因为有限状态机具有有限个状态,所以可以在实际的工程上实现。 但这并不意味着其只能进行有限次的处理,相反,有限状态机是闭环系统,有限无穷,可以用有限的状态,处理无穷的事务。 有限 状态 机是指输出取决于过去输入部分和当前输入部分的 时序逻辑电路。 一般来说,除了输入部分和输出部分外,有限 状态 机还含有一组具有 “记忆 ”功能的 寄存器 ,这些寄存器的功能是记忆有限状态机的内部状态,它们常被称为状态寄存器。 在有限 状态机中,状态 寄存器 的的下一个状态不仅与输入信号有关,而且还与该寄存器的当前状态有关,因此 有限状态机又可以认为是组合逻辑和寄存器逻辑的一种组合。 其中, 寄存器逻辑的功能是存储有限 状态 机的内部状态;而组合逻辑又可以分为次态逻辑和输出逻辑两部分,次态逻辑的功能是确定有限状态机的下一个状态,输出逻辑的功能是确定有限状态机的输出。 有限状态机的工 作原理如图 所示,发生事件 (event)后,根据当前状态 (cur_state),决定执行的动作 (action),并设置下一个状态 (nxt_state)。 宜宾职业技术学院电子信息与控制工程系 基于 CPLD 的 MIDI 音乐播放器设计 10 发 生 事 件 e v e n t当 前 状 态c u r _ s t a t e执 行 动 作 a c t i o n设 置 下 一 状 态n x t _ s t a t e 图 有限状态机工作原理 状态机的现态(当前状态)和次态(下一状态),分别表示现在演奏的音调和将要演奏的音调,而每个音调持续的时间都是 TIME 变量的整数倍。 在程序中, TIME 的值在时钟 50MHz 频率下,设定为 250ms。 中央控制 器设计 中央控制器 包括节拍控制电路和音符产生电路。 节拍控制电路以乐曲中最短音符的节拍为基准,产生乐曲所需要的全部节拍。 在大部分音乐中,多以 1/4 为一拍,一拍则为一秒,同时在乐谱中,一般最短的音符多为 1/16 音符,因此为了达到四首歌曲的统一,我们将 1/16 音符设置为计数器的一个计数,对应的 1/4 音符则是四个计数。 为了节省内部资源,我们只演奏一首歌曲。 另外,在设计中为了让歌曲循环播放,计数器设定计满自动清零计数的功能,这样,只要不断电,不关开关,歌曲就可以自动循环播放了。 音调发生器设计 控制好每一个音符的频率和维持的频率时间,就可以组成两个连续的音 符,从而发出连续的乐曲,如表 音符与频率对照表所示。 表 音符与频率对照表 音名 频率 /Hz 分频系数 低音 5 61225 低音 6 440 54545 中音 1 45867 中音 2 40863 中音 3 36402 中音 5 30612 中音 6 880 27273 高音 1 22956 休止符 0 8191 0 宜宾职业技术学院电子信息与控制工程系 基于 CPLD 的 MIDI 音乐播放器设计 11 由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频数四舍五入取整。 根据系统 最大 的分频系数为 61225,故采用 16 位二进制计数器已能满足分频要求。 在表 中,可以看到不同音阶对应的不同初始值。 对于不同的分频系数,只要加载不同的初始值即可。 采用加载初始值而不将分频输出译码反馈,可以有效地减少设计占用可编程逻辑器件的资源。 “0”表示休止符,在很多音乐中,休止符也是一个重要的音符。 对于休止符,只要将分频系数设为 0,蜂鸣器就不会发声了,程序代码如下所示。 parameter L_5 = 1639。 d61224, //低音 5 L_6 = 1639。 d54545, //低音 6 M_1 = 1639。 d45863, //中音 1 M_2 = 1639。 d40865, //中音 2 M_3 = 1639。 d36402, //中音 3 M_5 = 1639。 d30612, //中音 5 M_6 = 1639。 d27273, //中音 6 H_1 = 1639。 d22956。 //高音 1 parameter TIME=120xx000。 //控制音的长短 (250ms) assign beep=beep_r。 //输出音乐 光电传感器设计 光电传感器根据电路设计,当它检测到有光时,它内部为低电平,蜂鸣器不会叫,没有检测到光时,它内部为高电平,蜂鸣器会叫,程序代码如下所示。 always@(posedge sys_clk) begin count=count + 139。 b1。 //计数器加 1 if(count==count_end) begin count=1639。 h0。 //计数器清零 if(ke==139。 b0) //如果有光 beep_r=0。 //蜂鸣器不叫 else 宜宾职业技术学院电子信息与控制工程系 基于 CPLD 的 MIDI 音乐播放器设计 12 beep_r=!beep_r。 //输出取反 (蜂鸣器叫 ) end end 彩灯闪烁设计 彩灯闪烁主要是控制灯的亮和灭,输出高低电平信号,就可以直接驱动发光二极管。 在彩灯闪烁程序中,如果设计为不同音名,对应不同的亮灭,那么,闪烁出来的效 果很单调,因此,设计为每次音符一变对应的闪烁也就改变,这样闪烁出来的效果也有很多种。 当音乐演奏时,随着歌曲的变化,彩灯也因为不同的音符闪动起来,本次程序设计中共设计了 6 个发光二极管,彩灯逻辑电路如图 所示。 s y s _ c l k ( G N D )k e ( G N D ) f a [ 5 . . 0 ]6 39。 h 0 0 图 彩灯闪烁逻辑图 数码管显示设计 数码管显示采用 case 语句,芯片内部处理好程序后,送给数码管显示电路模块。 当音乐演奏时,随着 乐 曲声起,数码管也会开始显示时间,本次程序设计中设计了 3 个八段共阳数码管的代码,数码管部分逻辑电路如图 所示。 图 数码管部分逻辑图 所有程 序代码见附录 6,综合出的部分 RTL 电路图见附录 3。 宜宾职业技术学院电子信息与控制工程系 基于 CPLD 的 MIDI 音乐播放器设计 13 5 产品制作 PCB 设计 使用 Protel 99 SE软件进行 PCB 设计,绘制原理图的过程为图纸设置、添加元件库、放置元件、元件布局、开始连线、布线调整、电气规则检查,检查无误后就可以保存并打印。 绘制 PCB 图的过程为更新 PCB、规划印制电路板的大小、元件布局、设置布线规则、开始布线、检查布线,检查无误后就可以保存并打印。 采用万用板制作电路板,为了焊接美观选用材质好点的万用板,按照原理图装配元器件, 电路 原理图见附录 1,系统板 PCB 图见附录 2。 元器件装配 元器件检测 主要元器件的检测如下: 数码管:用万用表检测数码管,先判定数码管 DS1 是共阴还是共阳,用万用表的正极接数码管 10 脚(即数码管中间的引脚),负极接剩下的引脚,如果亮了则是共阳数码管,没亮则把表笔对调,亮了则是共阴,没亮就有可能数码管已坏,判断出共阴和共阳后就检测每段的亮度是否正常,其余数码管测试方法一样。 发光二极管:用万用表检测 LED 发光二极管 D1(大头为正,小头为负),万用表的正极接 D1 的正极,负极接 D1 的负极,看 D1 是否发光,发光就正常,没发光就说明D1 已损坏。 电阻:用万用表检测电阻的阻值看是不是所需的 470Ω,也可以通过读取色环来判断电阻的大小,虽然一般电阻都无损坏,但是安全起见还是全部检测。 CPLD:先看 CPLD 的引脚是否有损坏,在通过写入相应程序看能不能实现功能,依此来判断 CPLD 的好坏。 光电传感器:用万用表正极接 VCC,负极接光电传感器 D0 端,这时开关那颗发光二极管发光证明此时为低电平(有光),反之则为高电平(无光)。 元器件安装 先安装数码管,要注意数码管的高度,接着安装电阻,注意引脚要直,安装位置可参照电路原理图,最后安装发光二极管。 宜宾职业技术学院电子信息与控制工程系 基于 CPLD 的 MIDI 音乐播放器设计 14 同 时 元器件安装时应按照以下原则: ( 1)安装的顺序 :先低后高,先小后大,先轻后重。 ( 2)元器件的标识 :电子元器件的标记和色码部位应朝上,以便于辩认;横向插件的数值读法应从左至右,而竖向插件的数值读法则应从下至上。 ( 3)元器件的间距:在印制板上的元器件之间的距离不能小于 1mm;引线间距要大于 2mm(必要时,引线要套上绝缘套管)。 一般元器件应紧密安装,使元器件贴在印制板上,紧贴的容限在 左右。 安装时要注意元件的位置及走线,防止出现跳线。 元器件焊接 在焊接时, 先把数码管的一端固定在万用 板上,再把电阻的两端固定在板子上,发光二极管焊接时要再次确认极性,当极性确认无误后就可以固定在板子上,元器件固定好后要仔细检查元器件位置有没有固定错,没有就可以 根据 原理图 连接 各个器件之间 的印制线,为了保证元 器 件的好坏焊接时间不能过长。 焊接完成后, 需 要仔细的检查电路,看看 是否有漏焊、虚焊、短路等现象。 同时 焊接时应按以下步骤: ( 1)准备工作。 首先把被焊件、锡丝和烙铁准备好,处于随时可焊的状态。 ( 2)加热被焊件。 把烙铁头放在焊盘和元器件引脚处进行加热。 ( 3)放上焊锡丝。 被焊件进加热达到一定温度后,立即将手 中的锡丝触到被焊件上使之融化。 ( 4)移开焊锡丝。 当锡丝融化一定量后(焊料不能太多),迅速移开锡丝。 ( 5)移开电烙铁。 当焊料的扩散范围到达要求后移开电烙铁。 当硬件电路焊接完成后,就可以把硬件电路跟 CPLD 相连, 在连接数码管 电路 时,因为用的是共阳数码管,所以 需要准确的判断出数码管的每段,在连接其它电路时注意不要把电源与地接反即可。 宜宾职业技术学院电子信息与控制工程系 基于 CPLD 的 MIDI 音乐播放器设计 15 6 系统调试 本次设计采用的是 Aletra 公司的 MAX II 系列,因此,必须用 Quartus II 软件系列才能对该芯片进行编译、仿真、下载等功能。 下载模式我们进行 USB Blaster 线的下载方式。 CPLD 程序编译 当程序编写完成后即可进行编译,警告不影响结果 , 程序编译 结果 如图 所示。 图 程序编译 结果 CPLD 引脚配置 选择 PIN_20 为系统时钟 (sys_clk)引脚,选择 PIN_1 为蜂鸣器输。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。