STM32 ADC 取樣時間計算與誤差處理

2021-10-14 04:35:00 字數 1260 閱讀 8245

f * s = 1,時間與週期成反比。

如下引數:

以系統時鐘頻率為72mhz,adc分頻因子為rcc_pclk2_div6, adc的取樣時間為adc_sampletime_1cycles5,進行計算

adcclk(adc的時鐘頻率 ) = 72mhz(系統時鐘頻率) / 6 (adc分頻因子) = 12mhz。

乙個adc週期占用的時間 = 1 / 時鐘頻率 = 1 / 12mhz = 0.0833334 us

一次取樣總的時間 = 取樣時間 + 12.5個週期 = 1.5週期 + 12.5週期 = 14週期 = 14 * 0.0833334 = 1.166667 us

兩次取樣間隔時間 = 1.166667 us (adcclk為12mhz時的最小取樣間隔時間)

同理,計算adcclk為12mhz時的最大取樣間隔時間 = 239.5週期 + 12.5週期 = 252週期 = 21 us

場景:

例:adc基準電壓為3.3v,進行採集電壓值為1.65v。使用ad進行取樣,取樣值比應為0.5,但是實際取樣值比在0.5附近徘徊。

處理:

韌體庫使用adc_startcalibration()函式進行adc校準;

hal庫使用hal_adcex_calibration_start()函式進行adc校準。

注意:

adc校準過程應該在 adc開始函式之前,或者adc結束函式之後。

以hal為例:

hal_adcex_calibration_start(&hadc);

hal_adc_start(&hadc);

hal_adc_pollforconversion(&hadc, 0xffff);

value = hal_adc_getvalue(&hadc);

hal_adc_stop(&hadc);

場景:

例:adc基準電壓為3.3v,進行採集電壓值為1.65v。使用ad進行迴圈取樣,取樣值比應為0.5,但是實際取樣值每次都小於0.5,並且誤差較大。

處理:

由於取樣週期太小導致取樣不準確。

合理增大取樣週期,視專案功能而定。

例如將adc_sampletime_1cycles5修改為adc_sampletime_239cycles5。

覺得有用請點贊,謝謝!!!

STM32 ADC轉換時間

stm32f103xx的adc的取樣時鐘最快14mhz,最快取樣率1mhz。adc時鐘 這個adc時鐘是從哪來的呢。我們看下面這個stm32的時鐘結構圖 我們大多使用stm32的最快pclk2系統時鐘72mhz。adcclk的時鐘由72mhz的6分頻能瞞住14mhz以下的要求 為12mhz。rcc ...

STM32 ADC轉換時間

stm32f103xx的adc的取樣時鐘最快14mhz,最快取樣率為1mhz。adc時鐘 這個adc時鐘是從哪來的呢。我們看下面這個stm32的時鐘結構圖 我們大多使用stm32的最快pclk2系統時鐘72mhz。adcclk的時鐘由72mhz的6分頻能瞞住14mhz以下的要求 為12mhz。rcc...

adcclk最大 STM32 ADC轉換時間

stm32f103xx的adc的取樣時鐘最快14mhz,最快取樣率為1mhz。adc時鐘 這個adc時鐘是從哪來的呢。我們看下面這個stm32的時鐘結構圖 我們大多使用stm32的最快pclk2系統時鐘72mhz。adcclk的時鐘由72mhz的6分頻能瞞住14mhz以下的要求 為12mhz。rcc...