? ? 電子琴設計原理
樂曲都是由一連串的音符組成,按照樂曲的樂譜依次輸出這些音符所對應的頻率,就可以在揚聲器上連續(xù)地發(fā)出各個音符的音調。為了準確地演奏出一首樂曲,僅僅讓揚聲器能夠發(fā)出聲音是遠遠不夠的,還必須準確地控制樂曲的節(jié)奏,即每個音符的持續(xù)時間。由此可見,樂曲中每個音符的發(fā)音頻率以及音符持續(xù)的時間是樂曲能夠連續(xù)演奏的兩個關鍵因素。
樂曲的12平均率規(guī)定:每2個八度音之間的頻率要相差1倍,比如簡譜中的中音2與高音2。在2個八度音之間,又可分為12個半音。另外,音符A(簡譜中的低音5)的頻率為392Hz,音符E到F之間、B到C之間為半音,其余為全音。由此可以計算出簡譜中從低音
1至高音1之間每個音符的頻率。簡譜音名與頻率對應關系如圖2-1所示:
產生各音符所需的頻率使用一分頻器來實現(xiàn),由于各音符對應的頻率多為非整數,而分頻系數又不能為小數,所以必須將計算得到的分頻數四舍五入取整數。若分頻器時鐘頻率過低,則由于分頻系數過小,四舍五入取整數后的誤差較大;若時鐘頻率過高,雖然誤差變小,但分頻數將會變大。在實際的設計中應綜合考慮這兩方面的因素,在盡量減小頻率誤差的前提下取合適的時鐘頻率。實際上,只要各個音符間的相對頻率關系不變,演奏出的樂曲聽起來都不會走調。
設計的音樂電子琴選取12MHZ的系統(tǒng)時鐘頻率。在數控分頻器模塊,首先對時鐘頻率進行12分頻,得到1MHZ的輸入頻率,然后再次分頻得到各音符的頻率。由于數控分頻器輸出的波形是脈寬極窄的脈沖波,為了更好的驅動揚聲器發(fā)聲,在到達揚聲器之前需要均衡占空比,從而生成各音符對應頻率的對稱方波輸出。這個過程實際上進行了一次二分頻,頻率變?yōu)樵瓉淼亩种患?.5MHZ。
因此,分頻系數的計算可以按照下面的方法進行。以中音1為例,對應的頻率值為523Hz,它的分頻系數應該為:
至于其他音符,可由上式求出對應的分頻系數,這樣利用程序可以很輕松地得到相應的樂聲。
各音名對應的分頻系數如圖2-2所示:
音符的持續(xù)時間須根據樂曲的速度及每個音符的節(jié)拍數來確定。因此,要控制音符的音長,就必須知道樂曲的速度和每個音符所對應的節(jié)拍數。如果將全音符的持續(xù)時間設為1s的話,那么一拍所應該持續(xù)的時間為0.25秒,則只需要提供一個4HZ的時鐘頻率即可產生四分音符的時長。
至于音長的控制,在自動演奏模塊,每個樂曲的音符是按地址存放的,播放樂曲時按4HZ的時鐘頻率依次讀取簡譜,每個音符持續(xù)時間為0.25秒。如果樂譜中某個音符為三拍音長,那又該如何控制呢?其實只要在3個連續(xù)地址存放該音符,這時就會發(fā)三個0.25秒的音長,即持續(xù)了三拍的時間,通過這樣一個簡單的操作就可以控制音長了。
2.2.1分頻模塊設計方法
方法一:使用加法計數器。在計數器值小于分頻系數值時,保持分頻的時鐘信號不變,當計數器加到分頻系數值時,令分頻時鐘信號發(fā)生跳變,同時將零設為此時的計數器值,這樣分頻時鐘信號就會再次發(fā)生跳變。但是這種占空比不等于50%的信號是無法驅動實驗板上的揚聲器發(fā)聲的。
方法二:使用減法計數器,計數器的數值由分頻系數值向下遞減,在減為零時跳變并重新賦值,原理與第一種類似。
方法三:先對時鐘脈沖進行分頻得到1MHZ的脈沖,然后按照輸入的分頻系數對1MHZ的再次分頻,得到所需的音符頻率,最后在音調輸出時再進行二分頻,將脈沖展開能夠直接得到占空比為50%的分頻信號,將脈沖展寬,使揚聲器有足夠發(fā)生功率。在思索一番后,最終確定了這一個方案,相比較與以上兩種實現(xiàn)方法,這種方法的好處在于能夠直接得到占空比為50%的分頻信號。
按鍵模塊設計方法
按鍵模塊在這個系統(tǒng)中的作用是每按下實驗板上的一個鍵,該模塊要相應的輸出一個分頻系數,用程序將該分頻系數送到分頻模塊后將會產生一個特定頻率的信號,傳送到實驗板上的揚聲器里,并發(fā)出不同頻率的聲音即音符。由于每輸入一個信號,就產生一個特定的輸出信號,且每種情況均能羅列,再加上情況總數(電子琴音調個數)不是很大,故我們使case語句來實現(xiàn)。
2.2.3 頂層模塊設計方法 頂層模塊的設計就是要設計一個頂層模塊將各模塊進行例化連接,再組成一個協(xié)同發(fā)揮功能的的整體。我們注意到,分頻模塊需要一個分頻系數,而鍵入模塊將會產生一個分頻系數,因此分頻系數在整個系統(tǒng)中將既不輸入也不輸出,在例化時,我們使用一個信號與之相連,這樣它就能在模塊間傳遞。
2.3系統(tǒng)設計的主要組成部分
本設計采用 VHDL語言編程設計實現(xiàn),音頻發(fā)生部分、鍵輸入部分和數碼顯示部分以外,其余全部在一片FPGA芯片上實現(xiàn)。其系統(tǒng)結構如下圖2.3所示:
硬件系統(tǒng)主要由FPGA模塊,顯示模塊,按鍵模塊以及揚聲器電路組成。系統(tǒng)結構精簡、可靠,而且靈活性高。
硬件設計
3.1 Cyclone II芯片簡介 在Cyclone I器件系列非常成功的基礎上,Altera公司的Cyclone II系列擴大了FPGA的密度,最多可以達到68416個邏輯單元,并且還提供了622個可用的輸入/輸出引腳和1.1M比特的嵌入式寄存器。Cyclone II器件的制造基于300mm晶圓,采用臺積電90nm、低K值電介質工藝,這種工藝技術采用了低絕緣體過程,確保了快速性、有效性和低成本。Cyclone II器件通過使硅片的面積最小化,所以可以在單芯片上支持復雜的數字系統(tǒng),而且在成本上還可以和ASIC進行競爭。Altera 最新一代低價位的FPGA——cyclone II FPGA系列,和同類90nmFPGA器件相比,它提高了百分之六十的性能和降低了一半的功耗。它的低成本和優(yōu)化特征使Cyclone II 系列為各種各樣的汽車、消費、通訊、視頻處理、測試以及測量、和其他最終市場提供了理想的解決方案。 Cyclone II設備系列擁有以下的特點:
4608到68416 LEs 的高密度的結構;
嵌入式乘法器;
先進的I/O口支持;
靈活的時鐘管理電路;
設備的配置;
3.2按鍵模塊及其功能‘ 獨立式鍵盤輸入電路的VHDL程序設計主要包括:鍵盤去抖電路、輸入信息譯碼電路和LED顯示被按下等電路組成,其中重點為輸入信息譯碼電路的設計。如圖所示獨立式鍵盤電路接口信息為獨立的譯碼電路,譯碼時只對單鍵輸入進行,該系統(tǒng)中用到了16個獨立鍵。如圖3-1所示是獨立式鍵盤電路圖:
3.3顯示電路模塊功能
顯示模塊主要是由1塊74LS48譯碼芯片和1個共陰極七段LED顯示器及1個發(fā)光二極管組成,由七段LED顯示測量的頻率值,發(fā)光二極管顯示高音的音符。74LS48是輸出高電平有效的中規(guī)模集成BCD七段顯示譯碼驅動器,74LS48的輸入端是四位二進制信號(8421BCD碼),a、b、c、d、e、f、g是七段譯碼器的輸出驅動信號,高電平有效??芍苯域寗庸碴帢O七段數碼管,使能端全部懸空。74LS48簡圖3-2:
軟件設計
4.1系統(tǒng)的流程
本設計采用Altera公司的EDA軟件系統(tǒng)EP2C8Q208C8來完成。采用自頂向下的設計方法。圖4-1為其軟件流程圖:
軟件設計采用結構化程序設計方法,功能模塊各自獨立,實際上在設計中將鍵盤輸入和樂曲存儲放在了一個自動演奏模塊中,軟件設計的核心部分是數控分頻器,鍵盤輸入和樂曲儲存都是提供給它相應的分頻比。對輸入的基準時鐘進行多次分頻,最終輸出的就是想得到的音階的頻率。
4.2 設計模塊
本系統(tǒng)主要由三個功能模塊組成:music.vhd、tone.vhd和speaker.vhd。系統(tǒng)頂層設計原理圖如圖4-2所示,該系統(tǒng)有4個輸入,3個輸出端口。其原理圖。
評論
查看更多