<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è) > 嵌入式系統 > 設計應用 > 利用PWM給單片機應用增加語(yǔ)音功能

利用PWM給單片機應用增加語(yǔ)音功能

作者: 時(shí)間:2008-01-23 來(lái)源: 收藏

  隨著(zhù)嵌入式領(lǐng)域的拓展,目前許多微控制器芯片一般都不具備數據一模擬的雙向通道,但幾乎都集成有產(chǎn)生模塊。本文利用飛思卡爾公司HCSl2模塊,還原存儲在存儲器中的聲音采樣數據,在幾乎不增加成本的情況下,實(shí)現嵌入式應用中的擴展語(yǔ)音功能。

本文引用地址:http://dyxdggzs.com/article/77961.htm

  HCSl2系列未包含的模塊。要給其擴展語(yǔ)音功能,通常的做法是增加一塊芯片。雖然這樣做可以得到非常好的音質(zhì)(取決于芯片的性能),但由于耍多使用一塊數/模轉換芯片,在對音質(zhì)要求不太高的應用中,會(huì )給設計增加額外的成本,同時(shí)也使電路設計相對復雜。

  本文介紹利用還原聲音的解決方案,可以很好地解決這個(gè)矛盾。例如安全報警應用中,系統通常已經(jīng)包含了一塊微控制器(用來(lái)處理人機交互以及系統的控制等),當發(fā)出警報時(shí),可以是“BB”或“當當”的蜂鳴聲;當然,更好的做法是發(fā)出清晰的語(yǔ)音。

  用PWM產(chǎn)生聲音的基本原理,是使用存儲在Flash中的音頻采樣數據或通過(guò)某種算法產(chǎn)生的聲音數據,來(lái)控制PWM每個(gè)波形的占空比;接下來(lái)通過(guò)一低通濾波器濾波,就可將聲音從PWM的脈沖波里分離出來(lái),驅動(dòng)揚聲器發(fā)出聲音。

  1 從WAV文件中提取聲音采樣數據

  一般來(lái)說(shuō),可以從WAV文件中提取聲音數據,標準的WAV格式的聲音文件含有聲音的采樣數據和文件頭。文件頭描述了后面聲音數據的一些信息,如通道數、采樣頻率、采樣位數以及數據的長(cháng)度等。

  通道數,是指聲音的采樣路數,如單聲道、立體聲等。采樣頻率,是指每秒鐘對聲音的采樣次數,采樣頻率越高,還原出來(lái)的聲音越接近原始聲音,如表l所列。要精確還原出某種頻率的波形,其最小采樣率應為該波形的2倍。

  

采樣頻率與音質(zhì)關(guān)系

 

  采樣位數,指的是每次采樣的采樣精度。采樣位數越高,還原出來(lái)的聲音的量化噪聲越小,波形也越接近原波形。WAV文件的文件頭定義:

  

程序

 

  提取聲音數據時(shí),請注意采樣頻率、采樣位數、存儲容量與存儲時(shí)間的關(guān)系,如表2所列。通常,11.025 kHz的采樣頻率和8位的采樣位數可獲得清晰的語(yǔ)音以及較好的音樂(lè )聲,并且占有較少的存儲空間。

  通過(guò)了解和分析WAV文件的格式,可以將文件中的聲音采樣數據讀取出來(lái),并轉換為C語(yǔ)言格式的數組結構,以便和其他程序一并編譯和下載到芯片中去。例如:

  

程序

 

  

采樣頻率

 

  2 產(chǎn)生PWM波形

  要還原聲音,最低要求是HCSl2系列微控制器具備一個(gè)PWM模塊,芯片選擇的另一個(gè)細節是要有足夠的Flash存儲容量,來(lái)存儲聲音的采樣數據。MC9S12DP256具有一個(gè)16位的PWM模塊.可產(chǎn)生16位解析精度的PWM波形,這意味著(zhù)nr以使用16位的采樣數據來(lái)產(chǎn)生PWM。MC9S12DP256還具備256 KB的Flash,能夠存儲23 78 s八位11.025 kHz的采樣數據。

  產(chǎn)生PWM波形的步驟:

 ?、僭O置定時(shí)器.產(chǎn)生定時(shí)中斷:如采樣率為ll.025 kHz.則設置定時(shí)器的定時(shí)中斷頻率為11.025 kHz。

 ?、诔跏蓟疨WM模塊,產(chǎn)生11.025kHz的PWM波形。

 ?、鄣却〞r(shí)器中斷,在中斷處理程序中取采樣數據,并設置PWM占空比寄存器,判斷聲音是否播放完成。若完成,則關(guān)定時(shí)器巾斷,并停止PWM輸出。

  3 低通濾波

  PWM輸出后須通過(guò)低通濾波器濾波,才能還原成人耳能識別的聲音。低通濾波器的類(lèi)型和參數取決于聲音的采樣頻率和價(jià)格預算。最簡(jiǎn)單的要數RC濾波器。這種濾波器的優(yōu)點(diǎn)是儀需要兩個(gè)元件,另一種是有源濾波器,濾波效果好,但相對復雜。

  濾波器截止頻率的選擇,對于音頻輸出是非常重要的,推薦設置在采樣頻率的一半。若要獲得更佳的濾波器截止頻率,就要進(jìn)一步對采樣數據進(jìn)行分析,找出最大具有有效聲音數據的頻率。當然,在一般應用中并沒(méi)有要求這么嚴格,甚至在某些場(chǎng)合中,即使用參數不非常明確的元件也能獲得很好的聲音輸出,這時(shí)RC濾波器將是最好的選擇。

  推薦使用圖1所示的濾波器,其截止頻率為5.5 kHz(11.025 kHz/2)。這個(gè)設計中,使用了2個(gè)運算放大器,足夠驅動(dòng)一小型揚聲器。

  

程序

 

  

程序

 

  圖2也給出一種簡(jiǎn)單直接的接法:僅使用一22μF的電容用于低通濾波,驅動(dòng)一5 kHz、8Ω的小揚聲器。

  

濾波電路

 

  結語(yǔ)

  利用MC9S12DP256微控制器的PWM功能可為的應用增加語(yǔ)音功能。對聲音采樣數據的存儲方式是用直接的、原始的采樣數據。在具體的實(shí)際應用中,為存儲更長(cháng)時(shí)間的聲音數據,還可對聲音數據進(jìn)行壓縮,具體算法請參考相關(guān)資料。

pwm相關(guān)文章:pwm原理


雙控開(kāi)關(guān)相關(guān)文章:雙控開(kāi)關(guān)原理


關(guān)鍵詞: PWM 單片機 數/模轉換

評論


相關(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>