數字麥克風PDM訊號採集與STM32 I2S介面應用(一)
- 2019 年 10 月 3 日
- 筆記
數字麥克風采用MEMS技術,將聲波訊號轉換為數字取樣訊號,由單晶片實現取樣量化編碼,一般而言數字麥克風的輸出有PDM麥克風和PCM麥克風,由於PDM麥克風結構、製程簡單而大量應用,在使用中要注意這二者的區別,尤其是STM32 MCU的文檔在I2S介面章節,對此區別含糊不清,比如取樣率配置,WS管腳的用法,單聲道雙聲道的配置,很多地方無法從文檔中得到準確資訊,需要一邊摸索一邊研究文檔。本文就是對這些問題的一個研究筆記。
一、數字麥克風通訊方式
數字麥克風管教很簡單,如下面的圖示。

電源和地,時鐘腳CLK,左右聲道選擇L/R,訊號管教SD或DOUT。區別是WS管教,這個管教對數據採集和解析度配置有很大影響。STM32晶片手冊這樣描述對應的這三個管教:

訊號時序圖如下:

上面描述了STM32晶片關於I2S的麥克風的數據讀取時序,而麥克風廠家如何處理輸出訊號,有自己的方式,這裡就是I2S介面應用的第一個需要主要的點。
例子1:INMP441
INMP441是具有WS管腳的數字麥克風,它的時序圖如下,立體聲模式下,WS=0時輸出左聲道,WS=1時輸出右聲道。

單聲道模式下,LR=0時一個WS周期內只有低電平輸出訊號,另外一半周期輸出為高組,LR=1時輸出時序相反。

例子2:MP45DT02
MP45DT02是沒有WS管腳的數字麥克風,它的時序圖如下,該器件根據LR電平,分別在CLK的低電平和高電平時間輸出左右聲道訊號,實現訊號的分時復用。
二、取樣時鐘配置
如果用此類麥克風的單聲道應用,就需要考慮數據採集在WS另外半休眠周期的影響。下面就是此麥克風的一個STM32F407晶片下的配置。
/* I2S2 init function */ void MX_I2S2_Init(void) { hi2s2.Instance = SPI2; hi2s2.Init.Mode = I2S_MODE_MASTER_RX; hi2s2.Init.Standard = I2S_STANDARD_MSB; hi2s2.Init.DataFormat = I2S_DATAFORMAT_16B; hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_16K; hi2s2.Init.CPOL = I2S_CPOL_LOW; hi2s2.Init.ClockSource = I2S_CLOCK_PLL; hi2s2.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE; if (HAL_I2S_Init(&hi2s2) != HAL_OK) { Error_Handler(); } }
該模式下,麥克風的輸出訊號圖如下。由於LR=0,所以在WS低電平半周期輸出訊號,高電平半周期內無數據。可以發現CLK時鐘為512khz,我們配置的是16bit數據模式,16khz取樣,為什麼CLK輸出為512khz呢?原因是左右聲道各自佔用半個周期,當WS訊號為16khz時,時鐘頻率是16bit*16khz*2=512khz,實際上單麥克風系統中有效取樣時間只有一半,相當於一個採集周期內採集一半休息一半,其聲音特性被這樣采一半截取一半會有什麼變化呢,需要試驗驗證。

上面的問題是由WS管腳引起的,若選用無WS管腳的其他訊號,比如MP34DT04,則是另一種時序,晶片手冊時序圖如下。
如果LR管腳接地,則在CLK的低電平半周期輸出訊號,如果LR接VCC,則在CLK的高電平半周期輸出訊號,在一個數據線上實現雙聲道採集。

這種麥克風對於單聲道應用,會在CLK一半時間內輸出訊號,另一半高組。在立體聲應用中,使用一根數據線傳輸左右聲道,分時復用傳輸訊號。

麥克風晶片要求的時鐘頻率範圍一般是1—3Mhz,把上面程式碼的取樣率設置為32Khz,則採集訊號如下圖。CLK時鐘頻率為1Mhz,為什麼會出現這種情況呢?

麥克風輸出PDM訊號,PDM調製器將緩衝模擬訊號轉換為串列脈衝密度調製訊號。時鐘輸入( CLK)用於控制PDM調製器。常見的數字麥克風的時鐘頻率範圍在1 MHz至3.25 MHz之間。該頻率將定義生成離散時間表示( PDM比特流)的放大器模擬輸出訊號取樣頻率。同樣的分析方法,ST晶片是按照雙聲道WS區分左右聲道配置的晶片,那麼WS低電平是左聲道,高電平是右聲道,因此軟體配置一個16it取樣的訊號,一個周期需要2*16bit=32個時鐘脈衝,而配置的取樣率為32khz,這就使得CLK輸出達到了32bit*32khz=1024khz,所以下面測量到clk為1.024Mhz。WS訊號的頻率為32Khz,就是取樣率訊號的頻率。這裡是數字麥克風計算PDM取樣率的另一個易錯點,上面的計算方法是對於有SW管腳的麥克風感測器而言的,對於沒有SW管腳的麥克風晶片,則實際PDM取樣率為STM32 MCU配置的解析度的二倍。

參考文檔:
1、如何將PDM數字麥克風連接到STM32單片機
AN5027 使用STM32 32位Arm® Cortex® MCU連接PDM數字麥克風
尊重原創技術文章,轉載請註明。
