在大多數情況下,10位的分辨率就足夠了。但在某些情況下需要更高的精度。采用特殊的信號處理技術可以提高測量的分辨率。通過使用一種稱為“過采樣和抽取”的方法,可以實現更高的分辨率,而不使用外部ADC。此應用程序說明說明了該方法,以及需要滿足哪些條件才能使該方法正常工作。
下面的例子和數字是為自由運行模式下的單端輸入計算的。沒有使用ADC降噪模式。這種方法在其他模式中也是有效的,盡管下面例子中的數字會有所不同。ADC參考電壓和ADC分辨率定義ADC步長。ADC的參考電壓VREF可以選擇為內部2.56V / 1.1V的參考電壓AVCC或AREF引腳的參考電壓。較低的VREE提供較高的電壓精度,但最小化了輸入信號的動態范圍。如果選擇2.56V VREE,則在轉換結果上給用戶-2.5mV的精度,被測的最高輸入電壓為2.56V。或者,可以考慮使用ADC輸入通道與增益級。這將給用戶以ADCs動態范圍為代價,以更好的電壓精度測量模擬信號的可能性。如果用動態范圍來換取更好的電壓分辨率是不可接受的,可以選擇用信號的過采樣來換取更好的分辨率。但該方法受到ADC特性的限制:使用過采樣和抽取只會降低ADC的量化誤差,而不能補償ADC的積分非逼近性。
尼奎斯特定理指出,采樣信號的速度必須至少是信號帶寬的兩倍,才能精確地重構波形;否則,高頻內容將在感興趣的頻譜(通帶)內的頻率混疊。根據奈奎斯特定理,所需的最小采樣頻率為奈奎斯特頻率。
其中fsianal為輸入信號中感興趣的最高頻率。fnvauist以上的采樣頻率稱為“過采樣”。然而,這個采樣頻率,只是一個理論上的絕對最小采樣頻率。在實踐中,用戶通常希望得到盡可能高的采樣頻率,以便在時域中得到被測信號的最佳表示。可以說在大多數情況下輸入信號已經被過采樣了采樣頻率是CPU時鐘預調的結果;較低的預壓因子可得到較高的ADC時鐘頻率。在某一時刻,較高的ADC時鐘會隨著有效位元數(ENOB)的減少而降低轉換的精度。所有的ADC都有帶寬限制,mcu ADC也不例外。根據數據表,要得到一個10位分辨率的轉換結果,ADC時鐘頻率應該是50kHz -200kHz。當ADC時鐘為200kHz時,采樣頻率為15kSPS,限制了被采樣信號的上頻率為7.5kHz。根據數據表,ADC時鐘可以驅動頻率高達1Mhz,盡管這將降低ENOB
“過采樣和抽取”背后的理論是相當復雜的,但使用這種方法是相當容易的。這項技術需要更多的樣品。這些額外的采樣可以通過對信號進行過采樣來實現。對于每增加一比特的分辨率n,信號必須被過采樣四次。對輸入信號采樣的頻率由下面公式給出。為了得到模擬輸入信號的最佳可能的表示,有必要將信號過采樣這么多,因為在平均時,更大數量的樣本會給輸入信號更好的表示。這將被認為是本應用說明的主要成分,并將通過下面的理論和例子進一步解釋。
要使此方法正常工作,感興趣的信號組件不應該在轉換期間發生變化。然而,成功增強分辨率的另一個標準是輸入信號在采樣時必須有所變化。這看起來可能有些矛盾,但在這種情況下,變體僅意味著少量LSB。這種變化應該被看作是信號的噪聲成分。當信號過采樣時,必須存在噪聲以滿足信號微小變化的要求。ADC的量化誤差至少為0.5LSB。因此,噪聲振幅必須超過0.5 LSB才能切換LSB。1-2 LSB的噪聲幅值更好,因為這將確保多個樣本最終不會得到相同的值。噪聲的標準,當使用抽取技術:
在轉換期間,感興趣的信號組件不應發生顯著變化。
信號中應該存在一些噪聲。
噪聲的振幅應至少為1 LSB。
通常在轉換過程中會出現一些噪聲。噪聲可以是熱噪聲,來自CPU核心的噪聲,I/ o端口的切換,電源的變化等。這種噪音在大多數情況下足以使這種方法工作。但在特定情況下,可能需要在輸入信號中添加一些人工噪聲。這種方法稱為抖動。下圖A顯示了測量電壓值介于兩個量化步驟之間的信號的問題。對四個樣本進行平均是沒有用的,因為結果將是相同的低值。它可能只有助于減弱信號的波動。圖B顯示,在輸入信號中加入一些人工噪聲,轉換結果的LSB會發生切換。增加四個這樣的樣本一半量化步驟,產生的結果給出了更好的輸入值表示,如圖C所示。adc的虛擬分辨率從10位增加到11位。這種方法稱為抽取,將在下面進一步說明
使用這種方法的另一個原因是為了提高信噪比。提高有效位元數(ENOB)將使噪聲擴散到更大的二進制數上。噪聲對每個二進制數字的影響減小。將采樣頻率加倍可以將帶內噪聲降低3dB,并將測量的分辨率提高0.5位。
均值的傳統意義是將m個樣本相加,然后除以m,稱為正態均值。平均ADC測量的數據相當于一個低通濾波器,具有衰減信號波動或噪聲,平坦輸入信號中的峰值的優點。移動平均法經常被用來做這個。這意味著取m個讀入值,將它們放入一個循環隊列中,然后對最近的m個讀入值進行平均。這將會有一點時間延遲,因為每個樣本都是最后m個樣本的表示。這可以在窗口重疊或不重疊的情況下完成。下面顯示7 (Av1-Av7),獨立移動平均結果,不重疊。
重要的是要記住,正常平均不會增加轉換的分辨率。抽取,或插值,是平均方法,結合過采樣,以提高分辨率。對信號進行過采樣和低通濾波器的數字信號處理通常稱為插值。在這個意義上,插值被用來產生新的樣本,作為一個“平均”更大數量的樣本。平均樣本數越高,低通濾波器的選擇性越強,插值效果越好。通過對信號進行過采樣得到的額外樣本m被加起來,就像在日常取平均值中一樣,但結果不像在日常平均值中一樣除以m。相反,結果是向右移動n,其中n是想要的額外的分辨率位,以縮放正確的答案。向右移動二進制數一次等于二進制數除以2。從上面說到過的公式可以看出,將分辨率從10位增加到12位需要16個10位值的總和。16個10位值的和生成一個14位的結果,其中最后兩位不期望包含有價值的信息。為了回到12位,有必要衡量結果。由式下圖給出的標度因子sf是4個樣本的和要除以的因子,以適當地標度結果。n是所需的額外比特數。
通常一個信號包含一些噪聲,這種噪聲通常具有高斯噪聲的特征,通常稱為白噪聲或熱噪聲,被廣泛的頻譜識別,總能量在整個頻率范圍內平均分配。在這些情況下,“過采樣和抽取”的方法將工作,如果噪聲的振幅足以切換ADC轉換的LSB在其他情況下,可能需要在輸入信號中加入人工噪聲信號,這種方法稱為抖動。這種噪聲的波形應該是高斯噪聲,但周期波形也可以工作。這個噪聲信號的頻率取決于采樣頻率。經驗法則是:“添加m個樣本時,噪聲信號的周期不應超過m個樣本的周期”。噪聲的振幅應至少為1 LSB。在給信號添加人工噪聲時,要記住噪聲的平均值為零;過采樣不足因此可能會造成偏移,如下圖所示
點畫線說明了鋸齒信號的平均值。圖A將引起一個負偏移。B將導致正偏移。在圖C采樣充分,避免偏移。為了制造人工噪聲信號,可以使用計數器。由于計數器和ADC使用相同的鎖源,這就提供了同步噪聲和采樣頻率以避免偏移的可能性。
都柏林的一位釀酒大師想要測量他的釀酒廠的溫度。一個緩慢變化的信號表示溫度測量,其環境溫度的標稱電壓為2.5 V。下圖顯示了該測溫裝置的特性。
主機不想將輸入信號的動態范圍最小化,選擇了一個5V的ADC參考電壓。在這種情況下,10位ADC不能提供足夠精確的轉換結果。因為結果的LSB表示一個-5mV的'step'。這是不可接受的,因為這會導致結果可能高達0.25℃的偏差。釀造主希望結果有0.1℃的精度,這要求電壓分辨率低于2mV。如果測量用12位ADC表示,表示LSB的電壓“step”將下降到~1.22mV。主機需要做的是將10位ADC轉換為虛擬的12位ADO,輸入信號變化非常緩慢;因此,不需要很高的采樣頻率。根據數據表,ADC時鐘頻率應在50kHz - 200kHz之間,以確保10位的有效分辨率。因此50kHz ADC時鐘頻率。然后采樣頻率變成-3800 SPS。在某一點,代表測量溫度的直流值為2.4729V。下表給出了Vin=2.4729V和VREF= 5V時測量該值的不同分辨率選項。
一次轉換的結果是505,乍一看似乎是正確的。但是這個二進制數也對應于例如2。4683v。這使得用戶不確定,并導致溫度測量中的錯誤。在某些情況下,這可能是至關重要的。得出結論之前;信號通常包含足夠的噪聲,使抽取方法可行。
為了增加1位的分辨率,從相同的“鄰域”添加了四個樣本。由于噪聲的影響,這些樣本的值之間存在一些LSB值的差異。添加四個樣品:508+ 507 + 505 + 505 = 2025。根據抽取原理,答案現在需要縮小到11位。它需要右移n次,n是額外的比特數。結果是1012。提高分辨率后,突然之間就有可能實現原始量化步驟之間的采樣。盡管如此,信號被過度采樣以進一步提高分辨率,達到12位。添加16個10位的樣本并右移結果2次就可以做到這一點。結果是2025年。這個數字更可靠,因為使用一個12位的結果,誤差范圍減少到1.22mV。這個例子表明,開始時信號是慢變的,每秒采樣3800 imes,電壓精度為5mV,現在每秒采樣240個,分辨率為12位,電壓精度為~1.22mV。
用戶可能仍然希望通過平均16個12位樣本(傳統方法)來平衡信號波動。方法是將16個樣本相加,然后除以16。最后,用戶有15個SPS,平均16個12位相鄰樣本。
正常平均將減少隨機噪聲的后果,“過采樣和抽取”將利用噪聲來提高分辨率。
為了證明該方法的有效性,下面的例子將表明,不必使用外部ADC來獲得更高的精度。信號發生器用于產生從OV到5V的線性斜坡信號。在“低噪音”環境中,信號發生器和控制器插在STK500板中,可能沒有足夠的噪音切換10位信號的最后幾個位。因此有必要在輸入信號中加入人為的“噪聲”,使LSB開關。成功使用了四種方法:
將信號發生器產生的噪聲直接加到輸入信號上。用單片機產生噪聲,使用PWM,并將其添加到輸入信號當使用AVCC作為VREF時,添加由單片機生成的噪聲到AREF當使用AREF作為VREF時,添加由mcu生成的噪聲到AREF。
當VCC =5V時,濾波后的AREF引腳信號在計數器脈寬為0%時為2.5V,在計數器脈寬為100%時為5V。本例中pwm信號占空比為50%,基頻為~3900Hz。10kS電位器是用來調整這種紋波。該PWM-信號要么作為參考電壓的ADC在AREF,或作為噪聲發生器連接到AREF引腳。設AVCC為ADC參考電壓。其思想是,在不干擾輸入信號的情況下,參考電壓的微小變化將產生與輸入信號的微小變化相同的效果。
下圖顯示了當AREF為ADC參考電壓時輸入信號的12位離散表示,并且AREF加了一些LSB噪聲。上面的公式,每個12位結果由16個10位樣本組成。對ADC偏移量進行調整,根據應用說明,增益誤差也需要調整。以下圖片顯示了輸入信號的14位離散表示,以下圖片顯示了輸入信號的16位離散表示。測量信號含有噪聲時,或者當參考電壓變化在這個例子中,重要的是要記住,頂部和底部值減少了相同的值作為噪聲信號的振幅,給予輕微的減少被測信號的動態范圍。在這種情況下,作為安全余量,偏移量被調整為100mV。
我們可以很容易地看到,通過使用過采樣和抽取方法,有可能大大提高分辨率。
當ADC采樣一個信號時,它對信號進行離散量化。這就引入了一些誤差,通常稱為量化誤差。正常平均只會均勻信號波動,而抽取會增加分辨率。在一個4。時間過采樣信號,四個相鄰數據點的平均值產生nev數據點。信號過采樣的頻率可由公式上面說過的公式計算。加上這些額外的樣本,然后將結果右移一個因子n。產生分辨率增加n位的結果。平均四個模數轉換器的結果得到一個新的模數轉換器的結果是相同的,如果模數轉換器采樣率為14,但也有平均量化噪聲的效果,提高信噪比。這將增加ENOB,減少量化誤差。隨著更快的adc的可用性和低內存成本,過采樣的優點是經濟有效和可取的。
信號中必須存在一些噪聲,至少1 LSB。
如果噪聲幅度不夠大,就給信號加噪聲。
積累4個10位的樣本,其中n是在分辨率中需要的額外比特數。
對累積的結果進行縮放,右移n次。
根據應用說明MCU補償錯誤。
看一下程序 此處ADC為10bit
#pragma vector=ADC_vect
__interrupt void ADCinterrupt(void)
{
accumulator += ADC;//adc合 double
samples++;//采樣計數 short
}
在這里進行采樣和記錄采樣的次數
主要流程為
while(1) // Eternal loop
{
if(samples>4095)//如果到了過采樣的臨界點
{
oversampled(); //進行相應的過采樣計算
}
}
void oversampled(void)
{
__disable_interrupt();
accumulator += 5150; // 抵消誤差補償 這里可以用最小二乘法校正
accumulator *= 0.9993; // 增益誤差補償
temp=(int)accumulator%64; //做四舍五入
accumulator/=64; // 舍棄掉沒用 這里除掉的是2的6次方,增加幾位就是幾次方
if(temp>=32)
{
accumulator += 1;
}
Vin = (accumulator/65536)*4.910; //計算實際電壓值
samples = 0;
accumulator = 0;
__enable_interrupt();
}
————————————————
-
adc
+關注
關注
98文章
6452瀏覽量
544147 -
信號處理
+關注
關注
48文章
1005瀏覽量
103205 -
信號
+關注
關注
11文章
2781瀏覽量
76649
發布評論請先 登錄
相關推薦
評論