<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于 STEP-MAX10M08核心板的簡(jiǎn)易電子琴設計

基于 STEP-MAX10M08核心板的簡(jiǎn)易電子琴設計

作者: 時(shí)間:2023-11-27 來(lái)源:小腳丫STEP開(kāi)源社區 收藏

實(shí)驗任務(wù)

  • 任務(wù):基于 核心板 和 底板 完成簡(jiǎn)易設計并觀(guān)察調試結果
  • 要求:按動(dòng)矩陣鍵盤(pán),驅動(dòng)底板無(wú)源蜂鳴器發(fā)出產(chǎn)生不同音調,彈奏一首《小星星》。
  • 解析:通過(guò)編程驅動(dòng)矩陣鍵盤(pán)電路,獲取矩陣鍵盤(pán)鍵入的信息,然后通過(guò)編碼將鍵盤(pán)輸出的信息譯碼成對應的音節數據,最后通過(guò)PWM發(fā)生模塊驅動(dòng)底板上的無(wú)源蜂鳴器發(fā)出聲音。

實(shí)驗目的

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

本文引用地址:http://dyxdggzs.com/article/202311/453309.htm
  • 熟悉PWM信號發(fā)生驅動(dòng)模塊和矩陣鍵盤(pán)驅動(dòng)模塊的應用
  • 了解無(wú)源蜂鳴器的驅動(dòng)原理及方法
  • 完成簡(jiǎn)易設計實(shí)現

設計框圖

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

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

image.png

image.png

實(shí)驗原理

蜂鳴器介紹

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

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

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

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

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

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

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

image.png

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

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

蜂鳴器驅動(dòng)設計

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

音調頻率對照表

音節名頻率(Hz)音節名頻率(Hz)音節名頻率(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要驅動(dòng)蜂鳴器就需要給蜂鳴器模塊輸出《音調頻率對照表》中不同頻率的脈沖信號就可以了,我們在基礎數字電路實(shí)驗中學(xué)習過(guò)PWM產(chǎn)生原理,設計過(guò)一個(gè)PWM信號發(fā)生器模塊,模塊根據兩個(gè)輸入信號(cycle、duty)控制產(chǎn)生周期可控、占空比可控的脈沖信號(pwm_out),可以用來(lái)驅動(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 > dutyinput		[WIDTH-1:0]	duty,	//duty < cycleoutput	reg				pwm_out);
  • cycle:基于系統時(shí)鐘的計數器計數終值,與產(chǎn)生脈沖信號的周期有關(guān)
  • duty:脈沖信號產(chǎn)生機制中的比較器閾值,與產(chǎn)生脈沖信號的脈寬(占空比)有關(guān)

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

PWM周期轉碼程序實(shí)現如下:

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,低電平
	endcaseend

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

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

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

系統總體實(shí)現

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

總體設計程序實(shí)現如下:

//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			));

綜合后的設計框圖如下:

image.png




評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>