国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于STC單片機WAVE音樂播放器的設(shè)計與實現(xiàn)

2015-05-30 05:11:47劉垣李外云趙嘉怡
科技創(chuàng)新與應(yīng)用 2015年34期

劉垣 李外云 趙嘉怡

摘 要:目前市場上便攜式的WAVE播放器大部分基于32位處理器,其資源利用率較低,而且價格偏高。針對上述情況,文章充分利用8位STC15系列單片機的串行外圍設(shè)備SPI接口和脈寬調(diào)制PWM輸出等功能,結(jié)合開源的FatFS文件系統(tǒng),完成對SD卡上存儲的WAVE音頻文件進(jìn)行讀取、DAC轉(zhuǎn)換,然后通過有源低通濾波器,實現(xiàn)對WAVE音頻文件的播放。實驗結(jié)果表明本文設(shè)計的WAVE播放器不僅硬件電路簡單,成本低廉,而且播放效果完全達(dá)到CD音質(zhì)級別。

關(guān)鍵詞:STC15單片機;WAVE播放;SD卡;Petit Fat文件系統(tǒng)

引言

隨著電子技術(shù)的發(fā)展,數(shù)字音頻應(yīng)用系統(tǒng)在我們現(xiàn)實生活中隨處可見,比如電梯、商場、電子玩具、報警器等。數(shù)字音頻技術(shù)的基本原理和處理方法就是采用ADC(Analog-to-Digital Converter)模/數(shù)轉(zhuǎn)化,對模擬的音頻信號進(jìn)行采樣、量化、編碼,然后轉(zhuǎn)換成數(shù)字化的音頻數(shù)據(jù)和文件進(jìn)行保存。在播放時,再將數(shù)字化的音頻數(shù)據(jù)經(jīng)過DAC(Digital-to-Analog Converter)數(shù)/模轉(zhuǎn)換,恢復(fù)到模擬信號形式由發(fā)生器件播放出來。目前市場上便攜式的WAVE音樂播放器大部分基于32位處理器,其資源利用率較低,價格偏高。而本設(shè)計充分利用8位STC15系列單片機的PWM功能對WAVE文件的采樣數(shù)據(jù)進(jìn)行DA轉(zhuǎn)化方便得實現(xiàn)了WAVE音頻文件的播放。

1 系統(tǒng)硬件

本系統(tǒng)采用STC15F2K60S2型號的單片機,以單片機為核心控制整個系統(tǒng)。利用單片機的SPI接口實現(xiàn)與SD卡物理接口的通信,完成SD卡上WAVE音頻文件的讀取,再將得到的采樣數(shù)據(jù)通過單片機的PWM功能進(jìn)行DA轉(zhuǎn)換,經(jīng)過低通濾波器實現(xiàn)模擬音頻數(shù)據(jù)的輸出。

1.1 系統(tǒng)硬件組成

本系統(tǒng)的組成框圖如圖1所示,硬件結(jié)構(gòu)主要包括單片機最小系統(tǒng)[1]、SD卡接口電路、按鍵電路、低通濾波電路和耳機接口幾部分。其中單片機與SD卡的通信采用SPI接口方式,STC單片機為主機,SD卡為從機;STC單片機PCA模塊輸出的PWM信號通過低通濾波器最終連接到耳機接口;單片機的I/O口連接4×1獨立按鍵,用于控制和選擇音頻數(shù)據(jù)文件的播放。

要實現(xiàn)WAVE音頻文件的讀取,并且實現(xiàn)高質(zhì)量播放效果,SD卡接口電路和有源低通濾波電路是最為關(guān)鍵的兩部分,下面將對其進(jìn)行重點介紹。

1.1.1 SD卡接口電路

SD卡具體的接口電路如圖2所示。SD卡規(guī)范[2]規(guī)定了SD卡的工作電壓為3.3 V(2.7~3.6V),因此采用電源穩(wěn)壓芯片AMS1117-3.3將5V電源轉(zhuǎn)換到3.3V供SD卡使用。電阻R4~R9組成了3個分壓電路,用于將STC的5V引腳輸出電平轉(zhuǎn)換成3.3V。此時SD卡才可以正常工作。

硬件設(shè)計好之后還需要實現(xiàn)SD卡的接口驅(qū)動。接口驅(qū)動的實現(xiàn)是通過單片機的SPI總線編程。SPI總線是一個面向字節(jié)的全雙工4線串行通信接口。SPI總線系統(tǒng)包括一個主機和一個從機,雙方之間通過4根信號線相連,分別是:主機輸出/從機輸入(MOSI),主機的數(shù)據(jù)傳入從機的通道;主機輸入/從機輸出(MISO),從機的數(shù)據(jù)傳入主機的通道;同步時鐘信號(SCLK),同步時鐘是由SPI主機產(chǎn)生的,并通過該信號傳送給從機,主機與從機之間的數(shù)據(jù)接收和發(fā)送都以該同步時鐘信號為基準(zhǔn)進(jìn)行;從機選擇(SS),該信號由主機發(fā)出,從機只在該信號有效時響應(yīng)SCLK的時鐘信號開始通信。

SPI通信的本質(zhì)是在同步時鐘作用下進(jìn)行串行移位,其通信的工作模式和時序在SPI總線規(guī)范[3]中進(jìn)行了詳細(xì)的描述。根據(jù)SD卡總線時序[4],并針對STC15F2K60S2型號單片機,本系統(tǒng)實現(xiàn)了以下幾個驅(qū)動函數(shù),分別為初始化函數(shù)、接收字節(jié)函數(shù)和發(fā)送字節(jié)函數(shù)。

1.1.2 有源低通濾波電路

有源低通濾波電路由集成運放和無源元件電阻和電容構(gòu)成。它的功能是允許從零到某個截止頻率的信號無衰減地通過,而對其他頻率的信號有抑制作用。

本系統(tǒng)設(shè)計的有源低通濾波電路為二階低通濾波電路[5],其通帶放大倍數(shù)與一階電路相同,可由公式(1)得到。衰減斜率達(dá)每十倍頻40dB。由于運放電路中的電阻不宜選擇過大或過小,一般為幾千歐至幾十千歐較合適,因此低通濾波電路的電阻值R1=14K?贅,R2=10K?贅,電容值C1=1nF,C2=1nF。將電阻電容值帶入公式(2)得到該有源低通濾波器的截止頻率約為13kHz。為了減少輸入偏置電流及其漂移對電路的影響,應(yīng)使R1+R2=R3//R4,這里取R3=68K?贅,R4=39.8K?贅。將電阻R3、R4的阻值帶入公式(1)可得到通帶增益為1.58。

1.2 PWM方式DAC轉(zhuǎn)換

PWM是脈沖寬度調(diào)制的簡稱。一個典型PWM的波形如圖3所示,圖中T是PWM波的周期,T1是高電平的寬度,VCC是高電平值。當(dāng)該PWM信號通過一個低通濾波器后,可以得到其輸出的平均電壓為V,如公式(3)所示

V=VCC×T1/T (3)

公式中:T1/T稱為PWM波的占空比。控制T1的寬度,即可改變PWM的占空比,得到不同的平均輸出電壓。因此,在實際應(yīng)用中,常利用PWM波的輸出實現(xiàn)D/A轉(zhuǎn)換。

STC15系列單片機的PCA模塊要想實現(xiàn)PWM模式需要設(shè)定相關(guān)的寄存器。主要的寄存器有CMOD定時/計數(shù)器工作模式寄存器、CCON定時/計數(shù)器控制寄存器、CCAPMn比較/捕獲模式控制寄存器,每個寄存器的具體定義可參考STC15F2K60S2的官方數(shù)據(jù)手冊。要設(shè)置PCA模塊的PWM模式,CCAPMn寄存器的PWMn和ECOMn位必須置位,PCA模塊的時鐘源頻率選擇11.2896MHz,產(chǎn)生的PWM頻率為44.1kHz,其計算公式為

fpwm=Sclk/256 (4)

由于PCA模塊產(chǎn)生的PWM頻率是恒定的44.1kHz,因此,播放44.1kHz的音頻時,每個采樣點播放一次。當(dāng)播放8kHz的音頻時,每個采樣點則以44.1kHz的頻率平均播放了5.5次,這樣保證了PWM產(chǎn)生的高頻噪聲總在44kHz以上,使濾波后的模擬信號更加平滑,以獲得更好的音頻輸出效果。

本設(shè)計為了讀取不同采樣頻率的WAVE文件(包括8K、22.1K、44.1K三個頻率),還需要一個定時器實現(xiàn)不同采樣頻率的播放。該定時器設(shè)置為16位自動重載模式,其中斷間隔是可調(diào)整的。在開始讀取準(zhǔn)備播放的WAVE文件時,程序?qū)⒆x取該文件的采樣頻率參數(shù),自動調(diào)整定時器T0的中斷頻率與其相同,并在中斷服務(wù)程序中將下一個音頻數(shù)據(jù)更換到CCAPOH和CCAPOL寄存器中,這樣就保證了音頻數(shù)據(jù)的同步播放。

2 系統(tǒng)軟件設(shè)計

本系統(tǒng)軟件設(shè)計主要包括三個部分,分別是文件系統(tǒng)移植、SD卡操作命令、上層應(yīng)用程序控制。

2.1 文件系統(tǒng)移植

PC機上可以直接寫入數(shù)據(jù)文件到SD卡,而嵌入式系統(tǒng)讀取數(shù)據(jù)則必須通過建立文件系統(tǒng)來讀取。本設(shè)計使用了一個免費的文件系統(tǒng)PetitFatFS(PetitFATFileSystemModule)。它是一位日本嵌入式工程師編寫的通用軟件模塊,它與FAT文件系統(tǒng)兼容。他的個人網(wǎng)站提供了用C語言編寫的源代碼以及在不同硬件平臺上移植與使用的實例。

本系統(tǒng)設(shè)計移植了AVR版本的PetitFatFS文件系統(tǒng)到STC15單片機上,由于PetitFatFS文件系統(tǒng)是通用的,所以它不依賴于底層模塊。底層I/O模塊不是PetitFatFS文件系統(tǒng)的一部分,因此,底層讀取物理存儲介質(zhì)的函數(shù)必須由用戶編寫。主要的函數(shù)有兩個,第一個是disk_intialize函數(shù),用于存儲介質(zhì)的初始化;第二個是disk_readp函數(shù),用于讀取SD卡的一個扇區(qū),是磁盤操作的核心函數(shù)。

2.2 SD卡操作命令

在建立了SD卡物理接口層SPI的基礎(chǔ)上,僅僅可以實現(xiàn)簡單的面向字節(jié)的數(shù)據(jù)通道。SD卡規(guī)范制定了一組建立在SPI總線上的SD卡操作命令,通過發(fā)送不同的操作命令可以實現(xiàn)對SD卡的復(fù)位、初始化以及讀寫操作。其具體的命令格式和命令應(yīng)答字格式參考SD卡規(guī)范。

針對SD卡的操作命令時序,首先要對SD卡實施上電復(fù)位操作,復(fù)位操作時SCLK的時鐘頻率應(yīng)該在400kHz以下。SD卡在上電后默認(rèn)采用SDIO接口方式,在CS高電平的情況下,先通過SCLK送72個以上的時鐘信號到SD卡,等待SD卡內(nèi)部工作電源穩(wěn)定,以完成SD卡的時鐘與SCLK的同步。然后拉低片選CS,發(fā)送復(fù)位命令CMD0,此時SD卡自動轉(zhuǎn)換成SPI接口方式。STC單片機開始接收SD卡的應(yīng)答字,如果收到0x01,表示SD卡上電復(fù)位成功。接著進(jìn)行SD卡的初始化操作,需要使用CMD55+ACMD41兩條命令,當(dāng)單片機收到0x00的應(yīng)答后,整個SD卡初始化工作完成。完成SD卡的初始化后,就可以通過CMD指令對SD卡進(jìn)行讀寫操作了。

2.3 主函數(shù)控制

關(guān)于主函數(shù)部分,包括了STC15單片機定時器與PCA模塊的初始化、中斷處理函數(shù)、按鍵控制、音頻wav的解析和音頻數(shù)據(jù)的讀取與播放。

如圖4所示為主程序和中斷服務(wù)程序的流程圖,程序運行過程如下:

3 系統(tǒng)測試及結(jié)論

通過Keil開發(fā)環(huán)境對程序進(jìn)行編譯和鏈接,將生成的hex文件下載到目標(biāo)硬件平臺運行。通過測試發(fā)現(xiàn),該系統(tǒng)能完成8K、22.1K、44.1K三個采樣頻率WAVE文件的播放,播放效果可以達(dá)到CD音質(zhì)。相比于32位微處理器該WAVE音樂播放器硬件電路簡單,成本低廉,具有很大的實用參考價值。

參考文獻(xiàn)

[1]李全利.單片機原理及應(yīng)用技術(shù)[M].北京:高等教育出版社,2001.

[2]童詩白,華成英.模擬電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2000.

[3]Elm-chan.PetitFATFileSystemModule[EB/OL].(2014-06-10)[2015-01-04]http://elm-chan.org/fsw/ff/00index_p.html.

[4]STC15F2K60S2MCUUser'smanual[EB/OL].(2014-07-02)[2015-01-04]http://www.stcmcu.com/datasheet/stc/STC-AD-PDF/STC15.pdf

[5]馬潮.AVR單片機嵌入式系統(tǒng)原理與應(yīng)用實踐[M].北京:北京航空航天大學(xué)出版社,2007.

治多县| 博罗县| 大城县| 华安县| 台安县| 阿瓦提县| 醴陵市| 玛多县| 红安县| 北川| 延津县| 边坝县| 乌鲁木齐县| 屏东市| 沭阳县| 阿鲁科尔沁旗| 南木林县| 新沂市| 正定县| 白沙| 遵义市| 民勤县| 江达县| 广汉市| 大洼县| 陇川县| 桃江县| 彰武县| 台南县| 南城县| 巴林左旗| 葵青区| 泗阳县| 石屏县| 额尔古纳市| 收藏| 抚松县| 张家港市| 上高县| 崇阳县| 黄山市|