葉敏 意法半導體中國投資有限公司
隨著科技水平的提高,ARM內核的芯片,憑借強大的處理能力和極低的功耗,得到越來越廣泛的應用。意法半導體的STM32系列微控制器是AR@Cortex@-M內核單片機市場和技術方面的領先者,目前提供12大產品線 (F0, F1, F2, F3, F4, F7, H7, L0, L1,L4, L4+,WB),超過800個型號。產品廣泛應用于工業控制、消費電子、物聯網、通訊設備、醫療服務、安防監控等應用領域,其優異的性能進一步推動了生活和產業智能化的發展。
本文以STM32H7為控制器為基礎,具體闡述ADC測試系統及ADC誤差種類。最后介紹了過采樣技術及其原理,以及減少ADC測量誤差的方法。
STM32H7微控制器自帶的16 位 ADC 是逐次逼近型的模擬數字轉換器。有通道數20個,2 個可以測量內部信號。各通道的A/D 轉換模式類型有單次、連續、掃描或間斷。有32位數據寄存器可以來存儲 ADC 的轉換結果。該單片機的 A/D 寄存器有狀態寄存器、控制寄存器、采樣時間寄存器、注入通道偏移寄存器、看門狗閾值寄存器、規則序列寄存器等。
轉換精度不是僅僅依賴于ADC模塊的性能和功能,它與該模塊周邊應用環境的設計密切相關。
2.1.1 ADC模塊自身相關的誤差
在STM32H7的數據手冊中,給出了不同類型的ADC精度誤差數值。通常,精度誤差是以
LSB為單位表示。電壓的分辨率與參考電壓相關。電壓誤差是按照LSB的倍數計算:1 LSB = VREF+/216或VDDA/ 216
2.1.1.1 偏移誤差
這是定義為從第一次實際的轉換至第一次理想的轉換之間的偏差。當ADC模塊的數字輸出從0變為1的時刻,發生了第一次轉換。理想情況下,當模擬輸入信號介于0.5 LSB至1.5 LSB表達的范圍之內時,數字輸出應該為1;即理想情況下,第一次轉換應該發生在輸入信號為0.5 LSB時。偏移誤差以EO標注。
例子說明
對于STM32H7的ADC模塊,最小的可檢測到的電壓增量變化,按LSB表示為:
1 LSB = VREF+/65536 (或對于沒有VREF+管腳的產品:VDDA /65536)
如果 VREF+=3.3V,理想情況下輸入7.63μV(0.5 LSB = 0.5 x 15.26μV)時,產生數字輸出1。然而實際上,這時ADC模塊的讀數可能仍然為0。如果在輸入電壓達到8μV時,才能得到數字輸出1,則:
偏移誤差EO=實際的轉換- 理想的轉換

當輸入的模擬電壓大于0.5 LSB產生第一次的轉換,則偏移誤差是正值。
當輸入的模擬電壓小于0.5 LSB產生第一次的轉換,則偏移誤差是負值。
2.1.1.2 增益誤差
增益誤差定義為最后一次實際轉換與最后一次理想轉換之間的偏差。增益誤差以EG標注。
最后一次實際轉換是從FFFEh至FFFFh的變換。理想情況下,當模擬輸入電壓等于VREF+- 0.5LSB時產生從FFFEh至FFFFh的變換,因此對于VREF+ =3.3V的情況,最后一次理想轉換應該在3.2999847V。
如果ADC數字輸出為FFFFh時,VAIN< VREF+-0.5LSB,則增益誤差為負值。
例子說明
增益誤差EG=最后一次實際轉換-最后一次理想轉換
如果VREF+=3.3V并且VAIN=3.299935V時產生了從FFFEh至FFFFh 的變換,則:EG=3.299935 V - 3.2999847 V


如果在VAIN等于VREF+時不能得到滿量程的讀數(FFFFh)時,增益誤差是正值,即需要一個大于VREF+的電壓才能產生最后一次變換。
偏移和增益誤差可以簡單地使用ADC模塊的自校準功能補償。
除此之外,ADC模塊自身相關的誤差還有微分線性誤差,積分線性誤差等。
進行多次轉換再做平均可以減小它們的影響。
2.1.2
與環境相關的ADC誤差
2.1.2.1 電源噪聲
模擬電源引腳是用于為轉換提供參考電壓,因為ADC輸出是模擬信號電壓和模擬參考電壓之間的比例數值,因此任何模擬參考電源上的噪聲都會使轉換的數值產生變化。
例如:模擬參考電壓為3.3V,輸入信號為1V,則轉換的結果是:(1/3.3) x 65535 = 4D93
如果在供電電源上有一個峰-峰為40mV的紋波,則當VREF+處于尖峰時,轉換的結果變為:(1/3.34) x 65535 = 4CA5
通常開關式電源(SMPS)具有內部的快速開關功率晶體管,這會在輸出上產生高頻噪聲,開關噪聲的范圍介于15kHz至1MHz之間。
2.1.2.2 消除模擬輸入信號的噪聲
平均值方法
平均值法是一個簡單的技術,通過對一個模擬輸入信號的多次采樣和軟件計算取平均值實現。這個技術有利于消除那些不頻繁變化的模擬輸入信號上的噪聲。
平均值法需要在一個相同的模擬輸入電壓上進行多次采樣,保證模擬輸入信號在轉換完成之前,保持在相同的電壓,否則模擬輸入的變化將會出現在結果數值中,從而引入新的誤差。
增加一個外部濾波器
使用一個外部濾波器可以消除高頻噪聲,沒有必要使用昂貴的濾波器去處理超出需要頻率之外的頻率分量。因此,一個相對簡單的具有阻斷頻率fC,剛好超過需要頻率的低通濾波器,可以有效地限制噪聲和假波。采樣速率超過最高的需要頻率即可,通常為2~5倍于fC。
過采樣技術即為提高采樣率來提高數據精度,可以減少白噪聲對采樣結果的影響。STM32H7中的ADC模塊自帶過采樣設計,適當配置寄存器后即可實現過采樣。
3.1.1 量化噪聲分析
ADC 采樣過程其實是一個將連續的模擬信號量化成有限的數字的過程,每個數字代表一次采樣所獲得的信號。量化時,根據數據位把整個幅度劃分為量化級,例如16位數據則表示216個量化級。把落入同一級的樣本值歸為一類,并給定一個量化值。由于模擬信號是連續的,量化結果和被實際模擬量的之間會有差值,該差值就是量化誤差(eq),也稱為量化噪聲。
根據參考電壓(Vref)和量化的數字的位數(N),能夠確定的最小分辨率:

N越大,△就越小,量化誤差也就越小。在沒有其它能造成誤差的因素如參考電壓的變化的理想情況下,量化誤差應該在±0.5△之內。
假設量化噪聲是白噪聲,則可通過計算量化誤差的方差來得到平均噪聲功率:

假設采樣頻率為fs,將量化噪聲看成一個總功率為常數,平均分布在0~fs頻帶內,可以算出量化噪聲的功率密度:

可以看出,采樣頻率越高,量化噪聲影響越小。
3.1.2 過采樣數據的計算
通過4p的過采樣率得來的采樣值再通過求和運算、平均計算等方法進行處理,但是卻不能簡單的把4p的采樣值進行簡單的加法和除法的運算,這種運算方法的濾波作用很低,比如R位的采樣值通過精度的平均后仍然是R位,并不能提高過采樣的精度。在進行過采樣數據的提取時可以將4p個采樣數據值進行相加得到R+2p位的數值,通過數值右移p個單位,就能夠得到R+P位的數值,此時的數字是提高了p位后精度的采樣最后結果。
3.1.3 過采樣能夠進行的前提
過采樣技術并不是在任何情況下都能很好地發揮作用的,如果要使用過采樣來增加采樣精度,必須滿下面兩個條件:
(1)控制器輸入的信號必須存在一些白噪音,而功率的平均分配要在采樣技術有用的頻率帶內。
(2)噪聲的幅度必須能夠對輸入信號產生足夠大的影響。如果不能則輸入的信號轉出的值就會相同,這樣的抽取結果不能提高過采樣的數據精度。
在由意法半導體設計生產的STM32H7微控制器Discovery開發板上,將PA0管腳連接1.25v外部輸入,參考電壓Vref接到2.5V穩壓電源。測試環境滿足過采樣技術的使用條件。
原始數據采樣:通過1654次ADC連續采樣PA0管腳的電壓值,做出數據統計。
過采樣數據收集:通過1654次ADC連續過采樣采集PA0管腳的電壓值。
STM32H7微控制器芯片內部ADC模塊需配置CFGR2寄存器的ROVSE位置為1,使能過采樣。將CFGR2寄存器的OSR位(過采樣率)配置為1024x,OVSS(采樣右移值)為6bit右移。
3.3.1 原始采樣值分布(1654次連續采樣)
采樣最大值-采樣最小值 = 32868-32757 = 111

3.3.2 過采樣求平均后結果
處理后結果最大值-處理后結果最小值= 4

本文通過對STM32H7微控制器ADC模塊的介紹,ADC測量誤差的種類分析,以及過采樣技術的深入剖析,分析了ADC采樣系統設計的原理以及提高采樣精度的方法。通過過采樣技術,大大減少了白噪聲對采樣結果的影響, 提高了ADC的采樣精度。