吳翠娟
摘要:該文采用FPGA芯片EP1K100QC208-3作為控制核心芯片實現(xiàn)簡易電子琴的控制電路。該簡易電子琴具有手動彈奏和自動演奏預(yù)存樂曲的功能,并可同時顯示手動彈奏或自動演奏的音節(jié)名稱??刂齐娐钒詣庸?jié)拍產(chǎn)生、手/自動彈奏音名產(chǎn)生、手/自動音名輸出選擇、音節(jié)分頻系數(shù)產(chǎn)生、音名頻率產(chǎn)生和BCD-7段譯碼等模塊的電路功能,用VHDL描述各電路設(shè)計。
關(guān)鍵詞:FPGA;電子琴;手動彈奏;自動演奏;音名顯示
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)28-6777-04
1 概述
眾所周知,物體振動能夠發(fā)出聲音。振動的頻率不同,聲音的音調(diào)就不同。樂譜中的每個音名都對應(yīng)有特定的發(fā)聲頻率。同樣,電子琴演奏出的每個音名,也是由一個個不同頻率的電信號,通過揚聲器的音圈,使揚聲器的振膜以與原電信號同頻率振動來控制揚聲器發(fā)出不同的音調(diào)的。
本簡易電子琴的設(shè)計可以通過按鍵選擇手動彈奏和自動演奏兩種模式。手動彈奏模式時,可通過按壓14個不同的按鍵,使揚聲器能對應(yīng)彈奏從中音1到低音1之間的全部音名。自動演奏模式時,揚聲器會自動播放預(yù)先設(shè)定的某段音樂。在兩種工作模式下,揚聲器發(fā)出的音名,可以通過數(shù)碼管顯示出來。
簡易電子琴系統(tǒng)框圖如圖1所示。
圖1的框圖,通過手/自動模式切換電路可選擇電子琴的手動彈奏/自動演奏模式。手動模式時,通過彈奏電路的音節(jié)鍵盤,可以手動彈奏n個音節(jié)對應(yīng)的n個彈奏按鍵;自動模式時,F(xiàn)PGA將基準頻率產(chǎn)生電路產(chǎn)生的高頻標準頻率信號處理產(chǎn)生自動演奏所需的節(jié)拍自動控制信號。通過FPGA編程實現(xiàn)的控制系統(tǒng),能夠播放出手動彈奏/自動演奏的樂曲,并在1位數(shù)碼管上顯示手動彈奏/自動演奏的音節(jié)名稱。
2 簡易電子琴的FPGA控制電路設(shè)計
本設(shè)計FPGA的外圍接口電路原理簡單,技術(shù)成熟,便于實現(xiàn)。
簡易電子琴的FPGA控制電路結(jié)構(gòu)如圖2所示。
FPGA內(nèi)部的控制電路各功能模塊用VHDL描述其設(shè)計功能。
2.1 自動節(jié)拍產(chǎn)生模塊
自動節(jié)拍產(chǎn)生模塊的設(shè)計是基于分頻器的設(shè)計,用于將高頻的基準頻率信號分頻產(chǎn)生自動演奏模式下8Hz的節(jié)拍自動控制信號。
用VHDL語言設(shè)計描述本電路模塊,得到的設(shè)計電路模塊如圖3所示。
圖中,CLKIN為基準頻率100KHz信號的輸入端口,CLKOUT為經(jīng)過12500分頻后得到的8Hz節(jié)拍信號輸出端口。
2.2 手動彈奏音名產(chǎn)生模塊
當(dāng)手/自動模式為手動模式時,手動彈奏音名產(chǎn)生模塊檢測n個彈奏按鍵的動作狀態(tài),生成按鍵對應(yīng)音名的BCD編碼。
本模塊設(shè)計使用1位數(shù)碼管,為了使數(shù)碼管顯示的音名易于識別,中低音1~7和中音1~7的BCD編碼采用正常的數(shù)字1~7的BCD編碼,而低音和中音可用小數(shù)點是否點亮來標識:如小數(shù)點點亮為低音,小數(shù)點未點亮為中音。也可以多增加1位數(shù)碼管用于顯示高、中、低音。
以14音電子琴為例,4個彈奏按鍵的標號與14個音名的對應(yīng)關(guān)系如圖4所示。
用VHDL設(shè)計描述本設(shè)計模塊,得到手動彈奏音名產(chǎn)生模塊如圖5所示。
圖5所示模塊圖中,MODE為手動/自動模式開關(guān)的狀態(tài)輸入端,高電平1時為手動彈奏模式;PLAYKEY[13..0]為14個彈奏按鍵的狀態(tài)輸入端,每一時刻只有一個按鍵被按下(按鍵按下為高電平1),如圖4-5所示,PLAYKEY(13)到PLAYKEY(7) 依次順序?qū)?yīng)低音1~7,PLAYKEY(6)到PLAYKEY(0) 依次順序?qū)?yīng)中音1~7;PLAYLOW為手動彈奏音名的低音/中音標志信號輸出端,用于識別低音和中音,PLAYLOW為1時表示低音,PLAYLOW為0時表示中音;PLAYNAME[3..0]為手動彈奏的低音1~7和中音1~7的BCD編碼輸出端。
2.3 自動演奏音名產(chǎn)生模塊
當(dāng)為自動模式時,自動演奏音名產(chǎn)生模塊以自動節(jié)拍分頻模塊產(chǎn)生的8Hz頻率信號為節(jié)拍,將按照預(yù)先設(shè)定的某段音樂的音符順序,依次循環(huán)輸出用于顯示音名的BCD碼和低音/中音標志。
以自動演奏樂譜拍號為4/4為例,即以四分音符為一拍,每小節(jié)有四拍。每小節(jié)可為4個四分音符或8個八分音符。每個八分音符為1個8Hz節(jié)拍,則每拍為1個四分音符(亦即2個八分音符),即占2個8Hz的節(jié)拍。因此,樂譜中,每拍為2個八分音符的每個音符占1個8Hz節(jié)拍,每拍是1個四分音符的占2個8Hz節(jié)拍。在程序設(shè)定中每個8Hz節(jié)拍產(chǎn)生一個音名,因此1個八分音符產(chǎn)生一個音名,1個四分音符應(yīng)產(chǎn)生兩個相同的音名,1個二分音符應(yīng)產(chǎn)生4個相同的音名,1個全音符應(yīng)產(chǎn)生8個相同的音名。
用VHDL設(shè)計描述本設(shè)計模塊,得到自動演奏音名產(chǎn)生模塊如圖6所示。
圖6所示模塊圖中,MODE為手動/自動模式開關(guān)的狀態(tài)輸入端,低電平0時為自動彈奏模式;JIEPAI為自動節(jié)拍產(chǎn)生模塊生成的8Hz節(jié)拍信號輸入端, AUTOLOW為自動彈奏音名的低音/中音標志信號輸出端,用于識別低音和中音,AUTOLOW為1時表示低音,AUTOLOW為0時表示中音;AUTONAME[3..0]為自動彈奏的低音1~7和中音1~7的BCD編碼輸出。
2.4 手動/自動音名輸出選擇模塊
手動彈奏音名產(chǎn)生模塊和自動彈奏音名產(chǎn)生模塊產(chǎn)生的兩組不同的音名BCD碼輸出(PLAYNAME和AUTONAME)及低音/中音標志(PLAYLOW和AUTOLOW),但FPGA的接口電路不可能同時處理兩組信號,因此本模塊的作用是根據(jù)手動/自動模式開關(guān)的狀態(tài),選擇兩組信號中的一組輸出給后續(xù)電路進行處理。
手動/自動音名輸出選擇模塊相當(dāng)于是一個二選一的數(shù)據(jù)選擇器。當(dāng)MODE為高電平,即手動彈奏模式時,選擇輸出手動彈奏音名產(chǎn)生模塊輸出的PLAYNAME和PLAYLOW;當(dāng)MODE為低電平,即自動演奏模式時,選擇輸出自動演奏音名產(chǎn)生模塊輸出的AUTONAME和AUTOLOW。
用VHDL設(shè)計描述本設(shè)計模塊,得到手動/自動音名輸出選擇模塊如圖7所示。
圖7所示模塊圖中,MODE為手動/自動模式開關(guān)的狀態(tài)輸入端;PLAYLOW和PLAYNAME為手動彈奏模式下的低音/中音標志和音名的BCD碼;AUTOLOW和AUTONAME為自動演奏模式下的低音/中音標志和音名的BCD碼;NAMEOUT和LOWOUT為輸出到后續(xù)模塊使電子琴發(fā)音的音名BCD碼和低音/中音標志,根據(jù)MODE的狀態(tài),選擇手動和自動兩種模式下的一組音名BCD碼和低音/中音標志作為輸出。
2.5 音節(jié)分頻系數(shù)產(chǎn)生模塊
1) 音節(jié)分頻系數(shù)產(chǎn)生模塊的設(shè)計思路
樂譜中的每個音節(jié)都對應(yīng)有特定的發(fā)聲頻率。不同音節(jié)的發(fā)聲頻率需對基準頻率進行不同分頻系數(shù)而得到。音節(jié)分頻系數(shù)產(chǎn)生模塊的功能是產(chǎn)生不同音節(jié)對應(yīng)的分頻系數(shù)。
簡譜中音名與頻率的對應(yīng)關(guān)系如表1所示。
2.6 音名頻率產(chǎn)生模塊
音名頻率產(chǎn)生模塊是用于對基準頻率信號進行不同分頻系數(shù)分頻而得到各音名對應(yīng)的發(fā)聲頻率。分頻系數(shù)是音名分頻系數(shù)產(chǎn)生模塊生成的數(shù)值,作為音名頻率產(chǎn)生模塊的分頻系數(shù)預(yù)置值,使不同音名的分頻系數(shù)預(yù)置值不同,從而產(chǎn)生對應(yīng)音名的發(fā)音頻率。
本模塊相當(dāng)于一個可預(yù)置分頻系數(shù)的分頻器。考慮到本模塊輸出的音名頻率信號需送蜂鳴器發(fā)聲,為了提高聲音信號的功率,可以采用圖9所示的高占空比分頻波形。
2.7 BCD-七段譯碼模塊
七段譯碼模塊是將低音1~7及中音1~7的音名BCD碼譯碼為數(shù)碼管的七段字段碼,使音名1~7的字形在數(shù)碼管上顯示出來。低音1~7及中音1~7的音名BCD碼對應(yīng)相同,低音和中音可用小數(shù)點是否點亮來標識:小數(shù)點點亮為低音,小數(shù)點未點亮為中音。
3 結(jié)束語
根據(jù)簡易電子琴的原理框圖,將用VHDL語言設(shè)計的功能模塊正確連接并編譯,編程數(shù)據(jù)下載配置到FPGA芯片中,該可編程芯片就可以實現(xiàn)要求的設(shè)計功能。再連接上外圍的輸入、輸出接口電路,該FPGA系統(tǒng)實現(xiàn)了簡易電子琴電路的設(shè)計功能。
本設(shè)計采用高集成度的FPGA芯片實現(xiàn),用VHDL描述設(shè)計,精確的數(shù)字分頻系數(shù)使電子琴的發(fā)音準確,避免了需要專業(yè)調(diào)音師反復(fù)調(diào)試、硬件電路設(shè)計修改困難、電路系統(tǒng)可靠性等問題,設(shè)計修改方便,功能擴展易于實現(xiàn),設(shè)計開發(fā)成本低,系統(tǒng)控制的可靠性和靈活性提高,系統(tǒng)的性價比大大提升。具有一定的現(xiàn)實意義。
參考文獻:
[1] 徐志軍,徐光輝.CPLD/FPGA的開發(fā)與應(yīng)用[M].北京:電子工業(yè)出版社,2002.
[2] 潘松,黃繼業(yè).SOPC技術(shù)實用教程[M]. 北京:清華大學(xué)出版社,2005.
[3] 盛青松.基于AT89C51可彈奏電子琴的設(shè)計[J].科技信息,2010(11).
[4] 章丹.基于單片機的簡易電子琴的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2014(6).
[5] 王瓊英.電子琴的一種音色處理方法及其電路[J].山東省科技院院刊,1988(5).
[6] 田立坤,張珊.基于CPLD的簡易電子琴的設(shè)計[J].黑龍江科技信息,2009(7).