STM32家族中的所有芯片都內置了逐次逼近寄存器型ADC模塊.內部大致框架如下:
每次ADC轉換先進行采樣保持,然后分多步執行比較輸出,步數等于ADC的位數,每個ADC時鐘產生一個數據位。說到這里,用過STM32 ADC的人是不是想到了參考手冊中關于12位ADC轉換時間的公式: 
ST官方就如何保障或改善ADC精度寫了一篇應用筆記AN2834。該應用筆記旨在幫助用戶了解ADC誤差的產生以及如何提高ADC的精度。主要介紹了與ADC設計的相關內容,比如外部硬件設計參數,不同類型的ADC誤差來源分析等,并提出了一些如何減小誤差的設計上建議。
這里我摘取部分內容,結合個人的理解加以整理與大家分享。更多細節可以去www.st.com搜索AN2834下載細看。 當我們在做STM32的ADC應用遇到轉換結果不如意時,常有人提醒或建議你對采樣時間或外部采樣電路做調整。這里調整的最終目的就是讓信號進入ADC模塊的充電時間與內部采樣時間匹配,保證采得的電壓盡量真實,最終得到符合精度要求的轉換結果。下面就聊聊相關話題。 一、模擬信號源阻抗的影響 
在做ADC操作時,在信號源與ADC引腳之間,或者說在串行電阻RAIN與ADC引腳AIN之間總有電流流過,自然會產生壓降。內部采樣電容CADC的充電由阻容網絡中的開關和RADC控制。 顯然,對CADC有效的充電由【RADC +RAIN】控制,充電時間常數是tc = (RADC + RAIN) ×CADC。不難理解如果采樣時間小于CADC通過RADC +RAIN充電的時間,即ts < tc,則ADC轉換得到的數值會小于實際數值。 可以看出,隨著電阻(RADC+RAIN)的增加,對保持電容的充電時間也需要相應增加。對于STM32而言,RADC是內部的采樣開關電阻,阻值相對固定,具體數值在芯片的數據手冊里有給出。所以,這里真正可能變動的電阻就是信號源電阻RAIN了,它的變化影響充電常數,進而影響到芯片內部采樣時間的選擇。 注:tc是電容CADC充電完全的時間,此時Vc = VAIN(最大1/2LSB 誤差) Vc:采樣電容CADC上的電壓 tc = (RADC + RAIN) × CADC 【CADC的值也是相對固定的】
二、信號源的容抗與PCB分布電容的對ADC的影響 做ADC時,除了考慮信號源端的電阻外,還需要考慮信號源本身容抗和在模擬輸入端的分布電容(參見下圖)。信號源的電阻和電容構成一個阻容網絡,如果外部的電容(CAIN +Cp)沒能完全充電至輸入信號電壓,ADC轉換的結果顯然是不準確的。(CAIN + Cp)的值越大,信號源的頻率也就越受限制。(信號源上的外部電容和分布電容分別用CAIN和Cp表示。) 
當外部電路的電容沒有被模擬信號源完全充電的情況下,模擬輸入信號電壓與模擬輸入腳的電壓VAIN就不相同。如果模擬輸入信號產生變化,它的變化頻率(FAIN)的周期至少應該滿足10RC原理,即10 × RAIN × (CAIN +Cp)。 TAIN = 模擬信號的周期 =1/FAIN 因為:TAIN ≥ 10 x RAIN x (CAIN + CP) 因此:FAIN ≤ 1 / [10 x RAIN x (CAIN+ CP)] 假如:RAIN = 25kΩ,CAIN = 7pF,CP = 3pF,則: FAINmax = 1 / [10 x 25x103 x (7 +3)x10-12] 即信號源的最高頻率FAIN(max)= 400kHz。 對于上述給出的信號源特性(容抗與阻抗),它的頻率不能超過400kHz,否則ADC的轉換結果將是不準確的。
三、模擬信號源的阻抗估算 上面聊了信號源阻抗和AD輸入端的電容對ADC的影響,在這個基礎上來看下最大允許信號源阻抗的估算。假定最大允許的誤差是1/2 LSB。 參照上面的圖9中的描述,假定此時輸入端不存在輸入信號充電不充分的情況。 
這樣得到誤差 = VAIN – Vc 【Vc為內部采樣電容CADC上的電壓】 
這里tS是采樣時間。 tS = TS / fADC,其中TS是以ADC時鐘周期為單位的采樣時鐘個數 。 對于給定的tS,對應VAIN = VREF+的誤差要大于對應VAIN< VREF+時的誤差,這是因為把CADC從0V充電至VAIN,VAIN = VREF+時需要比在VAIN < VREF+時需要更多的充電時間。因此VAIN = VREF+時是計算最大允許信號源阻抗時需要考慮的最壞情況,此時誤差為1/2LSB. 
Rmax = (RAIN + RADC)max 這里N 是 ADC 分辨率 12 我們可以進一步得到:  以STM32F103芯片為例,如果這里Ts=7.5, fADC=14MHz,Cadc=12pF,RadcMax=1K,在誤差為1/2LSB時的最大允許信號源阻抗為:RAIN(max) = 6.4 k?
通過上面的分析,我們可以得知選擇較長的采樣時間或較慢的ADC時鐘,能保障更好的轉換效果。或者通過降低ADC時鐘頻率、選擇較長采樣時間或選擇較低的分辨率,可以容許更大的外部信號源阻抗。 注:如果使用跟隨放大器可以減小信號源的阻抗效應,因為放大器的高輸入阻抗和非常低的輸出阻抗把RAIN與RADC隔離開來。當然,放大器自身引入的偏移誤差也應加以注意和考慮。
上面提到的RadcMax、Cadc參數在芯片數據手冊的ADC特性表格里,我把STM32F103的截圖如下。好,先就聊到這里。整個完整應用筆記請前往官網搜索AN2834,其中有不少關于提高或改善ADC精度的建議,比如關于電源的處理等。 
|