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