1.引言
DFSDM 全稱為 Digital filter for sigma delta modulators。顧名思義,其作用主要是對(duì)外部 Σ?調(diào)制的數(shù)字信號(hào)進(jìn)行濾波。STM32L462xx 系列支持最多 4 個(gè)外部串行通道,2 個(gè)數(shù)字濾波器,最大可達(dá)到 24bit 的 ADC 分辨率。并且支持 SPI 接口和曼切斯特編碼 1-wire接口。
2.問題分析
客戶使用 STM32L462xx 的 DFSDM 連接數(shù)字麥克風(fēng),將麥克風(fēng)的 PDM 信號(hào)轉(zhuǎn)化為 PCM 信號(hào),并采集數(shù)據(jù)。使用的參數(shù)為 16KHz 采樣,2M 左右的時(shí)鐘驅(qū)動(dòng)數(shù)字麥克風(fēng),能夠正常讀取麥克風(fēng)數(shù)據(jù)。了解到他們所使用的數(shù)字麥克風(fēng)可以使用 768K 時(shí)鐘驅(qū)動(dòng),從而達(dá)到更低功耗的狀態(tài),但是客戶無法配置出合適的時(shí)鐘,即使勉強(qiáng)配置到了768K 附近,通過 DFSDM 采集到的數(shù)據(jù)也是混亂的,完全無法解析。
了解到基本需求后,我們需要對(duì) DFSDM 的時(shí)鐘有一定了解。從 RM0394 參考手冊(cè)中可以找到如下內(nèi)容:

DFSDM 可以提供一個(gè)時(shí)鐘用于驅(qū)動(dòng)外部 sigma delta 調(diào)制器,并且時(shí)鐘來源可以是DFSDM 時(shí)鐘或者 Audio 時(shí)鐘,其中 Audio 時(shí)鐘就是 SAI1 的時(shí)鐘。
在處理和時(shí)鐘相關(guān)的配置問題時(shí),強(qiáng)烈建議使用 CubeMX 的時(shí)鐘配置界面進(jìn)行配置。我們先來看下客戶用于驅(qū)動(dòng)外部數(shù)字麥克風(fēng)的時(shí)鐘配置。

從圖中可以看出,DFSDM 的時(shí)鐘為 36MHz,來自 PCLK2。SAI1 的時(shí)鐘約為 34.29MHz來自 PLLSAI1P。

這是關(guān)于 DFSDM 輸出時(shí)鐘的代碼片段,可以看到使用了 AUDIO 的時(shí)鐘作為輸出,并且使用 17 分頻,那么最終驅(qū)動(dòng)數(shù)字麥克風(fēng)的時(shí)鐘為 34.29/17≈2.02MHz。
再來看看濾波器部分參數(shù)的設(shè)計(jì):

其中,使用了 4 階 SINC 濾波,過采樣參數(shù)為 128,那么 2.02MHz/128≈16KHz。也就是說這種配置參數(shù)下,可以接近 16KHz 的采樣率來對(duì)音頻數(shù)據(jù)采樣。
客戶想要將麥克風(fēng)驅(qū)動(dòng)時(shí)鐘重新配置為 768K,但只考慮修改 Divider 和 Oversampling 參數(shù)是配置不出來的。
3.問題解決
我們可以反過來推,要想獲得 16KHz 采樣率,768KHz 的時(shí)鐘,首先需要滿足以下公式:768K/ Oversampling = 16K, 那么 Oversampling=48。Oversampling 這個(gè)參數(shù)是比較好確定的,而 768K 來自于 CLK_SAI1/Divider, 這兩個(gè)參數(shù)目前無法確定,其中 CLK_SAI1 又來自于 PLLSAI1P,它由 PLLSAI1_N, PLLSAI1_P 兩個(gè)系數(shù)決定。也就是說要想獲得 768K 的時(shí)鐘,需要把這些參數(shù)都配置為合適的值。到這一步,實(shí)際上沒有直接的公式可以求下去了,只能自己測(cè)試并調(diào)整,建議可以先將 Divider 定好,然后通過 CLK_SAI1/Divider=768K 就可以求出CLK_SAI1 的值,將這個(gè)值手動(dòng)輸入到 Cubemx 的時(shí)鐘配置界面可以自動(dòng)求出合適的
PLLSAI1_N, PLLSAI1_P 系數(shù),這樣可以大大減少調(diào)整時(shí)間。如果無法求出合適的值,CubeMX也會(huì)進(jìn)行提示,那么只能重新?lián)Q Divider 來測(cè)試了。
最終調(diào)試下來的值如下圖所示:

我選擇的 Divider=50,那么可以算出CLK_SAI1=50*768K=38.4MHz,輸入到上圖界面中可以得到 PLLSAI1_N=12, PLLSAI1_P=5。
至此,已經(jīng)可以正確得到 768KHz 的時(shí)鐘驅(qū)動(dòng)麥克風(fēng)了,但是目前仍然無法獲取到準(zhǔn)確的音頻數(shù)據(jù)。
由于前面修改了 Oversampling,該參數(shù)會(huì)影響采樣值。在參考手冊(cè)中可以找到下表:

從表中可以看到,之前是 FOSR=128,Sinc4,對(duì)應(yīng)的數(shù)值為+/-268435456,但是DFSDM 的數(shù)據(jù)寄存器只有 24bit,2^23<268435456 的,也就是說需要進(jìn)行移位,只能以損失精度為代價(jià)進(jìn)行轉(zhuǎn)換。客戶代碼中有以下配置:

數(shù)據(jù)需要右移 5 位保存到數(shù)據(jù)寄存器,那么現(xiàn)在我們的 FOSR 修改為了 48,對(duì)應(yīng)上表可以看到數(shù)值是比較小的,不需要移位處理,所以改為:

到這里,我們需要修改的內(nèi)容就全部結(jié)束了。將這些修改內(nèi)容通知客戶,讓其進(jìn)行測(cè)試,測(cè)試結(jié)果也比較滿意。
小結(jié)
DFSDM 在數(shù)字音頻應(yīng)用中比較常見,主要用于將數(shù)字麥克風(fēng)的 PDM 信號(hào)轉(zhuǎn)換為PCM 信號(hào),如果沒有DFSDM 外設(shè),就只能使用軟件庫(kù)進(jìn)行轉(zhuǎn)化,效率比較低。當(dāng)然,也可以用于一些模擬信號(hào)的采集,需要外部 Sigma Delta 調(diào)制器調(diào)制好之后再進(jìn)行濾波,這樣得到的 ADC 精度要比通用的 ADC 精度更高,在要求高精度 ADC 的場(chǎng)合,不失為一種較好的方案。
原文標(biāo)題:工程師筆記|DFSDM 時(shí)鐘配置問題
文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
審核編輯:湯梓紅
-
麥克風(fēng)
+關(guān)注
關(guān)注
16文章
693瀏覽量
57528 -
數(shù)字濾波器
+關(guān)注
關(guān)注
4文章
300瀏覽量
48161 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1964瀏覽量
134749 -
調(diào)制器
+關(guān)注
關(guān)注
3文章
974瀏覽量
48276
原文標(biāo)題:工程師筆記|DFSDM 時(shí)鐘配置問題
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
詳解模擬和數(shù)字MEMS麥克風(fēng)設(shè)計(jì)區(qū)別
TLV320ADC6140和8個(gè)PDM麥克風(fēng)設(shè)計(jì)麥克風(fēng)陣列,使用TDM格式輸出,每個(gè)麥克風(fēng)輸出相位是什么樣的?
數(shù)字麥克風(fēng)測(cè)試指南-相當(dāng)全面哦
了解麥克風(fēng)靈敏度
麥克風(fēng)技術(shù)規(guī)格解析
MEMS與ECM:比較麥克風(fēng)技術(shù)
麥克風(fēng)靈敏度探討
模擬和數(shù)字MEMS麥克風(fēng)有什么不同?
用于FAN3850A麥克風(fēng)前置放大器的典型應(yīng)用立體聲麥克風(fēng)電路
駐極體麥克風(fēng)電路
請(qǐng)問NUC505是否支持數(shù)字麥克風(fēng)?
MEMS 麥克風(fēng)技術(shù)簡(jiǎn)介 — 模擬麥克風(fēng)與數(shù)字麥克風(fēng)
開創(chuàng)迷你麥克風(fēng)時(shí)代:BOYAmini迷你麥克風(fēng)驅(qū)動(dòng)無線音頻行業(yè)新變革
什么是麥克風(fēng)陣列
用于驅(qū)動(dòng)外部數(shù)字麥克風(fēng)的時(shí)鐘配置
評(píng)論