對單個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為什麼要醬紫設計我暫時也不得而知,幹嘛不設計成可以比對的選項。。。但是可以肯定的是,存在即合理。
綜上可知,想要有規律的設定采樣率應該是行不通的。聰明的你,有什麼好藥方麻煩告訴我吧?我要吃藥。。。