劉垣 李外云 趙嘉怡



摘 要:目前市場上便攜式的WAVE播放器大部分基于32位處理器,其資源利用率較低,而且價格偏高。針對上述情況,文章充分利用8位STC15系列單片機的串行外圍設備SPI接口和脈寬調制PWM輸出等功能,結合開源的FatFS文件系統,完成對SD卡上存儲的WAVE音頻文件進行讀取、DAC轉換,然后通過有源低通濾波器,實現對WAVE音頻文件的播放。實驗結果表明本文設計的WAVE播放器不僅硬件電路簡單,成本低廉,而且播放效果完全達到CD音質級別。
關鍵詞:STC15單片機;WAVE播放;SD卡;Petit Fat文件系統
引言
隨著電子技術的發展,數字音頻應用系統在我們現實生活中隨處可見,比如電梯、商場、電子玩具、報警器等。數字音頻技術的基本原理和處理方法就是采用ADC(Analog-to-Digital Converter)模/數轉化,對模擬的音頻信號進行采樣、量化、編碼,然后轉換成數字化的音頻數據和文件進行保存。在播放時,再將數字化的音頻數據經過DAC(Digital-to-Analog Converter)數/模轉換,恢復到模擬信號形式由發生器件播放出來。目前市場上便攜式的WAVE音樂播放器大部分基于32位處理器,其資源利用率較低,價格偏高。而本設計充分利用8位STC15系列單片機的PWM功能對WAVE文件的采樣數據進行DA轉化方便得實現了WAVE音頻文件的播放。
1 系統硬件
本系統采用STC15F2K60S2型號的單片機,以單片機為核心控制整個系統。利用單片機的SPI接口實現與SD卡物理接口的通信,完成SD卡上WAVE音頻文件的讀取,再將得到的采樣數據通過單片機的PWM功能進行DA轉換,經過低通濾波器實現模擬音頻數據的輸出。
1.1 系統硬件組成
本系統的組成框圖如圖1所示,硬件結構主要包括單片機最小系統[1]、SD卡接口電路、按鍵電路、低通濾波電路和耳機接口幾部分。其中單片機與SD卡的通信采用SPI接口方式,STC單片機為主機,SD卡為從機;STC單片機PCA模塊輸出的PWM信號通過低通濾波器最終連接到耳機接口;單片機的I/O口連接4×1獨立按鍵,用于控制和選擇音頻數據文件的播放。
要實現WAVE音頻文件的讀取,并且實現高質量播放效果,SD卡接口電路和有源低通濾波電路是最為關鍵的兩部分,下面將對其進行重點介紹。
1.1.1 SD卡接口電路
SD卡具體的接口電路如圖2所示。SD卡規范[2]規定了SD卡的工作電壓為3.3 V(2.7~3.6V),因此采用電源穩壓芯片AMS1117-3.3將5V電源轉換到3.3V供SD卡使用。電阻R4~R9組成了3個分壓電路,用于將STC的5V引腳輸出電平轉換成3.3V。此時SD卡才可以正常工作。
硬件設計好之后還需要實現SD卡的接口驅動。接口驅動的實現是通過單片機的SPI總線編程。SPI總線是一個面向字節的全雙工4線串行通信接口。SPI總線系統包括一個主機和一個從機,雙方之間通過4根信號線相連,分別是:主機輸出/從機輸入(MOSI),主機的數據傳入從機的通道;主機輸入/從機輸出(MISO),從機的數據傳入主機的通道;同步時鐘信號(SCLK),同步時鐘是由SPI主機產生的,并通過該信號傳送給從機,主機與從機之間的數據接收和發送都以該同步時鐘信號為基準進行;從機選擇(SS),該信號由主機發出,從機只在該信號有效時響應SCLK的時鐘信號開始通信。
SPI通信的本質是在同步時鐘作用下進行串行移位,其通信的工作模式和時序在SPI總線規范[3]中進行了詳細的描述。根據SD卡總線時序[4],并針對STC15F2K60S2型號單片機,本系統實現了以下幾個驅動函數,分別為初始化函數、接收字節函數和發送字節函數。
1.1.2 有源低通濾波電路
有源低通濾波電路由集成運放和無源元件電阻和電容構成。它的功能是允許從零到某個截止頻率的信號無衰減地通過,而對其他頻率的信號有抑制作用。
本系統設計的有源低通濾波電路為二階低通濾波電路[5],其通帶放大倍數與一階電路相同,可由公式(1)得到。衰減斜率達每十倍頻40dB。由于運放電路中的電阻不宜選擇過大或過小,一般為幾千歐至幾十千歐較合適,因此低通濾波電路的電阻值R1=14K?贅,R2=10K?贅,電容值C1=1nF,C2=1nF。將電阻電容值帶入公式(2)得到該有源低通濾波器的截止頻率約為13kHz。為了減少輸入偏置電流及其漂移對電路的影響,應使R1+R2=R3//R4,這里取R3=68K?贅,R4=39.8K?贅。將電阻R3、R4的阻值帶入公式(1)可得到通帶增益為1.58。
1.2 PWM方式DAC轉換
PWM是脈沖寬度調制的簡稱。一個典型PWM的波形如圖3所示,圖中T是PWM波的周期,T1是高電平的寬度,VCC是高電平值。當該PWM信號通過一個低通濾波器后,可以得到其輸出的平均電壓為V,如公式(3)所示
V=VCC×T1/T (3)
公式中:T1/T稱為PWM波的占空比。控制T1的寬度,即可改變PWM的占空比,得到不同的平均輸出電壓。因此,在實際應用中,常利用PWM波的輸出實現D/A轉換。
STC15系列單片機的PCA模塊要想實現PWM模式需要設定相關的寄存器。主要的寄存器有CMOD定時/計數器工作模式寄存器、CCON定時/計數器控制寄存器、CCAPMn比較/捕獲模式控制寄存器,每個寄存器的具體定義可參考STC15F2K60S2的官方數據手冊。要設置PCA模塊的PWM模式,CCAPMn寄存器的PWMn和ECOMn位必須置位,PCA模塊的時鐘源頻率選擇11.2896MHz,產生的PWM頻率為44.1kHz,其計算公式為
fpwm=Sclk/256 (4)
由于PCA模塊產生的PWM頻率是恒定的44.1kHz,因此,播放44.1kHz的音頻時,每個采樣點播放一次。當播放8kHz的音頻時,每個采樣點則以44.1kHz的頻率平均播放了5.5次,這樣保證了PWM產生的高頻噪聲總在44kHz以上,使濾波后的模擬信號更加平滑,以獲得更好的音頻輸出效果。
本設計為了讀取不同采樣頻率的WAVE文件(包括8K、22.1K、44.1K三個頻率),還需要一個定時器實現不同采樣頻率的播放。該定時器設置為16位自動重載模式,其中斷間隔是可調整的。在開始讀取準備播放的WAVE文件時,程序將讀取該文件的采樣頻率參數,自動調整定時器T0的中斷頻率與其相同,并在中斷服務程序中將下一個音頻數據更換到CCAPOH和CCAPOL寄存器中,這樣就保證了音頻數據的同步播放。
2 系統軟件設計
本系統軟件設計主要包括三個部分,分別是文件系統移植、SD卡操作命令、上層應用程序控制。
2.1 文件系統移植
PC機上可以直接寫入數據文件到SD卡,而嵌入式系統讀取數據則必須通過建立文件系統來讀取。本設計使用了一個免費的文件系統PetitFatFS(PetitFATFileSystemModule)。它是一位日本嵌入式工程師編寫的通用軟件模塊,它與FAT文件系統兼容。他的個人網站提供了用C語言編寫的源代碼以及在不同硬件平臺上移植與使用的實例。
本系統設計移植了AVR版本的PetitFatFS文件系統到STC15單片機上,由于PetitFatFS文件系統是通用的,所以它不依賴于底層模塊。底層I/O模塊不是PetitFatFS文件系統的一部分,因此,底層讀取物理存儲介質的函數必須由用戶編寫。主要的函數有兩個,第一個是disk_intialize函數,用于存儲介質的初始化;第二個是disk_readp函數,用于讀取SD卡的一個扇區,是磁盤操作的核心函數。
2.2 SD卡操作命令
在建立了SD卡物理接口層SPI的基礎上,僅僅可以實現簡單的面向字節的數據通道。SD卡規范制定了一組建立在SPI總線上的SD卡操作命令,通過發送不同的操作命令可以實現對SD卡的復位、初始化以及讀寫操作。其具體的命令格式和命令應答字格式參考SD卡規范。
針對SD卡的操作命令時序,首先要對SD卡實施上電復位操作,復位操作時SCLK的時鐘頻率應該在400kHz以下。SD卡在上電后默認采用SDIO接口方式,在CS高電平的情況下,先通過SCLK送72個以上的時鐘信號到SD卡,等待SD卡內部工作電源穩定,以完成SD卡的時鐘與SCLK的同步。然后拉低片選CS,發送復位命令CMD0,此時SD卡自動轉換成SPI接口方式。STC單片機開始接收SD卡的應答字,如果收到0x01,表示SD卡上電復位成功。接著進行SD卡的初始化操作,需要使用CMD55+ACMD41兩條命令,當單片機收到0x00的應答后,整個SD卡初始化工作完成。完成SD卡的初始化后,就可以通過CMD指令對SD卡進行讀寫操作了。
2.3 主函數控制
關于主函數部分,包括了STC15單片機定時器與PCA模塊的初始化、中斷處理函數、按鍵控制、音頻wav的解析和音頻數據的讀取與播放。
如圖4所示為主程序和中斷服務程序的流程圖,程序運行過程如下:
3 系統測試及結論
通過Keil開發環境對程序進行編譯和鏈接,將生成的hex文件下載到目標硬件平臺運行。通過測試發現,該系統能完成8K、22.1K、44.1K三個采樣頻率WAVE文件的播放,播放效果可以達到CD音質。相比于32位微處理器該WAVE音樂播放器硬件電路簡單,成本低廉,具有很大的實用參考價值。
參考文獻
[1]李全利.單片機原理及應用技術[M].北京:高等教育出版社,2001.
[2]童詩白,華成英.模擬電子技術基礎[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單片機嵌入式系統原理與應用實踐[M].北京:北京航空航天大學出版社,2007.