- 音樂播放控制電路總體方案的設(shè)計
- 設(shè)計任務(wù)分析
- 電路的實現(xiàn)
- 音高編碼和分頻控制
- 音長控制
- 音強(qiáng)控制
- 樂曲的循環(huán)播放控制
- 曲譜編碼舉例
1總體方案的設(shè)計
設(shè)計一個具有3個八度音程的電子音樂自動循環(huán)播放電路,具體曲目可以由設(shè)計者自由編輯,以簡譜的二進(jìn)制編碼形式存放在ROM的數(shù)據(jù)文件中。
設(shè)計要求如下:
(1)采用5位二進(jìn)制碼表示音高信息,曲譜碼存儲器的地址由時值計數(shù)器控制,計數(shù)頻率按樂曲的演奏速度選擇,每個脈沖周期是所選曲譜中最短音符的時值。存儲器在時值計數(shù)脈沖作用下順序輸出音高碼控制分頻器。
(2)采用20Hz~20kHz的音頻脈沖信號控制蜂鳴器,可以使其根據(jù)控制信號頻率發(fā)出不同的音調(diào)。
音樂播放控制電路設(shè)計方案原理框圖如圖1所示。
2設(shè)計任務(wù)分析
2.1音高編碼和分頻控制
計數(shù)器模值控制的方法很多,改變預(yù)置數(shù)控制模值是比較簡單的一種。分頻計數(shù)器的預(yù)置數(shù)與分頻率和計數(shù)方式、預(yù)置方式有關(guān)。當(dāng)采用減計數(shù)器、并以計數(shù)器的溢出信號(CarryOut)實現(xiàn)異步預(yù)置控制時,計數(shù)器的模(分頻率)等于預(yù)置數(shù)。比如,當(dāng)計數(shù)脈沖頻率為10MHz時,若希望產(chǎn)生音高“5”,并考慮占空比整形的二分頻作用,分頻系數(shù)(計數(shù)器的模)應(yīng)該是3188.9,四舍五入后的計數(shù)器預(yù)置數(shù)應(yīng)該是3189。其溢出信號的頻率為3135.8Hz,控制蜂鳴器的信號頻率為1567.9Hz,滿足音高頻率要求。若采用同步預(yù)置方式,則計數(shù)器的預(yù)置數(shù)應(yīng)該是模減1,為3188。由于計數(shù)器的溢出信號可能出現(xiàn)冒險干擾,采用同步預(yù)置的方法比較安全。
[page]
分析表1可見,表中3個不同音程相同音名(同一行)的信號頻率都相差一倍。
即音程升、降8度時,頻率增加或減小一倍。所以,若分頻計數(shù)器的計數(shù)脈沖頻率降低一倍時,蜂鳴器發(fā)出的音調(diào)降低8度。比如,當(dāng)分頻率仍為3189,但計數(shù)脈沖頻率為5MHz時,控制蜂鳴器的信號頻率為784Hz,為中音“5”。
因此若采用模值和輸入脈沖頻率都可控的計數(shù)器實現(xiàn)信號分頻,可根據(jù)音程碼選擇分頻計數(shù)器的輸入脈沖頻率fs、根據(jù)音名碼控制分頻計數(shù)器的模值N,如圖2所示。
這樣,分頻系數(shù)表只需考慮7個音高。由于計數(shù)脈沖只能分頻降低,所以表中應(yīng)該存儲高音程7個不同音名對應(yīng)的計數(shù)器預(yù)置值,其他兩個音程可通過降低分頻計數(shù)器的脈沖頻率實現(xiàn)。
3個8度音程的21個音高至少需要5位二進(jìn)制碼表示。為了控制方便,考慮將音名和音程分別編碼:7個音名和休止符采用3位二進(jìn)制碼表示,控制分頻器計數(shù)器的預(yù)置數(shù)實現(xiàn)模值N修改;3個音程用2位二進(jìn)制碼表示,控制分頻器的計數(shù)脈沖頻率fs。
2.2音長控制
曲譜存儲單元的數(shù)據(jù)輸出時間是時值計數(shù)脈沖的一個周期,決定了該單元音符的持續(xù)時間。所以,與計數(shù)脈沖周期相同時值的音符為音長的度量單位,其音符碼占1個存儲單元。其他音符根據(jù)其時值長短占據(jù)不同數(shù)量的存儲單元。比如,若以8分音符的時值作為存儲器地址計數(shù)器的脈沖周期,則8分音符碼占1個存儲單元,4分音符占2個存儲單元,2分音符占4個存儲單元,以此類推。
因此,可以所選曲譜的最短音符作為時值的度量單位。比如,圖3所示的《梁祝》曲譜中最短的音符為8分音,若其編碼存放1個存儲單元,則時值計數(shù)脈沖周期為一個8分音長時間,可選O.5s。曲譜中的四分音符碼需要存放2個單元,一拍延長音也需要2個單元。該段曲譜有8個音節(jié),每個音節(jié)是一個全音(8個8分音),演奏總時值為8×8個8分音。所以,存儲曲譜編碼的存儲器需要64個存儲單元。
[page]
2.3音強(qiáng)控制
音的強(qiáng)度也稱音的力度,體現(xiàn)了樂曲的情感元素。由于本設(shè)計實現(xiàn)的是簡單的電子音樂播放,無法表現(xiàn)音強(qiáng)的不同。而且,參考方案還不能區(qū)別相同音高的音符連續(xù)與否。比如,兩個八分音符“11”的總時值與一個四分音符“1”的時值相同,但體現(xiàn)的樂聲是不同的。前者是兩個強(qiáng)8分音,而后者可以認(rèn)為是一個強(qiáng)8分音和一個弱8分音構(gòu)成。為了解決這個問題,可以在連續(xù)的相同強(qiáng)音間加一個極短促的間斷區(qū)別兩者的不同,間斷時間可以是幾個毫秒。這樣,在音符編碼中應(yīng)該有一位碼控制。
如果間斷音碼單獨(dú)占1個存儲單元,可設(shè)置間斷音標(biāo)志,控制時值計數(shù)器狀態(tài)為間斷信息單元地址時計數(shù)頻率改變,使間斷碼輸出的時間為間斷音長;如果間斷音碼與強(qiáng)音碼存放同一單元,可觸發(fā)數(shù)字單穩(wěn)態(tài)電路產(chǎn)生問斷控制信號EN。
2.4樂曲的循環(huán)播放控制
為了實現(xiàn)樂曲的循環(huán)播放,應(yīng)該在樂曲結(jié)束時使曲譜表的查表地址回到初始值??稍谇V表的最后一個單元中存放一個結(jié)束符,結(jié)束符的編碼可以利用音程碼的冗余碼。電路采用邏輯門對音程碼進(jìn)行判斷,當(dāng)出現(xiàn)結(jié)束符碼時控制時值計數(shù)器復(fù)位,樂曲重新開始演奏。
2.5曲譜編碼舉例
設(shè)音符的6位二進(jìn)制編碼中,最高位為間斷音控制,中間2位為音程碼,最低3位為音名碼。每個8分音存放于1個存儲單元,四分音符碼占2個存儲單元。若音名碼用其簡譜數(shù)符對應(yīng)的二進(jìn)制碼表示,而低、中、高三個音程分別用"01”,“00",“10”三組碼表示,“11”為結(jié)束符碼,則圖3曲譜碼存儲表如表2所示。表中6位二進(jìn)制音符碼用2位八進(jìn)制數(shù)表示。
3電路的實現(xiàn)
根據(jù)設(shè)計電路原理框圖,曲譜碼以分頻數(shù)編碼,音高信號分頻由一個可預(yù)置的模N計數(shù)器實現(xiàn)。分頻系數(shù)表和曲譜表都存儲在ROM中。若希望控制蜂鳴器的信號占空比為50%,分頻器的輸出信號采用二分頻電路實現(xiàn)占空比整形,但注意信號頻率被降低一半。電路原理框圖中M分頻器的作用是產(chǎn)生合適的時值計數(shù)脈沖頻率。電路的頂層原理圖如圖4所示。
FPGA技術(shù)已成為電子系統(tǒng)設(shè)計領(lǐng)域現(xiàn)代化的標(biāo)志。本文將FPGA用于電子技術(shù)課程設(shè)計,取得了較好的效果。通過本設(shè)計激發(fā)了學(xué)生學(xué)習(xí)的興趣,拓寬了學(xué)生的思路,為學(xué)生今后的畢業(yè)設(shè)計和從事電子技術(shù)方面的科研、開發(fā)工作打下了良好的基礎(chǔ)。