在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 簡(jiǎn)易電子琴設(shè)計(jì)

            簡(jiǎn)易電子琴設(shè)計(jì)

            作者: 時(shí)間:2023-12-07 來(lái)源:電子森林 收藏
            • 任務(wù):基于核心板 和 底板 完成簡(jiǎn)易電子琴設(shè)計(jì)并觀察調(diào)試結(jié)果
            • 要求:按動(dòng),驅(qū)動(dòng)底板無(wú)源蜂鳴器發(fā)出產(chǎn)生不同音調(diào),彈奏一首《小星星》。
            • 解析:通過(guò)編程驅(qū)動(dòng)電路,獲取鍵入的信息,然后通過(guò)編碼將鍵盤(pán)輸出的信息譯碼成對(duì)應(yīng)的音節(jié)數(shù)據(jù),最后通過(guò)PWM發(fā)生模塊驅(qū)動(dòng)底板上的無(wú)源蜂鳴器發(fā)出聲音。

            在基礎(chǔ)數(shù)字電路實(shí)驗(yàn)部分我們已經(jīng)掌握了設(shè)計(jì)PWM信號(hào)發(fā)生器的原理及方法,上節(jié)實(shí)驗(yàn)中又學(xué)習(xí)了矩陣鍵盤(pán)的驅(qū)動(dòng)原理及方法,本實(shí)驗(yàn)主要學(xué)習(xí)無(wú)源蜂鳴器的驅(qū)動(dòng)原理,同時(shí)熟悉PWM發(fā)生模塊及矩陣鍵盤(pán)驅(qū)動(dòng)模塊的實(shí)例化應(yīng)用。

            本文引用地址:http://www.biyoush.com/article/202312/453641.htm
            • 熟悉PWM信號(hào)發(fā)生驅(qū)動(dòng)模塊和矩陣鍵盤(pán)驅(qū)動(dòng)模塊的應(yīng)用
            • 了解無(wú)源蜂鳴器的驅(qū)動(dòng)原理及方法
            • 完成簡(jiǎn)易電子琴設(shè)計(jì)實(shí)現(xiàn)

            根據(jù)前面的實(shí)驗(yàn)解析我們可以得知,該設(shè)計(jì)總體可以拆分成兩個(gè)功能模塊實(shí)現(xiàn),

            • ArrayKeyBoard:通過(guò)驅(qū)動(dòng)矩陣鍵盤(pán)工作獲取鍵盤(pán)的操作信息數(shù)據(jù)。 * Beeper:根據(jù)鍵盤(pán)按鍵信息驅(qū)動(dòng)無(wú)源蜂鳴器發(fā)出不同的音節(jié)。 頂層模塊ElectricPiano通過(guò)實(shí)例化兩個(gè)子模塊并將對(duì)應(yīng)的信號(hào)連接,最終實(shí)現(xiàn)簡(jiǎn)易電子琴的總體設(shè)計(jì)。我們知道無(wú)源蜂鳴器是通過(guò)交流信號(hào)驅(qū)動(dòng)的,可以通過(guò)輸出不同頻率的PWM脈沖信號(hào)控制蜂鳴器產(chǎn)生不同的音節(jié)輸出,所以上面Beeper模塊又可以拆分成兩個(gè)功能模塊實(shí)現(xiàn)其功能
            • tone:通過(guò)編碼方式將鍵盤(pán)的操作信息譯碼成對(duì)應(yīng)的PWM周期信息。
            • PWM:根據(jù)PWM周期信息產(chǎn)生對(duì)應(yīng)的PWM脈沖信號(hào)。

            Top-Down層次設(shè)計(jì)

            模塊結(jié)構(gòu)設(shè)計(jì)

            蜂鳴器介紹

            蜂鳴器的分類(lèi): 按其結(jié)構(gòu)主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類(lèi)型:

            • 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng),振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。
            • 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構(gòu)成,當(dāng)接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號(hào),阻抗匹配器推動(dòng)壓電蜂鳴片發(fā)聲。

            按是否帶有信號(hào)源分為有源蜂鳴器和無(wú)源蜂鳴器兩種類(lèi)型:

            • 有源蜂鳴器只需要在其供電端加上額定直流電壓,其內(nèi)部的震蕩器就可以產(chǎn)生固定頻率的信號(hào),驅(qū)動(dòng)蜂鳴器發(fā)出聲音。
            • 無(wú)源蜂鳴器可以理解成與喇叭一樣,需要在其供電端上加上高低不斷變化的電信號(hào)才可以驅(qū)動(dòng)發(fā)出聲音。

            我們底板上集成的蜂鳴器為無(wú)源電磁式蜂鳴器,接下來(lái)和大家一起學(xué)習(xí)無(wú)源蜂鳴器的驅(qū)動(dòng)

            蜂鳴器驅(qū)動(dòng)電路

            無(wú)源蜂鳴器沒(méi)有集成振蕩器,需要外部提供震蕩激勵(lì),當(dāng)震蕩頻率不同時(shí)發(fā)出不同的音調(diào),對(duì)于數(shù)字系統(tǒng)來(lái)說(shuō),方波信號(hào)產(chǎn)生方便可靠,成為外部震蕩激勵(lì)的首選,方波信號(hào)輸入諧振裝置轉(zhuǎn)換為聲音信號(hào)輸出,電磁式蜂鳴器需要的驅(qū)動(dòng)電流較高,一般單片機(jī)和FPGA管腳驅(qū)動(dòng)能力有限不能直接驅(qū)動(dòng),常用三極管增加驅(qū)動(dòng)能力,另外電磁式蜂鳴器內(nèi)部含有感應(yīng)線圈,在電路通斷瞬間會(huì)產(chǎn)生感應(yīng)電勢(shì),為保證電路長(zhǎng)期穩(wěn)定的工作,最好增加續(xù)流二極管設(shè)計(jì),底板蜂鳴器驅(qū)動(dòng)電路如下:

            蜂鳴器驅(qū)動(dòng)電路

            注:不需要蜂鳴器工作時(shí),控制器BEEP端口輸出低電平,管腳配置下拉(pull dowm)模式

            蜂鳴器使用NPN三極管(S8050)驅(qū)動(dòng),三極管當(dāng)開(kāi)關(guān)用,當(dāng)基極電壓拉高時(shí),蜂鳴器通電,當(dāng)基極電壓拉低時(shí),蜂鳴器斷電,F(xiàn)PGA控制GPIO口給三極管的基極輸出不同頻率的脈沖信號(hào),蜂鳴器就可以發(fā)出不同的音節(jié)。

            蜂鳴器驅(qū)動(dòng)設(shè)計(jì)

            前面我們了解到電磁式無(wú)源蜂鳴器需要外部提供震蕩激勵(lì)才可以發(fā)出聲音,且震蕩頻率不同產(chǎn)生的音調(diào)也不同,不同音節(jié)與蜂鳴器震蕩頻率的對(duì)應(yīng)關(guān)系如下表:

            音調(diào)頻率對(duì)照表

            音節(jié)名頻率(Hz)音節(jié)名頻率(Hz)音節(jié)名頻率(Hz)
            低音1261.6中音1523.3高音11045.5
            低音2293.7中音2587.3高音21174.7
            低音3329.6中音3659.3高音31318.5
            中音4349.2中音4698.5高音41396.9
            低音5392中音5784高音51568
            低音6440中音6880高音61760
            低音7493.9中音7987.8高音71975.5

            FPGA要驅(qū)動(dòng)蜂鳴器就需要給蜂鳴器模塊輸出《音調(diào)頻率對(duì)照表》中不同頻率的脈沖信號(hào)就可以了,我們?cè)诨A(chǔ)數(shù)字電路實(shí)驗(yàn)中學(xué)習(xí)過(guò)PWM產(chǎn)生原理,設(shè)計(jì)過(guò)一個(gè)PWM信號(hào)發(fā)生器模塊,模塊根據(jù)兩個(gè)輸入信號(hào)(cycle、duty)控制產(chǎn)生周期可控、占空比可控的脈沖信號(hào)(pwm_out),可以用來(lái)驅(qū)動(dòng)無(wú)源蜂鳴器電路。

            PWM模塊端口程序如下:

            module PWM #
            (
            parameter	WIDTH = 32	//ensure that 2**WIDTH > cycle
            )
            (
            input					clk,
            input					rst_n,
            input		[WIDTH-1:0]	cycle,	//cycle > duty
            input		[WIDTH-1:0]	duty,	//duty < cycle
            output	reg				pwm_out
            );
            • cycle:基于系統(tǒng)時(shí)鐘的計(jì)數(shù)器計(jì)數(shù)終值,與產(chǎn)生脈沖信號(hào)的周期有關(guān)
            • duty:脈沖信號(hào)產(chǎn)生機(jī)制中的比較器閾值,與產(chǎn)生脈沖信號(hào)的脈寬(占空比)有關(guān)

            驅(qū)動(dòng)蜂鳴器的脈沖信號(hào)對(duì)占空比沒(méi)有太高的要求,我們默認(rèn)產(chǎn)生50%占空比的脈沖信號(hào),所以duty的輸入取cycle的一半;cycle的值關(guān)乎蜂鳴器的音節(jié),需要和《音調(diào)頻率對(duì)照表》中對(duì)應(yīng),例如如果要蜂鳴器發(fā)出低音1的音節(jié),脈沖信號(hào)頻率控制為261.6Hz,系統(tǒng)時(shí)鐘采用12MHz,計(jì)數(shù)器計(jì)數(shù)終值cycle就等于12M / 261.6 = 45872,即當(dāng)我們給PWM模塊中cycle信號(hào)的值為45872時(shí),得到低音1的音節(jié)輸出。這樣我們將每個(gè)音節(jié)對(duì)應(yīng)的cycle值計(jì)算出來(lái),當(dāng)按動(dòng)不同按鍵時(shí)給PWM模塊不同的cycle值就可以了,我們可以通過(guò)設(shè)計(jì)一個(gè)轉(zhuǎn)碼模塊(tone)將按鍵信息轉(zhuǎn)換成PWM需要的cycle信號(hào),矩陣鍵盤(pán)共有16個(gè)按鍵,我們只能輸出16個(gè)音節(jié)。

            PWM周期轉(zhuǎn)碼程序?qū)崿F(xiàn)如下:

            always@(key_in) begin
            	case(key_in)
            		16'h0001: cycle = 16'd45872;	//L1,
            		16'h0002: cycle = 16'd40858;	//L2,
            		16'h0004: cycle = 16'd36408;	//L3,
            		16'h0008: cycle = 16'd34364;	//L4,
            		16'h0010: cycle = 16'd30612;	//L5,
            		16'h0020: cycle = 16'd27273;	//L6,
            		16'h0040: cycle = 16'd24296;	//L7,
            		16'h0080: cycle = 16'd22931;	//M1,
            		16'h0100: cycle = 16'd20432;	//M2,
            		16'h0200: cycle = 16'd18201;	//M3,
            		16'h0400: cycle = 16'd17180;	//M4,
            		16'h0800: cycle = 16'd15306;	//M5,
            		16'h1000: cycle = 16'd13636;	//M6,
            		16'h2000: cycle = 16'd12148;	//M7,
            		16'h4000: cycle = 16'd11478;	//H1,
            		16'h8000: cycle = 16'd10215;	//H2,
            		default:  cycle = 16'd0;		//cycle為0,PWM占空比為0,低電平
            	endcase
            	end

            現(xiàn)在我們?cè)贐eeper模塊中實(shí)例化tone和PWM模塊,將tone的輸出與PWM的cycle輸入連線就實(shí)現(xiàn)了按鍵信息產(chǎn)生對(duì)應(yīng)音節(jié)的輸出了,想一想邏輯有問(wèn)題嗎?

            • 當(dāng)我們按下按鍵,會(huì)得到按鍵信息,根據(jù)按鍵信息轉(zhuǎn)碼得到一個(gè)cycle值,連線傳輸給PWM模塊,產(chǎn)生對(duì)應(yīng)頻率脈沖,聽(tīng)到對(duì)應(yīng)音節(jié)輸出;
            • 當(dāng)我們松開(kāi)按鍵,同樣有按鍵信息,對(duì)應(yīng)到轉(zhuǎn)碼模塊中得到cycle值為0,連線傳輸給PWM模塊,產(chǎn)生低電平信號(hào),蜂鳴器不發(fā)聲。

            應(yīng)該沒(méi)錯(cuò)了,到這里我們就完成了蜂鳴器音節(jié)驅(qū)動(dòng)部分。

            系統(tǒng)總體實(shí)現(xiàn)

            前次實(shí)驗(yàn)中我們學(xué)習(xí)了矩陣鍵盤(pán)的驅(qū)動(dòng)原理及方法,這里就不再重復(fù),不一樣的是之前我們用的矩陣鍵盤(pán)模塊的脈沖輸出(keypulse),本實(shí)驗(yàn)中簡(jiǎn)易電子琴在按鍵按下?tīng)顟B(tài)下一直發(fā)聲,跟按鍵時(shí)間長(zhǎng)短有關(guān),這樣我們就不能使用keypulse了,而應(yīng)該使用keyout信號(hào),另外keyout按鍵有效輸出為低電平,而PWM周期轉(zhuǎn)碼模塊(tone)是高有效編碼,所以在頂層模塊(ElectricPiano)中矩陣鍵盤(pán)(ArrayKeyBoard)與蜂鳴器音節(jié)驅(qū)動(dòng)模塊(Beeper)之間的key_out連線需要做按位取反操作。

            總體設(shè)計(jì)程序?qū)崿F(xiàn)如下:

            //Array_KeyBoard 
            Array_KeyBoard u1
            (
            .clk					(clk			),
            .rst_n					(rst_n			),
            .col					(col			),
            .row					(row			),
            .key_out				(key_out		),
            .key_pulse				(key_pulse		)
            ); 
            //beeper moduleBeeper u2(.clk					(clk			),
            .rst_n					(rst_n			),
            .key_out				(~key_out		),
            .beeper					(beeper			)
            );

            綜合后的設(shè)計(jì)框圖如下:

            rtl設(shè)計(jì)框圖

            • 雙擊打開(kāi)Quartus Prime工具軟件;
            • 新建工程:File → New Project Wizard(工程命名,工程目錄選擇,設(shè)備型號(hào)選擇,EDA工具選擇);
            • 新建文件:File → New → Verilog HDL File,鍵入設(shè)計(jì)代碼并保存;
            • 設(shè)計(jì)綜合:雙擊Tasks窗口頁(yè)面下的Analysis & Synthesis對(duì)代碼進(jìn)行綜合;
            • 管腳約束:Assignments → Assignment Editor,根據(jù)項(xiàng)目需求分配管腳;
            • 設(shè)計(jì)編譯:雙擊Tasks窗口頁(yè)面下的Compile Design對(duì)設(shè)計(jì)進(jìn)行整體編譯并生成配置文件;
            • 程序燒錄:點(diǎn)擊Tools → Programmer打開(kāi)配置工具,Program進(jìn)行下載;
            • 觀察設(shè)計(jì)運(yùn)行結(jié)果。

            將簡(jiǎn)易電子琴設(shè)計(jì)配置文件燒寫(xiě)到FPGA實(shí)驗(yàn)平臺(tái),按動(dòng)矩陣按鍵聽(tīng)蜂鳴器發(fā)出的聲音,16個(gè)按鍵對(duì)應(yīng)16個(gè)音節(jié),按鍵K1~K7分別對(duì)應(yīng)音節(jié)低音1~7,接下來(lái)一首好聽(tīng)的《小星星》送給大家,按照下面的曲譜循環(huán)彈奏: 1 1 5 5 6 6 5 , 4 4 3 3 2 2 1 , 5 5 4 4 3 3 2 , 5 5 4 4 3 3 2

            按照曲譜彈奏琴電子琴?zèng)]有什么難度,如果我們?cè)O(shè)計(jì)一個(gè)狀態(tài)機(jī),在狀態(tài)跳轉(zhuǎn)時(shí)能夠產(chǎn)生上述的音節(jié)信息,再配合我們今天講的蜂鳴器音節(jié)驅(qū)動(dòng)設(shè)計(jì),就可以實(shí)現(xiàn)一個(gè)音樂(lè)盒了,有興趣的同學(xué)不妨嘗試一下。



            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉