1. ADC采樣過程中遇到的問題
2. 理論分析
3.實例分析
4.總結
5. 經驗交流
1. ADC采樣過程中遇到的問題
ADC是從模擬到數字世界的橋梁,當前ADC模塊基本是MCU的標配,而且在轉換速度和精度都有很好的表現,如NXP Kinetis KE15內部有2個16bit SAR型ADC模塊(以精度制勝),可以配合EDMA完美實現雙ADC的同步采樣,STM32G4系列也有2個12bit但速度可達5M的ADC(以速度見長)。
相比很多以前需要MCU+外置ADC應用的場合來說,在成本上具有很大的優勢。這些ADC通常都是SAR型的,相比較∑Δ類型的ADC來說通常速度要快很多,但是精度會差些,但已足夠滿足大部分的應用。然而想要在實際應用中達到標稱的精度,僅僅依賴ADC模塊本身是不夠的,實際的測量精度還會受到諸多外在因素的影響,例如:
ADC時間配置(包括采集時間、轉換時間、采樣時間、采樣時鐘抖動等等)
電源性能(噪聲和內部阻抗)
數據采集系統中數字和模擬部分的隔離情況
內部阻抗與外部阻抗的匹配
輸入/輸出開關切換的影響
PCB布局布線
但是在實際應用中發現,ADC引腳外部的RC電路的電阻和電容的取值對ADC的性能影響比較大,如有客戶反饋在ADC采樣期間會在ADC輸入端觀察到嚴重的電壓擾動(電壓跌落/電壓尖峰),如下圖1 所示,從而影響實際采樣精度。這種現象在多通道順序采樣,且前后兩個連續采樣通道信號電壓差比較大時,現象會更加明顯,因為ADC引腳的RC重新充電需要時間,這種擾動來源于SAR型ADC內部固有的采樣電路,是不可避免的。
那既然無法避免,如何采取措施避免這種擾動對ADC采樣的影響呢,盡可能的提高ADC的精度呢?答案是選擇合適的采樣時間和ADC采樣引腳RC電路中電阻和電容的值,從原理上講,其目的是保證在采樣時間Taq內,采樣電容Csh充分充電,使其兩端電壓與待測輸入電壓之間的差值達到一個可接受的范圍內(通常在采樣時間結束時刻,兩者的差值不能超過滿量程的 0.5LSB)。NXP AN4373文檔對這塊進行了深入的探討,但是文章冗長不好理解,本文檔嘗試化繁為簡先介紹RC值求取的公式理論推導,然后給出具體實例,方便理解。
2. 理論分析
在一般的采樣過程中,我們將采樣時間內的待測輸入信號當作一個有著恒定電壓的直流電壓源。通常設計人員會假設該電壓源有著很大的內阻(即Rin>>Rsh)。在此假設下,采樣電容充電期間將會出現兩個明顯不同的時間段,如圖3所示。圖中所繪為采樣電容(紅色)和輸入電容(綠色) 兩端的電壓波形,其中,采樣電容是指外部的電容,輸入電容是指ADC內部電容。
圖3所示為輸入電容上的初始電壓大于采樣電容上的初始電壓的情況(即Vcin>Vcsh)。此時,輸入電容兩端的電壓將出現電壓降落。反之,當Vcin
可以看到,圖3中采樣電容Csh兩端的電壓曲線可以劃分為兩個時間段,高輸入阻抗階段和低輸入阻抗階段,在高輸入阻抗的情況下,時間段Ⅱ的曲線變化要比時間段Ⅰ緩慢許多。其中,時間段Ⅰ采樣電容充電來自于外部輸入電容Cin,時間段Ⅱ采樣電容充電來自于外部流過Rin的外部電壓輸入因而,圖2所示的等效電路可以根據時間段的不同劃分為兩個新的等效電路,如圖4 所示。
首先,先討論時間段I內采樣電容充電的波形,如上面圖5所示。通過一系列公式推導(此處忽略推導過程,詳見AN4373),可以得出電壓降落/電壓尖峰的幅度大小由后面的公式如下:
其中,α為輸入電容和采樣電容之比:
根據以上公式,可以發現輸入電容與采樣電容的比值越大,產生的電壓降落(或電壓尖峰)的幅度將越小。接著,討論時間段II內采樣電容充電的波形,其波形如下圖6所示,而為了提高精度,我們的目標是保證圖7中Vcx在Taq點采樣的電壓接近于真實值,也就是Vin-Vcx<0.5 LSB。
而想要使采樣電容兩端電壓與實際待測電壓之間的誤差小于0.5LSB,則采樣保持開關必須在采樣時間Taq內保持閉合,Taq需要滿足:
另外,如果采樣時間Taq已經確定(對于Kinetis,軟件可以設置),其它的變量包括Csh、Vfsr都是datasheet決定的,未知的兩個變量分別為Cin和Rin,對于Kinetis,通常選擇Cin為33pf,則對于設計者來說只需要考慮輸入電阻Rin,其計算方法是:
Note:具體為何是33pF?AN4373文檔表述為:參照數據手冊8.2節中的建議,每個 ADC 輸入端接不小于 33 pF的輸入電容和不小于10 Ω 的輸入電阻。需要注意的是,這個值是最小的值,實際選取可以適當大一些。通常在選擇設計外部RC元件時,我們常常犯這樣的錯誤,希望通過增加輸入電阻來降低輸入電流,或是實現測量源和ADC之間的阻抗隔離。現在考慮這樣的情況,如果增加到10 kΩ,使得在采樣時間內不能充分充電,那么采樣值也會不準確。所以,對于硬件設計者來說,問題的焦點集中在外部電阻的設計。
3.實例分析
此處以Kinetis為例(同樣使用其他配備SAR型ADC的MCU),ADC時鐘為12M,16bit模式,采樣時間設置盡可能的小(ADLSMP=0, ADLSTS=3,ADHSC=1),按照以上設置,ADC理論計算的總轉換時間約為2.7 μs,采樣時間Taq=6xADCK cycle=6x1/12=500ns,其中,為何乘數是6,請參見ADLSTS的配置,理論上可以設置更長,對精度有好處,但會影響速度,需要用戶去平衡,本示例是按照最快速度去計算的。
按照以下公式片刻計算得出合適的Rin,Taq上面得出是500ns,從Kinetis datasheet上可以查到,輸入電容Cadin或者Csh最大值為10pF, 數據手冊中對Cin輸入電容沒有限制(數據手冊中表述為Cas,選擇為33pF,
忽略其他的寄生參數, 現在我們得到了計算外部 RC 元件取值所需要的所有參數。
Taq=500ns, 取決于軟件配置
Cin=33pf,取決于經驗
Csh=10pf,取決于datasheet
Vin=3.3V,取決于參考電源
Vcsh=0V,求取最差情況,就是連續采集的兩個通道差值最大,分別為VCC和GND
Vfsr=3.3V,同上
N=16,精度
代入公式,可以計算出Rin的最大取值為
,其中
計算的輸入電阻最大取值表示我們可以在模擬輸入端加上的最大電阻, 同時又不會損失采樣的精度。如果選用超過最大取值的電阻,則將導致轉換結果的錯誤。datasheet數據手冊中給出的最大取值5kΩ,原因在于,其計算的配置與本例中給出的最大取值因條件不同而不同(數據手冊中為 12/13-bit分辨率模式以及更低的ADC 時鐘頻率)。其電壓跌落也能通過公式計算出來。
如圖 11 所示,采樣電容的充電過程在500 ns的采樣時間內已經完成。因此,可以預見在結果寄存器中能夠得到準確的轉換結果。ADC0 模塊的 DAD0 通道實際結果穩定在 65535(這與理想值的偏差為 0,即沒有錯誤)。
圖12是將輸入電阻從 1.1 kΩ 改為 5.1 kΩ 時的電壓波形,從圖中能明顯觀察到在 500 ns 的采樣時間內,采樣電容的充電過程還沒有完成。因此, 結果寄存器中的轉換結果不可能正確, ADC0模塊的 DAD0 通道實際結果在 64750 附近變化。
4.總結
在采樣時間Taq內,采樣電容Csh必須充分充電,使其兩端電壓與待測輸入電壓之間的差值達到一個可接受的范圍內。通常在采樣時間結束時刻,兩者的差值不能超過滿量程的 0.5LSB。
如果采用了高阻抗的輸入電阻(更高的外部元件時間常數),則采樣電容Csh將會首先由外部輸入電容Cin的能量充電(更低的輸入元件時間常數)。采樣電容上的充放電過程導致了輸入電容Cin兩端電壓的電壓降落(或電壓尖峰)。之后采樣電容的充電過程由于較高的輸入阻抗而變化的緩慢。
因此,外部 RC 元件的取值會從本質上影響ADC轉換的精度,為了獲得最佳的 ADC 性能,我們需要小心對待并設計外部 RC 元件,在選取采樣時間時也必須參考采樣電容充電的時間常數。其他需要滿足的條件,詳見器件的參考手冊與數據手冊。
示例中計算電阻R是基于33pF電容的,實際使用中,用戶還需要對信號和外部可能的干擾信號的頻率等綜合考慮,但計算公式和選取思路是一樣的,即在采樣時間Taq內,采樣電容Csh必須充分充電。
盡管示例中選取Kinetis MCU作為計算對象,但實際該計算方法也適用于其他的SAR型ADC
Note:本文所涉及到的參數名字可能和數據手冊中的表述有所不同。例如:Rin=Ras(模擬源電阻),Cin=Cas(模擬源電容),Rsh=Radin(輸入電阻),Csh=Cadin(采樣電容),等式左邊為本文所用符號,等式右邊為數據手冊用到的符號。
審核編輯:湯梓紅
評論
查看更多