|
數(shù)字麥克風(fēng)采用MEMS技術(shù),將聲波信號轉(zhuǎn)換為數(shù)字采樣信號,由單芯片實現(xiàn)采樣量化編碼,一般而言數(shù)字麥克風(fēng)的輸出有PDM麥克風(fēng)和PCM麥克風(fēng),由于PDM麥克風(fēng)結(jié)構(gòu)、工藝簡單而大量應(yīng)用,在使用中要注意這二者的區(qū)別,尤其是STM32 MCU的文檔在I2S接口章節(jié),對此區(qū)別含糊不清,比如采樣率配置,WS管腳的用法,單聲道雙聲道的配置,很多地方無法從文檔中得到準(zhǔn)確信息,需要一邊摸索一邊研究文檔。本文就是對這些問題的一個研究筆記。 一、數(shù)字麥克風(fēng)通信方式數(shù)字麥克風(fēng)管教很簡單,如下面的圖示。  電源和地,時鐘腳CLK,左右聲道選擇L/R,信號管教SD或DOUT。區(qū)別是WS管教,這個管教對數(shù)據(jù)采集和分辨率配置有很大影響。STM32芯片手冊這樣描述對應(yīng)的這三個管教:  信號時序圖如下:  上面描述了STM32芯片關(guān)于I2S的麥克風(fēng)的數(shù)據(jù)讀取時序,而麥克風(fēng)廠家如何處理輸出信號,有自己的方式,這里就是I2S接口應(yīng)用的第一個需要主要的點。 例子1:INMP441 INMP441是具有WS管腳的數(shù)字麥克風(fēng),它的時序圖如下,立體聲模式下,WS=0時輸出左聲道,WS=1時輸出右聲道。 
單聲道模式下,LR=0時一個WS周期內(nèi)只有低電平輸出信號,另外一半周期輸出為高組,LR=1時輸出時序相反。  例子2:MP45DT02 MP45DT02是沒有WS管腳的數(shù)字麥克風(fēng),它的時序圖如下,該器件根據(jù)LR電平,分別在CLK的低電平和高電平時間輸出左右聲道信號,實現(xiàn)信號的分時復(fù)用。  二、采樣時鐘配置 如果用此類麥克風(fēng)的單聲道應(yīng)用,就需要考慮數(shù)據(jù)采集在WS另外半休眠周期的影響。下面就是此麥克風(fēng)的一個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(); }} 該模式下,麥克風(fēng)的輸出信號圖如下。由于LR=0,所以在WS低電平半周期輸出信號,高電平半周期內(nèi)無數(shù)據(jù)。可以發(fā)現(xiàn)CLK時鐘為512khz,我們配置的是16bit數(shù)據(jù)模式,16khz采樣,為什么CLK輸出為512khz呢?原因是左右聲道各自占用半個周期,當(dāng)WS信號為16khz時,時鐘頻率是16bit*16khz*2=512khz,實際上單麥克風(fēng)系統(tǒng)中有效采樣時間只有一半,相當(dāng)于一個采集周期內(nèi)采集一半休息一半,其聲音特性被這樣采一半截取一半會有什么變化呢,需要試驗驗證。  上面的問題是由WS管腳引起的,若選用無WS管腳的其他信號,比如MP34DT04,則是另一種時序,芯片手冊時序圖如下。 如果LR管腳接地,則在CLK的低電平半周期輸出信號,如果LR接VCC,則在CLK的高電平半周期輸出信號,在一個數(shù)據(jù)線上實現(xiàn)雙聲道采集。  這種麥克風(fēng)對于單聲道應(yīng)用,會在CLK一半時間內(nèi)輸出信號,另一半高組。在立體聲應(yīng)用中,使用一根數(shù)據(jù)線傳輸左右聲道,分時復(fù)用傳輸信號。  麥克風(fēng)芯片要求的時鐘頻率范圍一般是1—3Mhz,把上面代碼的采樣率設(shè)置為32Khz,則采集信號如下圖。CLK時鐘頻率為1Mhz,為什么會出現(xiàn)這種情況呢?  麥克風(fēng)輸出PDM信號,PDM調(diào)制器將緩沖模擬信號轉(zhuǎn)換為串行脈沖密度調(diào)制信號。時鐘輸入( CLK)用于控制PDM調(diào)制器。常見的數(shù)字麥克風(fēng)的時鐘頻率范圍在1 MHz至3.25 MHz之間。該頻率將定義生成離散時間表示( PDM比特流)的放大器模擬輸出信號采樣頻率。同樣的分析方法,ST芯片是按照雙聲道WS區(qū)分左右聲道配置的芯片,那么WS低電平是左聲道,高電平是右聲道,因此軟件配置一個16it采樣的信號,一個周期需要2*16bit=32個時鐘脈沖,而配置的采樣率為32khz,這就使得CLK輸出達到了32bit*32khz=1024khz,所以下面測量到clk為1.024Mhz。WS信號的頻率為32Khz,就是采樣率信號的頻率。這里是數(shù)字麥克風(fēng)計算PDM采樣率的另一個易錯點,上面的計算方法是對于有SW管腳的麥克風(fēng)傳感器而言的,對于沒有SW管腳的麥克風(fēng)芯片,則實際PDM采樣率為STM32 MCU配置的分辨率的二倍。  參考文檔:1、如何將PDM數(shù)字麥克風(fēng)連接到STM32單片機 AN5027 使用STM32 32位Arm? Cortex? MCU連接PDM數(shù)字麥克風(fēng)
數(shù)字麥克風(fēng)PDM信號采集與STM32 I2S接口應(yīng)用--筆記目錄:https://www.cnblogs.com/pingwen/p/11298675.html https://www.cnblogs.com/pingwen/p/11301935.html https://www.cnblogs.com/pingwen/p/11794081.html https://www.cnblogs.com/pingwen/p/11302452.html https://www.cnblogs.com/pingwen/p/13371144.html 尊重原創(chuàng)技術(shù)文章,轉(zhuǎn)載請注明。 https://www.cnblogs.com/pingwen/p/11298675.html
|