STM32F407關於ADC 性能問題討論

        最近在開發一個產品,使用STM32F407的ADC功能,在調試前期,ADC極其不穩定,波動很大。就連原子哥也對其ADC性能提出質疑。結果果真如此嗎?

        在軟件調試之前,一個良好的硬件設計是保證ADC性能優越的前提條件。比如:

        1、模數電源和地分離;

        2、提供獨立VDDA穩壓電源;

        3、相關濾波電容的選擇;

        4、良好的佈局

        5、輸入阻抗的匹配等

        此類問題在網上討論很多,就在此不詳述。

       

       我這邊設計的PCB基本按照上述要求,進行設計,可是在代碼調試期間ADC波動很大,僅僅測量模擬地信號最大都有9LSB的波動,相比於STM32F103的只有1個LSB波動,的確就差遠了。

 

      這邊測量1000組數據分析的結果:

     

******************************** 微氣壓傳感器**************************************
//===================================================================原始代碼
//------------------------------------第一組
statistics analysis
測試樣本數 = 1000
平均值 = 1933
方差 = 10
標準差 = 3
LSB0        -> 157, 15.700%
LSB[±1,±3)  -> 525, 52.500%
LSB[±3,±5)  -> 156, 15.600%
LSB[±5,±8)  -> 136, 13.600%
LSB[±8,±10] -> 26, 2.600%
LSB >±10    -> 0, 0.000%
//-----------------------------------第二組
statistics analysis
測試樣本數 = 1000
平均值 = 1933
方差 = 9
標準差 = 3
LSB0        -> 149, 14.900%
LSB[±1,±3)  -> 535, 53.500%
LSB[±3,±5)  -> 172, 17.200%
LSB[±5,±8)  -> 116, 11.600%
LSB[±8,±10] -> 28, 2.800%
LSB >±10    -> 0, 0.000%
//-----------------------------------第三組
statistics analysis
測試樣本數 = 1000
平均值 = 1934
方差 = 9
標準差 = 3
LSB0        -> 149, 14.900%
LSB[±1,±3)  -> 471, 47.100%
LSB[±3,±5)  -> 238, 23.800%
LSB[±5,±8)  -> 120, 12.000%
LSB[±8,±10] -> 22, 2.200%
LSB >±10    -> 0, 0.000%

   通過測試結果發現,方差在10左右,在[±8,±10]的波動佔比高到2.8%。當時也很絕望。

   通過STM32官網資料,進行FALSH ART配置,測量結果如下:

//===================================================================FALSH ART 配置
//-----------------------------------第一組
statistics analysis
測試樣本數 = 1000
平均值 = 1933
方差 = 2
標準差 = 1
LSB0        -> 311, 31.100%
LSB[±1,±3)  -> 611, 61.100%
LSB[±3,±5)  -> 74, 7.400%
LSB[±5,±8)  -> 4, 0.400%
LSB[±8,±10] -> 0, 0.000%
LSB >±10    -> 0, 0.000%
//-----------------------------------第二組
statistics analysis
測試樣本數 = 1000
平均值 = 1933
方差 = 2
標準差 = 1
LSB0        -> 341, 34.100%
LSB[±1,±3)  -> 561, 56.100%
LSB[±3,±5)  -> 94, 9.400%
LSB[±5,±8)  -> 3, 0.300%
LSB[±8,±10] -> 1, 0.100%
LSB >±10    -> 0, 0.000%

//-----------------------------------第三組

statistics analysis
測試樣本數 = 1000
平均值 = 1933
方差 = 2
標準差 = 1
LSB0        -> 305, 30.500%
LSB[±1,±3)  -> 602, 60.200%
LSB[±3,±5)  -> 88, 8.800%
LSB[±5,±8)  -> 5, 0.500%
LSB[±8,±10] -> 0, 0.000%
LSB >±10    -> 0, 0.000%

  經過ART配置,一下子有了一個大的飛躍。方差也有10降低到了2,ADC值±2之內(包括±2)的數據集中度,由原來的66%搞到到目前的90%左右。心中那個暗喜啊,難道這就滿足了嗎,NO,NO,NO

  後來發現ADC性能不僅受VDDA控制,VDDA越穩定越好,同時VDD的影響也是不容忽視,後來做了一個電路,去動態適配VDD,電路如下:

微信號:dingzj2000

    原理就是先測量VDD電壓,查看是否有偏移2.5V,有偏離,在通過DAC進行電路調節,達到穩定VDD的目的。經過改造,測試結果如下:

//===================================================================FALSH ART 配置 + V2.5 ADJ
//-----------------------------------第一組
statistics analysis
測試樣本數 = 1000
平均值 = 1933
方差 = 1
標準差 = 1
LSB0        -> 317, 31.700%
LSB[±1,±3)  -> 644, 64.400%
LSB[±3,±5)  -> 35, 3.500%
LSB[±5,±8)  -> 4, 0.400%
LSB[±8,±10] -> 0, 0.000%
LSB >±10    -> 0, 0.000%
//-----------------------------------第二組
statistics analysis
測試樣本數 = 1000
平均值 = 1933
方差 = 1
標準差 = 1
LSB0        -> 336, 33.600%
LSB[±1,±3)  -> 615, 61.500%
LSB[±3,±5)  -> 48, 4.800%
LSB[±5,±8)  -> 1, 0.100%
LSB[±8,±10] -> 0, 0.000%
LSB >±10    -> 0, 0.000%
//-----------------------------------第三組
statistics analysis
測試樣本數 = 1000
平均值 = 1933
方差 = 1
標準差 = 1
LSB0        -> 346, 34.600%
LSB[±1,±3)  -> 610, 61.000%
LSB[±3,±5)  -> 42, 4.200%
LSB[±5,±8)  -> 2, 0.200%
LSB[±8,±10] -> 0, 0.000%
LSB >±10    -> 0, 0.000%

經過對比,方差已經降到1,ADC值±2之內(包括±2)的數據集中度,由原來的66%搞到到目前的95%;

達到了設計目的。

總結如下:

1、1000組數據的方差由原來的10提高到1;
2、ADC值的等於平均值的分佈由原來的14%提高目前的31%;
3、ADC值±2之內(包括±2)的數據集中度,由原來的66%搞到到目前的95%;
4、ADC值在[±3,±4]的波動由原來的18%降低3%
5、ADC值超過±5的波動,由原來的14%降低到0.3%

通過數據可以發現,採集的數據越來越接近平均值

 

對於超過±3的數據只佔整個採樣數據的3%,在通過軟件濾波,去除最大、最小值,再取平均值,即可將這些離散大的點濾掉。這樣軟件濾波+硬件適配相兼容,結果更加優越。

使用微氣壓傳感器(軟件濾波,濾波深度爲8,去除最大,最小值,獲取的微氣壓的數據),測量結果如下:

微信號:dingzj2000​​​​

測試數據沒有波動,適當提高採樣率,數據響應也很及時。

總體而言,STM32F407 ADC性能不像網上說的那麼差勁,總體性能還是可以的!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章