我們生活在一個(gè)信息高速發(fā)達(dá)的時(shí)代,各種各樣電子產(chǎn)品層出不窮。對(duì)于廣大老百姓來說,電子琴可以說已經(jīng)不再是什么“新鮮玩意”了,它現(xiàn)在作為一種休閑和娛樂的產(chǎn)品早就推出市面,面向百姓,進(jìn)入了我們的生活。作為一個(gè)電子信息科學(xué)與技術(shù)專業(yè)的學(xué)生,了解這些電子產(chǎn)品的基本的組成和設(shè)計(jì)原理是十分必要的,我們學(xué)習(xí)過了計(jì)算機(jī)組成的理論知識(shí),而我所做的課程設(shè)計(jì)正是對(duì)我學(xué)習(xí)的理論進(jìn)行實(shí)踐和鞏固。
電子琴作為音樂與科技的產(chǎn)物,在電子化和信息化的時(shí)代,為音樂的大眾化做出了很大的貢獻(xiàn),歌曲的制作大多數(shù)都要由電子琴來完成,然后通過媒介流傳開來,電視劇和電影的插曲、電視節(jié)目音效、甚至你的手機(jī)鈴聲,都很可能包含電子琴的身影。
電子琴因其操作簡(jiǎn)單, 且能模擬各種傳統(tǒng)樂器的音色, 而深受消費(fèi)者喜愛。筆者介紹了一種電子琴的設(shè)計(jì)方法。該系統(tǒng)基于可編程邏輯器件 FPGA( FieldProgrammable Logical Device) 芯片 , 利用 VHDL 硬件描述語言設(shè)計(jì)系統(tǒng)核心部件, 再配以適當(dāng)?shù)耐鈬娐?,可從琴鍵上進(jìn)行演奏也可自動(dòng)進(jìn)行樂曲演奏, 可模擬傳統(tǒng)樂器笛、風(fēng)琴、小號(hào)、單簧、基準(zhǔn)頻率產(chǎn)生器雙簧等音色。該電子琴共有12 個(gè)琴鍵 ( 7 個(gè)白色琴鍵 , 5個(gè)黑色琴鍵) , 分高音、中音、低音 3 個(gè)音區(qū), 演奏時(shí)音名可動(dòng)態(tài)顯示。
原理分析
樂曲都是由一連串的音符組成,按照樂曲的樂譜依次輸出這些音符所對(duì)應(yīng)的頻率,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各個(gè)音符的音調(diào)。為了準(zhǔn)確地演奏出一首樂曲,僅僅讓揚(yáng)聲器能夠發(fā)出聲音是遠(yuǎn)遠(yuǎn)不夠的,還必須準(zhǔn)確地控制樂曲的節(jié)奏,即每個(gè)音符的持續(xù)時(shí)間。由此可見,樂曲中每個(gè)音符的發(fā)音頻率以及音符持續(xù)的時(shí)間是樂曲能夠連續(xù)演奏的兩個(gè)關(guān)鍵因素。
樂曲的12平均率規(guī)定:每2個(gè)八度音之間的頻率要相差1倍,比如簡(jiǎn)譜中的中音2與高音2。在2個(gè)八度音之間,又可分為12個(gè)半音。另外,音符A(簡(jiǎn)譜中的低音5)的頻率為392Hz,音符E到F之間、B到C之間為半音,其余為全音。由此可以計(jì)算出簡(jiǎn)譜中從低音l至高音1之間每個(gè)音符的頻率。簡(jiǎn)譜音名與頻率對(duì)應(yīng)關(guān)系下圖2-1所示:


1 系統(tǒng)組成
該電子琴系統(tǒng)組成框圖如圖 1 所示。

2 系統(tǒng)各部分電路設(shè)計(jì)
2.1 基準(zhǔn)頻率產(chǎn)生器
電路由晶振與反相器 CC4069 構(gòu)成時(shí)鐘脈沖振蕩器。振蕩器輸出的頻率為 6 MHz, 作為系統(tǒng)的基準(zhǔn)頻率。

自動(dòng)演奏及鍵盤編碼模塊( AUTOMUSIC 模塊)
該模塊主要包括兩大內(nèi)容: 鍵盤輸入編碼及樂曲自動(dòng)演奏。其 VHDL 程序的結(jié)構(gòu)如圖 2 所示, 包括 3 個(gè)進(jìn) 程 : p01:process ( clk, Auto) 進(jìn)程完成對(duì)系統(tǒng)時(shí)鐘 6 MHz 的 1 500 000 分頻, 得到 4 Hz 的信號(hào) clk2, 作為另一進(jìn)程的計(jì)數(shù)時(shí)鐘, 用來控制每個(gè)音階之間的停頓時(shí)間; p02: process( clk2) 進(jìn)程為地址計(jì)數(shù)器, 計(jì)數(shù)范圍為0~音樂存貯模塊中音符的最大地址數(shù)。完成自動(dòng)演奏樂曲的地址累加, 同時(shí)實(shí)現(xiàn)樂曲循環(huán)演奏; music: pro-cess ( count0, Auto, index2) 進(jìn)程主要用來記錄所選樂曲的樂譜、根據(jù)樂譜產(chǎn)生 12 位發(fā)聲控制輸出 index0 信號(hào)。當(dāng) auto 為“0”時(shí), 將存儲(chǔ)在此模塊中的 12位二進(jìn)制數(shù)作為發(fā)聲控制信號(hào) , 自動(dòng)演奏樂曲。在記錄樂譜時(shí) , 若將 1 拍的時(shí)間長度定為1 s, 因地址計(jì)數(shù)器的時(shí)鐘頻率為 4 Hz, 即 1/4 拍時(shí)間為 0.25 s,則 1 個(gè)全音音符需重復(fù)記錄 4次 , 2/4 拍音符重復(fù)記錄 2 次, 該進(jìn)程的流程圖如圖 3所示。

該模塊程序中 clk 接基準(zhǔn)頻率產(chǎn)生器, 輸入系統(tǒng)的基準(zhǔn)頻率 6 MHz; auto 為鍵盤輸入演奏與自動(dòng)演奏的切換開關(guān), 即當(dāng) auto=“0”時(shí), 選擇音樂存儲(chǔ)器里的樂曲 , 自動(dòng)演奏 ; auto=“1”時(shí) , 選擇鍵盤輸入的信號(hào) , 從琴鍵上演奏。high2, med2, low2 分別接鍵盤上高、中、低音的控制開關(guān) , Index2[0]~I(xiàn)ndex2[11]分別接鍵盤上的12 個(gè)琴鍵, HIGH0, med0, low0 分別輸出音調(diào)的音區(qū)信息( 分別對(duì)應(yīng)高音、中音、低音區(qū)) ; Index0[0]~I(xiàn)ndex0[11]輸出琴鍵編碼或音樂存儲(chǔ)器里的樂曲的音符編碼。

2.3 音符產(chǎn)生電路模塊( Tone 模塊)
該模塊的作用是產(chǎn)生各音符的分頻預(yù)置值。根據(jù)各音名與頻率的關(guān)系( 如表 1) 以及聲音輸出控制模塊( speaker 模塊) 中數(shù)控分頻器的設(shè)計(jì), 分別計(jì)算出高音區(qū)、中音區(qū)、低音區(qū)不同音符的分頻預(yù)置值, 如表 2 所示。( 在表 1、表 2 中, 音符 1、2、3、4、5、6、7 對(duì)應(yīng)電子琴的 7 個(gè)白色琴鍵, 音符 1*、2*、4*、5*、6* 對(duì)應(yīng)電子琴的 5個(gè)黑色琴鍵。) 程序中 Index 為 AUTOMUSIC 模塊傳入的音符編碼, high0, med0, low0 為 AUTOMUSIC 模塊傳入表示音符所處音區(qū), 如 high0=‘1’表示音符處于高音區(qū) ; low0=‘1’表 示音符處于低音區(qū) ; 程序中 Tone 為輸出音符分頻預(yù)置值, 因最大的預(yù)置數(shù)為 6 668, 為節(jié)省硬件資源及提高系統(tǒng)運(yùn)行速度, 將 Tone 取值范圍定為0~16#1E00#; HIGH, med, low 輸出音符所處音區(qū), 接外電路的發(fā)光二極管 , 高電平有效 ; CODE 端口接數(shù)碼管, 輸出音符的顯示數(shù)碼。該模塊 VHDL 程序的結(jié)構(gòu)如圖 4 所示, 程序主要部分 se 進(jìn)程流程圖如圖 5 所示。


2.4 聲音輸出控制模塊( speaker 模塊)
該模塊主要電路為數(shù)控分頻器。其 VHDL 程序結(jié)構(gòu)如圖 6 所示。程序中 CLK1 輸入系統(tǒng)的基準(zhǔn)頻率 6 MHz, TONE1 接 Tone 模塊傳來的分頻預(yù)置值, SPKS 輸出端接音色產(chǎn)生器, 輸出各音符所對(duì)應(yīng)的頻率。該程序包括 3 個(gè)進(jìn)程 , 其中 DivideCLK : PROCESS( clk1) 進(jìn)程功能將系統(tǒng)的基準(zhǔn)頻率 6 MHz 進(jìn)行 3 分頻得到 2 MHz 的頻率, 由信號(hào) PreCLK 傳給 GenSpkS:PROCESS( PreCLK, Tone1) 進(jìn)程。在設(shè)計(jì)中 PreCLK 頻率太大,會(huì)使在 GenSpkS 進(jìn)程分頻中占用太多的硬件資源 ,PreCLK 頻率太小 GenSpkS 進(jìn)程分頻后輸出音符頻率誤差太大, 綜合考慮這兩個(gè)方面, PreCLK 選用 2 MHz的頻率。GenSpkS 進(jìn)程由一個(gè)初值可變的加法計(jì)數(shù)器構(gòu)成, 初值為 Tone 模塊傳來的分頻預(yù)置值( Tone1) 。分頻后得到的頻率 FullSpkS 為對(duì)應(yīng)的音符頻率的 2 倍。由于 FullSpkS 頻率的脈寬很窄, 為便于驅(qū)動(dòng)揚(yáng)聲器, 將FullSpkS 信 號(hào) 傳 給 進(jìn) 程 DelaySpkS:PROCESS ( Full-SpkS) , 在此進(jìn)程中利用一個(gè) D 觸發(fā)器將 FullSpkS 信號(hào)進(jìn)行二分頻, 使到達(dá)揚(yáng)聲器的波形為對(duì)稱方波, 此時(shí)輸出的頻率即達(dá)到所對(duì)應(yīng)音符的實(shí)際頻率。

2.4 在 FPGA 芯片中頂層文件的原理圖該原理圖
如圖 7 所示。輸入端 CLK1, CLK 接系統(tǒng)的基準(zhǔn)頻率 6 MHz, AUTO 接鍵盤輸入演奏與自動(dòng)演奏的切換開關(guān) , 總線 INDEX2[11..0]接鍵盤上的 12 個(gè)琴鍵, HIGH2, MED2, LOW2 分別接鍵盤上高、中、低音的控制開關(guān); 輸出端 HIGH, MED, LOW 分別接發(fā)光二極管, 指示音調(diào)的音區(qū)信息( 分別對(duì)應(yīng)高音、中音、低音區(qū)) , CODE[7..0]接 LED 數(shù)碼管, 輸出音符的顯示數(shù)碼,SPKS 輸出端接音色產(chǎn)生器,輸出各音符所對(duì)應(yīng)的頻率。

2.6 音色產(chǎn)生器
音色指樂音的音域范圍、頻譜成分及其包絡(luò)特性等。音色產(chǎn)生器的功能是模擬各種傳統(tǒng)樂器如笛子、小 號(hào)、雙簧、風(fēng)琴等的樂音。這些樂音的區(qū)別表現(xiàn)在發(fā)同風(fēng)琴一音符時(shí), 波形的頻譜與包絡(luò)特性不同。由此設(shè)計(jì)的一種簡(jiǎn)單音色產(chǎn)生電路如圖 8 所示。其中, 74LS93 的輸入脈沖 CLK0 來自 FPGA 芯片的音符頻率輸出端 spks; 74LS93 的輸出端 Q0~Q3 為音符頻率 spks 的 2,4, 8 及 16 分頻信號(hào)。電阻 R1~R10 組成權(quán)電阻相加網(wǎng)絡(luò), 可產(chǎn)生由不同頻率成分與不同幅度組成的各種波形。適當(dāng)選擇 R1~R10 的阻值或一定比值( 與樂器標(biāo)準(zhǔn)音比較后定) , 可獲得如圖 8 所示的笛子、小號(hào)、雙簧、風(fēng)琴等的基本樂音。再經(jīng) RC 濾波輸出, 以改善音色。

該設(shè)計(jì)將電子琴系統(tǒng)的核心部分集成在可編程邏輯器件FPGA 芯片上, 大大簡(jiǎn)化了外部電路, 較以前的傳統(tǒng)設(shè)計(jì), 既減少了所用芯片的種類和數(shù)量 ,縮小了體積, 降低了功耗, 提高了系統(tǒng)的整體性能,對(duì)系統(tǒng)在使用中的故障率大為減少。此外, 這種基于可編程邏輯器件以 VHDL 硬件描述語言進(jìn)行設(shè)計(jì), 在電子設(shè)計(jì)的各個(gè)階段、各個(gè)層次進(jìn)行計(jì)算機(jī)模擬驗(yàn)證, 保證設(shè)計(jì)過程的正確性, 可降低設(shè)計(jì)成本 , 縮短設(shè)計(jì)周期, 具有廣闊的應(yīng)用前景。
電子發(fā)燒友App






















評(píng)論