基于EPM240的音乐播放器的设计毕业论文_第1页
基于EPM240的音乐播放器的设计毕业论文_第2页
基于EPM240的音乐播放器的设计毕业论文_第3页
基于EPM240的音乐播放器的设计毕业论文_第4页
基于EPM240的音乐播放器的设计毕业论文_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、广东水利电力职业技术学院毕业论文题题 目目: 基于 EPM240 的音乐播放器的设计 姓姓 名名: 陈飞龙 学学 号号: 100212102 专业班级专业班级: 10 电子信息工程 所在系别所在系别: 自动化工程系 指导教师指导教师: 龚兰芳老师 完成日期完成日期 二一三 年 二 月 十五 日广东水利电力职业技术毕业论文摘要2基于基于 EPM240EPM240 的音乐播放器的设计的音乐播放器的设计【摘要摘要】 这次的音乐播放器在 CPLD 内部设计出扬声器发生及分频模块、音符预置数模块、音符储存模块三个模块,再配开关选择模块、彩灯闪烁控制模块等必要的外围电路,从而实现四首音乐选择播放,并配有随

2、音乐节奏产生灯柱效果等功能的 MIDI 音乐播放器。通过本次设计,可以实现出可编程逻辑器件 CPLD 在电子设计领域的应用。 【关键词关键词】 EPM240,CPLD,音乐播放器,VHDL 语言毕业论文目录3目录目录第 1 章 绪论.11.1 选题的目的与任务.11.1.1 选题的背景.11.2 设计的基本内容.11.2.1 CPLD 的设计.11.2.2 外围电路的设计.2第 2 章 总体设计概述.12.1 关于 CPLD.12.2 设计思路.22.1.1 总体设计框图与设计思路.22.2.2 CPLD 设计思路.32.2.3 外围电路设计思路.3第 3 章 音乐播放器设计.43.1 工作原

3、理.43.2 模块设计.43.2.1 音符预置数与发生及分频模块设计.43.2.2 彩灯闪烁控制模块的设计.73.2.3 开关选择模块设计.73.2.4 音符储存模块设计.73.3 四首歌曲选择.9第 4 章 外围电路设计.104.1 时钟电路.104.1.1 音乐节奏时钟.104.2 音频功率放大电路.114.3 音乐彩灯闪烁控制电路.11第 5 章 系统调试.125.1 系统调试.125.1.1 音乐节奏时钟的调试.12毕业论文目录45.1.2 音频功率放大的调试.12结论.13参考文献.14附录 A 总电路图.15附录 B PCB 图.16附录 C VHDL 源代码.16致谢.29毕业论

4、文 第 1 章 绪论1第第 1 章章 绪论绪论1.1 选题的目的与任务选题的目的与任务本毕业设计其目的和任务是,让学生掌握 EDA 的基本方法,熟悉一种 EDA 软件(Quartus ),并能利用 EDA 软件设计实际工程项目,并在开发板上成功下载;使我们将学到的理论知识应用于实践之中,更是培养学生动手能力和训练学生严格认真的科学态度及工作作风,为即将踏入工作岗位打下坚实的基础; 通过本毕业设计应达到以下几点:1 培养我们的集体主义精神、严肃认真的工作态度;热爱劳动、团结协作、爱护仪器、遵守纪律的优良品德。2 掌握 IC 设计的基本原理及方法,掌握硬件描述语言 VHDL 对数字系统的设计方法和

5、技巧。3 掌握印制电路板的设计与制作的方法。4 掌握电子线路的安装、焊接和调试的基本技能。 5. 培养我们分析、解决实际问题的能力和勇于创新的科学精神。 6. 培养我们分析寻找和排除电子电路中常见故障的能力. 7. 培养我们独立写出严谨的、有理论依据的、实事求是的、文理通顺的毕业论文的能力。1.1.1 选题的背景选题的背景CPLD 都是可编程逻辑器件,是在 PAL、GAL 等逻辑器件的基础上发展起来的,与分立元件相比,具有速度快、容量大、功耗小和可靠性高等优点。由于集成度高、设计方法先进、现场可编程,它可以替代几十甚至上百片通用 IC 芯片。这种芯片具有现场可编程和方案容易改动的特点。所以 F

6、PGA 和 CPLD 芯片收到世界范围内电子工程设计人员的广泛关注和普遍欢迎,可以设计各种数字电路和数字系统。1.2 设计的基本内容设计的基本内容1.2.1 CPLD 的设计的设计1在 CPLD 内部设计出扬声器发生及分频模块、音符预置数模块、音符储存模块三个模块,再配开关选择模块、彩灯闪烁控制模块等必要的外围电路,从而实现四首毕业论文 第 1 章 绪论2音乐选择播放,并配有随音乐节奏产生灯柱效果等功能的 MIDI 音乐播放器。2. 设计音乐播放器系统的外围硬件电路原理图。3. 制作 PCB,并且软、硬件调试成功。1.2.2 外围电路的设计外围电路的设计这次设计中用到了 4HZ 的频率,如果直

7、接用自带的 50MHZ 来分频的话会给芯片的内部资源占用太多,而且不方便每次在程序中对时钟调试,所以我们在外部单独接入一个时钟信号,提供给音乐时钟。从模电与数电课题中得知,采用 555 定时器构成多谐振荡器来实现这块电路最合适又有零件,所以我们觉得用它来做时钟。扬声器因为我们准备了 2 个从耳机与影响上拆下来的扬声器,到最后那个音质好则选用哪个。从各处质料中得知由于 CPLD 内部输出的信号比较弱,因此必须在扬声器前借一个音频功率放大电路才能实现我们的要求,而且在该电路接入滑动变阻器,这样可以通过调节滑动变阻器,改变放大器的放大倍数,从而调试出放大出来音量。毕业论文 第 2 章 总体设计概述1

8、第第 2 章章 总体设计概述总体设计概述2.1 关于关于 CPLDMAX II 器件系列是一种非易失性、即用性可编程逻辑系列,它采用了一种突破性的新型 CPLD 架构。这种新型架构的成本是原先 MAX 器件的一半,功耗是其十分之一,密度是其四倍,性能却是其两倍。这些超级性能是在提供了所有 MAX 系列 CPLD 先进特性的架构的基础上,根据 Altera 专家们的意见而重新采用基于查找表的架构而得到的。这种基于查找表的架构在最小的 I/O 焊盘约束的空间内提供了最多的逻辑容量。因此,MAX II CPLD 是所有 CPLD 系列产品中成本最低、功耗最小和密度最高的器件。基于成本优化的 0.18

9、 微米 6 层金属 Flash 工艺,MAX II 器件系列具有 CPLD 所有的优点,例如非易失性、即用性、易用性和快速传输延时性。以满足通用性,低密度逻辑应用为目标,MAX II 器件成为接口桥接、I/O 扩展、器件配置和上电顺序等应用最理想的解决方案。除这些典型的 CPLD 应用之外,MAX II 器件还能满足大量从前在FPGA、ASSP 和标准逻辑器件中实现的低密度可编程逻辑需求。MAX II 器件提供的密度范围从 240 到 2210 个逻辑单元(LE),最多达 272 个用户I/O 管脚。本次设计核心模块 CPLD 采用 ALTERA 公司 MAX II 系列的 EPM240T10

10、0C 芯片。该芯片共有 100 个管脚,内部 240 个逻辑单元,如图 1 所示,为该芯片的封装图及管脚功能。毕业论文 第 2 章 总体设计概述2123456ABCD654321DCBATitleNumberRevisionSizeBDate:8-May-2009 Sheet of File:D:dianlutuMyDesign2.ddbDrawn By:I/O1I/O2I/O3I/O4I/O5I/O6I/O7I/O8VCCIO9GNDIO10GNDINT11IOCLK12VCCINT13IOCLK14I/O15I/O16I/O17I/O18I/O19I/O20I/O21TMS22TDI23T

11、CK24TDO25I/O26I/O27I/O28I/O29I/O30VCCIO31GNDIO32I/O33I/O34I/O35I/O36I/O37I/O38I/O39I/O40I/O41I/O42DEV_OE43DEV_CLRn44VCCIO45GNDIO46I/O47I/O48I/O49I/O50I/O51I/O52I/O53I/O54I/O55I/O56I/O57I/O58VCCIO59GNDIO60I/O61IOCLK62VCCINT63IOCLK64GNDINT65I/O66I/O67I/O68I/O69I/O70I/O71I/O72I/O73I/O74I/O75I/O76I/O77I

12、/O78GNDIO79VCCIO80I/O81I/O82I/O83I/O84I/O85I/O86I/O87I/O88I/O89I/O90I/O91I/O92GNDIO93VCCIO94I/O95I/O96I/O97I/O98I/O99I/O100EPM240T100MAX II图 1 EPM240T100C 管脚封装图及管脚功能说明2.2 设计思路设计思路2.1.1 总体设计总体设计框图与设计思路框图与设计思路如图 2 所示是这次音乐播放器的工作原理图。其中中心模块式 CPLD 芯片,内部由音调发生器、音乐编码器和彩灯闪烁控制器三个模块组成。我们通过开关来选择歌曲,音乐编码器里已经存储了 4

13、首歌曲,我们通过选择不同的开关来播放不同的歌曲。音乐编码器控制着音调发生器和彩灯闪烁控制器,每当音乐节奏时钟的脉冲到来是时,音乐编码器就把当前要播放的音符的编码送给音调发生器和彩灯闪烁控制器。音调发生器就会产生相应的音符频率给音频放大器,经过放大由扬声器放出,产生音乐。彩灯闪烁控制器根据编码点亮相应的彩灯,实现灯柱效果。核心部分 CPLD 我们利用 VHDL 语言来完成,其他部分通过外围电路实现。毕业论文 第 2 章 总体设计概述3图 2 音乐播放器的工作原理图2.2.2 CPLD 设计思路设计思路在这里我们用的是老师所提供的学习开发板,板中所用的就是 EPM240 中的 CPLD芯片。老师所

14、提供的 CPLD 型芯片,其内部逻辑单元数为 240 个,只要对程序进行一定的优化处理,即可以满足所有的设计要求。为了使整个设计尽量简洁,4 首歌曲均只有高潮部分,这样听起来容易辨认与熟悉,同时也能节省芯片内部资源。2.2.3 外围电路设计思路外围电路设计思路这次设计中用到了 4HZ 的频率,如果直接用自带的 50MHZ 来分频的话会给芯片的内部资源占用太多,而且在程序中对时钟调试不方便,所以我们在外部单独接入一个时钟信号,提供给音乐时钟。从模电与数电课题中得知,采用 555 定时器构成多谐振荡器来实现这块电路最合适又有零件,所以我们觉得用它来做时钟。扬声器因为我们准备了 2 个从耳机与影响上

15、拆下来的扬声器,到最后那个音质好则选用哪个。从个处质料中得知由于 CPLD 内部输出的信号比较弱,因此必须在扬声器前借一个音频功率放大电路才能实现我们的要求,而且在该电路接入滑动变阻器,这样可以通过调节滑动变阻器,改变放大器的放大倍数,从而调试出放大出来音量。毕业论文第 3 章 音乐播放器设计4第第 3 章章 音乐播放器设计音乐播放器设计3.1 工作原理工作原理MIDI 音乐的基本原理为:组成乐曲的每一个音符的频率值及其持续的时间是乐曲能连续演奏的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和每一个频率信号的持续时间,就可以使扬声器发生连续的乐曲。如图 3 所示,为 CPLD 内

16、部芯片设计原理图。图 3 芯片原理3.2 模块设计模块设计3.2.1 音符预置数与发生及分频模块设计音符预置数与发生及分频模块设计在设计中音符产生是通过音符预置数模块以查找表的形式把预先设定好的数置给发生及分频模块的可变模值计数器实现分频,得到相应的频率后输出给音频放大器,在通过扬声器发出。根据可变模值计数器的设计原理及音符的分频系数,可计算出乐曲中各音符的预置数,如表 3.1 所示。而在音符的选择上,我们选择了最广泛应用的16 个音。开关选择模块发生及分频模块音符储存模块音符预置数模块彩灯闪烁模块扬声器彩灯 50MHZ 基准时钟4HZ 时钟毕业论文第 3 章 音乐播放器设计5表 3.1 音符

17、的分频数和预置数音名分频系数初始值低音 551023089低音 645453646低音 740504141中音 138224369中音 234054786中音 330345157中音 428635328中音 525515640中音 622735918中音 720256166高音 119116280高音 217036488高音 315176674高音 414326759高音 512756816休止符 008191发生及分频模块由可变模值计数器实现。由于系统要求产生出的信号频率较高,因此选用 4MHz 高频脉冲作为可变模值计数器的技计数脉冲。而为了减少输出的偶次谐波分量,最后输出到扬声器的波形应为

18、对称方波,因此在到达扬声器之前,有一个 2分频的分频器。所以,上图所给出的分频系数是用分频后的 2MHz 基础上计算得出的。各音阶频率及相应的分频如表 3.2 所示。程序如:process(PreCLK, Tone)-置数分频variable Count11: integer range 0 to 16#1FFF#;begin if PreCLKevent and PreCLK=1 thenif Count11=16#1FFF# thencount11:=Tone;FullSpkS=1;else Count11:=Count11+1;毕业论文第 3 章 音乐播放器设计6FullSpkSdigd

19、igdigdigdigToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexCLK4HZ,dig=dig1,ToneIndex=ToneIndex);u2: ToneTaba PORT MAP(Index=ToneIndex, Tone=Tone);u3: Speakera PORT MAP(clk=CLK, Tone=Tone, SpkS=SPKOUT);u4:

20、 cd port map(Tone=ToneIndex, lights=lights);u5: kg port map(switch=switch,dig=dig1);END;-开关选择模块library ieee;use ieee.std_logic_1164.all;entity kg isport(switch:in std_logic_vector(3 downto 0); dig:out integer range 0 to 4);end;architecture one of kg isbeginprocess(switch)begincase switch iswhen 0001

21、=digdigdigdigdig lights lights lights lights lights lights lights lights lights lights lights lights lights lights lights lightsNULL;end case;end process;end;-扬声器发生及分频模块library ieee;use ieee.std_logic_1164.all;entity Speakera isPORT(clk: IN STD_LOGIC; Tone: IN INTEGER RANGE 0 TO 16#1FFF#; SpkS: OUT

22、STD_LOGIC);END ;architecture one of Speakera issignal PreCLK:std_logic;signal FullSpkS:std_logic;beginprocess(clk)variable count4:integer range 0 to 11;-12分频=4.16MHZbeginPreCLK=0;if Count4=11 THEN PreCLK=1; Count4:=0;elsif clkEVENT and clk=1 then Count4:=Count4+1;end if;end process;process(PreCLK, T

23、one)-置数分频variable Count11: integer range 0 to 16#1FFF#;begin 毕业论文附录 C VHDL 源代码19if PreCLKevent and PreCLK=1 thenif Count11=16#1FFF# thencount11:=Tone;FullSpkS=1;else Count11:=Count11+1;FullSpkS=0;end if;end if;end process;process(FullSpkS)-二分频variable Count2:std_logic;beginif FullSpkSEVENT and FullS

24、pkS=1 thenCount2:=NOT Count2;if Count2=1 then SpkS=1;else SpkS Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone ToneNULL;end case;end process;end;-音符储存模块library ieee;use ieee.std_logic_1164.all;entity NoteTabs isPORT(clk: IN STD_LOGIC;毕业论文附录 C VHDL 源代码20 dig: in integer ran

25、ge 0 to 4; ToneIndex: OUT INTEGER RANGE 0 TO 15);END;architecture one of NoteTabs issignal Counter :integer range 0 to 127;beginprocess(dig,clk)begin if (dig=1 or dig=2 or dig=3 or dig=4) thenif Counter=128 then Counter=0;elsif(clkevent and clk=1) thenCounter=Counter+1;end if;elsecounterToneIndexTon

26、eIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIn

27、dexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndex

28、ToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexTon

29、eIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexNULL;end case;elsif dig=2 then-涛声依旧case Counter iswhen 00=To

30、neIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneI

31、ndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneInde

32、xToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexTo

33、neIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexNULL;end case;elsif dig=3 then-隐形的翅膀case Counter i

34、swhen 00=ToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexTon

35、eIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIn

36、dexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndex

37、ToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexNULL;end case;elsif dig=4 then-我愿意case Counter iswhen 00=ToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexTon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论