1. 程式人生 > >STM32F407三重ADC+DMA的思考

STM32F407三重ADC+DMA的思考

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


我用的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得這麼看:


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

……

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


為什麼說有點糾結呢?

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

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

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

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

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

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