天天看點

STM32F407三重ADC+DMA的思考

對單個ADC而言,AD采樣的采樣時間滿足此關系:

STM32F407三重ADC+DMA的思考

我用的ADCCLK=42MHz,針對單ADC而言,最大采樣率為42M / (12 + 3) =2.8M // 取ADC_SampleTime_3Cycles

要采 100KHz的信号32點,則采樣率需達到3.2MHz(根據以上計算,好像有那麼一小丢丢夠不着。。。),沒關系,多重ADC可以解決這個問題。

        要采 1MHz的信号32點,則采樣率需達到32MHz,使用STM32根本達不到(你不用花時間啦)。。。但是,可以盡量提高采樣率,我們可以試一試,有時候就算明知不可為,我們還是值得讓它走到它命運的巅峰(^--^)。

       以下是官方例子的說明,我們可以稍加揣測:

In this example, the system clock is 144MHz, APB2 = 72MHz and ADC clock = APB2 /2. 

Since ADCCLK= 36MHz and Conversion rate = 5 cycles 

==> Conversion Time = 36M/5cyc = 7.2Msps

那麼按照我自己的情況,就可以達到8.4Msps,看起來味道還不錯,起碼采100KHz的信号32點綽綽有餘,但是做人不能太貪心了。。。

那麼,問題來了,這貨為神馬不按套路出牌,難道不是 36M/(12+5)=2.1Msps ? 12跑哪兒去了?它腦袋進水了麼?

       其實不然。我前面已經提到,那個神一樣的公式是針對 單 ADC而言的,至于多重ADC得這麼看:

STM32F407三重ADC+DMA的思考

我暫且相信你已經看懂了,不解釋。。。

……

下面要說的是,這玩意兒怎麼根據被測信号頻率修改采樣率(相信你已經猜到我要做FFT)?有點糾結:

STM32F407三重ADC+DMA的思考

為什麼說有點糾結呢?

        這裡說明一下:參看庫函數檔案,我的ST即SampleTime,TD即TwoSamplingDelay,td 是根據 ST 計算得到理論上 TD 需要設定的周期數,ST 和 TD需滿足

公式(ST + 12)/ 3 = TD,這個公式的得出就要看懂上面那張橙紅藍綠的圖表啦。。。這個不會也需要我解釋吧。。。

為什麼要讓它倆滿足這個公式哩?

       原因很簡單——沒有規矩不成方圓。要讓AD均勻采樣,就得按這個規矩辦事,發現沒?上面那張彩圖說明了每隔5個ADC周期得到一次采樣值,均勻的。不滿足

公式當然采樣也就不均勻了。經過計算得出理論上需要設定的TD值居然、僅僅、隻有、區區兩個值 5 和10 滿足公式,也就是說隻有這兩組值可以達到均勻采樣。至于ST為什麼要醬紫設計我暫時也不得而知,幹嘛不設計成可以比對的選項。。。但是可以肯定的是,存在即合理。

       綜上可知,想要有規律的設定采樣率應該是行不通的。聰明的你,有什麼好藥方麻煩告訴我吧?我要吃藥。。。

繼續閱讀