<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于CPLD的MIDI音樂播放器的設(shè)計

          基于CPLD的MIDI音樂播放器的設(shè)計

          作者:袁慧梅 宋宇 時間:2008-05-29 來源:微計算機(jī)信息 收藏

          摘要:依據(jù)MIDI音樂基本原理,結(jié)合技術(shù),采用ALTERA公司的可編程邏輯器件()EPF10LC84-4作為控制核心而設(shè)計的。本文主要闡述了利用設(shè)計MIDI音樂發(fā)生器芯片,再配上必要的外圍電路,從而實現(xiàn)四首音樂選擇播放、并配有隨音樂節(jié)奏而閃爍變化的彩燈等功能的應(yīng)用系統(tǒng)。
          關(guān)鍵字:、、 

          0引言

          本文引用地址:http://www.ex-cimer.com/article/83317.htm

          大規(guī)??删幊踢壿嬈骷?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/CPLD">CPLD和FPGA是當(dāng)今應(yīng)用最廣泛的兩類可編程邏輯器件,電子設(shè)計工程師利用它可以在辦公室或?qū)嶒炇以O(shè)計出所自己所需要的專用芯片和專用產(chǎn)品,從而大大縮短了產(chǎn)品上市時間,降低了開發(fā)成本。此外,可編程邏輯器件還具有靜態(tài)可重復(fù)編程和動態(tài)在系統(tǒng)重構(gòu)的特性,使得硬件的功能可以像軟件一樣通過編程來修改,這樣就極大的提高了電子系統(tǒng)設(shè)計的靈活性和通用性。

          1 工作原理

          MIDI音樂是Windows下的一種合成音樂,由于它通過記譜的方式來記錄一段音樂,因此與wave 音樂相比,它可以極大的減少存儲容量。MIDI音樂的基本原理:組成樂曲的每一個音符的頻率值(音調(diào))及其持續(xù)的時間(音長)是樂曲能連續(xù)演奏的兩個基本數(shù)據(jù),因此只要控制輸出到揚(yáng)聲器的激勵信號的頻率的高低和每個頻率信號持續(xù)時間,就可以使揚(yáng)聲器發(fā)出連續(xù)的樂曲。

          圖1是本文設(shè)計的的原理框圖。該音樂編碼器內(nèi)儲存著預(yù)先設(shè)定的四首歌曲的編碼,通過改變音樂選擇開關(guān)的狀態(tài)可以決定當(dāng)前要播放哪首音樂。音樂編碼器控制著音調(diào)發(fā)生器和彩燈閃爍控制器,每當(dāng)音樂節(jié)奏時鐘送給音樂編碼器一個時鐘脈沖時,音樂編碼器就將當(dāng)前要播放的音符的編碼送給音調(diào)發(fā)生器和彩燈閃爍控制器。音調(diào)發(fā)生器根據(jù)編碼對應(yīng)的分頻系數(shù)將2MHz的基準(zhǔn)時鐘分頻,得到當(dāng)前要播放的音符所對應(yīng)頻率的脈沖,再用這個脈沖去激勵揚(yáng)聲器,就可以得到這個音符的聲音。彩燈閃爍控制器根據(jù)編碼將當(dāng)前要播放的音符對應(yīng)的彩燈亮滅狀態(tài)送給彩燈。


          圖1   音樂播放器的工作原理框圖

              其中音調(diào)發(fā)生器、音樂編碼器、彩燈控制器這三項功能可由ALTERA公司可編程邏輯器件(CPLD)EPF10LC84-4芯片,采用來完成[1-3]。音頻放大器、彩燈、各種時鐘可由具體的外圍電路來實現(xiàn)。

          2.MIDI音樂發(fā)生器芯片的設(shè)計

          本設(shè)計的關(guān)鍵是要準(zhǔn)確地產(chǎn)生音樂中各音符所對應(yīng)的頻率信號,并根據(jù)樂曲要求按節(jié)拍輸出。為了減少系統(tǒng)復(fù)雜性,本設(shè)計根據(jù)可變模值計數(shù)器的原理,按照樂曲要求定時改變計數(shù)器的預(yù)置數(shù),即可產(chǎn)生樂曲所需要的頻率信號。芯片原理框圖如圖2所示,芯片是采用VHDL硬件描述語言,在MUXPLUS II環(huán)境下設(shè)計的。

           

          圖2  芯片原理圖

          圖中節(jié)拍控制電路產(chǎn)生節(jié)拍定時信號;音符產(chǎn)生電路按節(jié)拍要求產(chǎn)生樂曲所需要的音符;預(yù)值數(shù)產(chǎn)生電路受音符控制,產(chǎn)生該音符頻率相對應(yīng)的預(yù)置數(shù),送計數(shù)器的置入數(shù)據(jù)輸入端。音符頻率發(fā)生器根據(jù)不同的預(yù)置數(shù)產(chǎn)生相應(yīng)的頻率信號,從而完成樂曲的演奏功能。

          3 外圍電路設(shè)計

          3.1 音樂節(jié)奏時鐘和彩燈閃爍節(jié)奏時鐘產(chǎn)生電路

          我們需要的音樂節(jié)奏時鐘是一個4Hz左右的時鐘脈沖,其頻率很低,利用555定時器構(gòu)成的多諧振蕩器即可產(chǎn)生,如圖3所示。

          555集成定時器是一種將模擬功能與邏輯功能巧妙結(jié)合在一起的混合集成電路,555定時器構(gòu)成的多諧振蕩器電路圖如圖3所示,由3腳輸出的脈沖頻率的計算公式為: 

           

          改變可變電阻的阻值就可以改變輸出頻率。我們要求輸出的頻率為4Hz,C=47Uf,所以R1+R2應(yīng)為7.66K。

          音樂節(jié)奏時鐘對整個音樂播放器的作用至關(guān)重要,要求音樂節(jié)奏時鐘脈沖非常穩(wěn)定,這樣才能保證音樂的流暢播放,否則播放出來的將是一段雜亂無章的聲音,就不是音樂而是噪聲了。為了使輸出的脈沖比較穩(wěn)定、減少外界干擾,將輸出的脈沖再經(jīng)過D觸發(fā)器(7474)后送給CPLD芯片,因此555定時器件腳輸出的脈沖頻率應(yīng)提高一倍(即8Hz),這樣R1+R2的阻值應(yīng)為3.83K。

           圖3   音樂節(jié)奏時鐘產(chǎn)生電路圖

          彩燈閃爍節(jié)奏時鐘產(chǎn)生電路與音樂節(jié)奏時鐘產(chǎn)生電路原理相同,也是用555定時器構(gòu)成的多諧振蕩器來實現(xiàn),只是彩燈控制時鐘產(chǎn)生電路的頻率要比音樂節(jié)奏時鐘產(chǎn)生電路的頻率高,在十幾到幾十赫茲之間,它的R2值不定,可根據(jù)自己的要求來定,如果想要彩燈閃爍快點(diǎn)則頻率就高一些,想閃爍頻率慢就低一些。

          3.2 音頻功率放大電路

          由CPLD芯片輸出的音頻信號很微弱,不能直接去驅(qū)動揚(yáng)聲器,因此需要一個音頻放大電路對輸出的音頻信號進(jìn)行放大,然后再去驅(qū)動揚(yáng)聲器。我們采用由集成功率放大器LM386組成的音頻功率放大器,如圖4所示。其中,C2是交流耦合電容,將功率放大器的交流輸出送到負(fù)載上,輸出信號通過Rw接到LM386的同相端。C1是退耦電容,R1-C3網(wǎng)絡(luò)起到消除高頻自激振蕩作用。

           

          圖4   音頻功率放大電路圖

          3.4 音樂選擇開關(guān)與彩燈閃爍控制電路

          這兩部分電路很簡單,在音樂選擇開關(guān)電路中(圖5)S1斷開時A端為高電平,閉合時A端為低電平,S2 斷開時B端為高電平,閉合時B端為低電平,通過S1、S2的開與關(guān)來改變A、B的狀態(tài),從而實現(xiàn)對四首音樂的選擇。

          彩燈閃爍控制電路(圖6)是由發(fā)光二極管構(gòu)成的,A、B、C、D、E、F、G、H八端電平的高低變化控制著八個發(fā)光二極管的亮滅。  

               

          4 系統(tǒng)調(diào)試

          把以上各部分電路與預(yù)先設(shè)計好的MIDI音樂發(fā)生器芯片(EPF10LC84-4)連接起來,形成整個系統(tǒng)。

          系統(tǒng)調(diào)試主要是對音樂節(jié)奏時鐘、彩燈控制時鐘的頻率和音頻功率放大電路進(jìn)行調(diào)試。

          1.音樂節(jié)奏時鐘的調(diào)試:音樂節(jié)奏時鐘理論要求時4Hz,在實際的演奏過程中頻率稍微高于4Hz效果較好,通過改變R1的電阻來改變音樂節(jié)奏時鐘,從而改變音樂節(jié)奏。表1是音樂節(jié)奏時鐘調(diào)試過程中的記錄。

          表1  音樂節(jié)奏時鐘調(diào)試記錄

          R1阻值(KΩ)

          4.38

          3.83

          3.40

          3.06

          節(jié)奏時鐘頻率(Hz)

          3.5

          4

          4.5

          5

          音樂節(jié)奏效果

          較慢

          稍慢

          適中

          稍快

          經(jīng)過比較,最終將R1的阻值定在3.4 KΩ,音樂節(jié)奏時鐘的頻率為4.5 Hz。

          2.彩燈控制時鐘的調(diào)試:彩燈控制時鐘頻率要求在十幾到幾十赫茲之間。表2是彩燈控制時鐘調(diào)試過程中的記錄。

          表2  彩燈控制時鐘調(diào)試記錄

          R3阻值(KΩ)

          1.53

          1.28

          1.09

          0.958

          0.851

          0.766

          節(jié)奏時鐘頻率(Hz)

          10

          12

          14

          16

          18

          20

          彩燈閃爍效果

          較慢

          稍慢

          適中

          稍快

          較快

          經(jīng)過比較,最終將R1的阻值定在0.958 KΩ,彩燈控制時鐘的頻率為16Hz。

          3.音頻功率放大的調(diào)試:通過調(diào)節(jié)RW的阻值來改變輸入到音頻放大器LM386的音頻信號的電壓值,調(diào)試結(jié)果如表3。

          表3  音頻放大調(diào)試記錄

          RW阻值(KΩ)

          8

          6

          4

          2

          1

          0.5

          0.25

           

          音頻放大效果

           

          聲音小,無噪聲

          聲音較小,無躁聲

          聲音適中,無噪聲

          聲音稍大,無躁聲

          聲音較大,無躁聲

          聲音大,稍有躁聲

          聲音大,躁聲大

          經(jīng)過比較,最終將RW阻值定在1KΩ。

              調(diào)試完畢后,我們就可以欣賞動聽的音樂了。

           

          參考文獻(xiàn)

          [1]  趙曙光,郭萬有,楊頌華.可編程邏輯器件原理、開發(fā)與應(yīng)用,西安:西安電子科技大學(xué)出版社,2000:http://www.51kaifa.com

          [2]  曾繁泰,陳美金.VHDL程序設(shè)計.第二版,北京:清華大學(xué)出版社,2001:

          [3]  盧毅,賴杰.VHDL與數(shù)字電路設(shè)計,北京:北京科學(xué)出版社,2001:

          負(fù)離子發(fā)生器相關(guān)文章:負(fù)離子發(fā)生器原理
          脈沖點(diǎn)火器相關(guān)文章:脈沖點(diǎn)火器原理


          關(guān)鍵詞: EDA CPLD 音樂播放器 VHDL語言

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();