新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > 使用兩點校準消除ADC偏移和增益誤差使用兩點校準消除ADC偏移和增益誤差

使用兩點校準消除ADC偏移和增益誤差使用兩點校準消除ADC偏移和增益誤差

作者: 時間:2024-09-04 來源:EEPW編譯 收藏

通過示例了解方法和定點實現(xiàn),以補償模數(shù)轉(zhuǎn)換器(ADC)偏移和。

本文引用地址:http://2s4d.com/article/202409/462651.htm

在上一篇文章中,我們討論了單點校準可用于微調(diào)誤差。為了補償偏移和,我們需要。在本文中,我們將探索方法,并通過一個例子了解該技術(shù)的定點實現(xiàn)。

確定實際的兩點校準測試

圖1顯示了受偏移和增益誤差影響的單極12位ADC的特性曲線。

受偏移和增益誤差影響的單極12位ADC的特性曲線。

 1.png

圖1。受偏移和增益誤差影響的單極12位ADC的特性曲線。

ADC的滿標度值為3V。選擇ADC滿標度范圍10%和90%的兩個測試輸入點A和B,以確定和增益誤差。在0.3V和2.7V時,測量的輸出代碼分別為437和3749。測量的傳遞函數(shù)的斜率可以計算為:

 

2.png

使用點A的x和y值,我們得到以下直線方程:

 3.png

通過替換Vin=0,發(fā)現(xiàn)偏移誤差為+23 LSB。以下方程式描述了理想12位ADC的線性模型:

 4.png

因此,0.3V和2.7V下的理想碼值分別為409和3686。使用這些值,理想響應(yīng)的斜率可得:

 5.png

現(xiàn)在我們可以計算ADC的增益誤差如下:

 6.png

兩點校準——消除ADC偏移誤差和增益誤差

知道實際響應(yīng)后,我們現(xiàn)在可以很容易地消除數(shù)字域中的偏移和增益誤差。首先,我們可以從每個輸出代碼中減去偏移量,得到一個通過原點且斜率為Slopem的響應(yīng)。接下來,將結(jié)果乘以

 SlopeiSlopemSlopeiSlopem 

將獲得的直線繞原點旋轉(zhuǎn),并產(chǎn)生斜率為Slopei的直線。

這些數(shù)學運算將實際響應(yīng)的直線映射到理想ADC的直線。圖2使用了一個夸張的例子來說明校準概念。

顯示ADC校準的示例響應(yīng)。

 7.png

圖2:顯示ADC校準的示例響應(yīng)。

因此,通過應(yīng)用方程式1,可以從實際代碼Codea計算出校準的輸出代碼CodeCal:

 8.png

方程式1。

定點校準實施

另一方面,如果我們試圖補償偏移和增益誤差的固定值,我們可以簡化方程1,實現(xiàn)計算效率更高的系統(tǒng)。繼續(xù)我們的例子,我們可以將offset=23、Slopei=1365.42和Slopem=1380代入方程1,得到以下關(guān)系:

 9.png

為了節(jié)省系統(tǒng)處理器的一些CPU(中央處理單元)周期,我們可以將上述方程簡化為方程2:

 10.png

方程式2。

解釋:

c1=0.989434782

c2=-22.757

雖然我們可以使用浮點算法來實現(xiàn)上述方程,但定點實現(xiàn)可能更高效、更劃算。我們有兩個分數(shù),c1和c2。為了以定點格式表示分數(shù),我們將使用隱含的二進制點。這意味著我們將假設(shè)寄存器的一定數(shù)量的位表示整數(shù)部分,而剩余的位表示數(shù)字的小數(shù)部分。

然后使用Q格式表示法來指定整數(shù)和小數(shù)部分的位數(shù)。例如,101.0011可以是Q3.4格式的數(shù)字,因為它使用三位表示整數(shù),四位表示小數(shù)部分。

請注意,二進制點實際上并沒有在硬件中實現(xiàn);它只是一個概念,允許我們在定點處理器中表示分數(shù)。此外,給定Q格式的數(shù)字可能表示正值或負值。

回到我們的ADC校準示例,我們有兩個分數(shù)c1和c2,它們應(yīng)該以適當?shù)亩c格式表示。讓我們假設(shè)使用二進制補碼格式的帶符號16位寄存器來存儲這些常數(shù)。由于c1小于1,整數(shù)部分只需要一個比特作為符號。其余的比特可以表示小數(shù)部分,從而形成Q1.15格式。

為了找到c1的不動點表示,我們將其乘以215,將其四舍五入到最接近的整數(shù),并將舍入結(jié)果轉(zhuǎn)換為二進制形式。

11.png

由于c2在16到32之間,我們需要5位用于整數(shù)部分,1位用于符號。這給我們留下了10位用于小數(shù)部分。因此,c2的適當表示是Q6.10格式。為了用這種格式表示,我們將c2乘以210,將其四舍五入到最接近的整數(shù),并將四舍五進的結(jié)果轉(zhuǎn)換為二進制形式。

12.png

請注意,c2是2補碼格式的負數(shù)。由于新系數(shù)使用不同的縮放因子,我們需要仔細跟蹤縮放因子對計算的影響。讓我們定義一個新的臨時變量Var1,將c1、new和未校準ADC讀數(shù)的乘積存儲為方程式3:

 13.png

方程式3。

這產(chǎn)生了方程2右側(cè)的第一項。假設(shè)ADC的12位輸出存儲在C程序中的帶符號16位寄存器中。因此,Codea可以被視為Q16.0數(shù)字。這意味著實現(xiàn)方程式3需要將Q1.15值乘以Q16.0值。變量Var1應(yīng)該是一個32位寄存器來存儲此乘法的結(jié)果。此外,由于Q16.0的數(shù)字乘以Q1.15的值,Var1的格式為Q17.15。如果你需要使用定點表示法來復(fù)習乘法,請參閱這篇文章。

如您所見,乘法運算增加了數(shù)據(jù)字長。在實現(xiàn)DSP(數(shù)字信號處理器)算法時,我們通常會截斷或舍入乘法輸出,以防止字長無限增長。然而,在截斷或舍入乘法輸出之前,我們應(yīng)該考慮對數(shù)據(jù)的下一步操作。

在這個例子中(方程式2),乘法結(jié)果將被添加到Q6.10格式的c2 new中。考慮到c2的分數(shù)部分,我們可以丟棄Var1的五個最低有效位,并將截斷的結(jié)果存儲在一個新的變量Var2中。C編程中的右移運算符可用于執(zhí)行此操作:

 14.png

方程式4。

如果我們的系統(tǒng)中有任意的寄存器長度(例如,在FPGA中),我們可以使用Q17.10格式的27位寄存器存儲Var2。然而,在C編程中,Var2仍然必須存儲在32位寄存器中。如果我們截斷Q17.15數(shù)字的五個最低有效位并將結(jié)果存儲在32位寄存器中,我們將得到Q22.10數(shù)字。最后,我們可以將c2添加到Var2中,并丟棄10個最低有效位,以得到校準的ADC值,得到方程5:

 15.png

方程式5。

作為旁注,為了避免任何混淆,我想提到的是,方程4和5中的變量不使用下標,因為這兩行被假設(shè)為偽代碼。例如,文本中的Var2在方程式4和5中表示為Var2。

ADC定點校準驗證

讓我們看看上述定點系數(shù)(c1,new=32422和c2,new=23303)是否可以將測量的ADC響應(yīng)映射到理想的直線模型。在圖1中的A點,ADC輸出為437。應(yīng)用方程式3,Var1為:

 16.png

將其轉(zhuǎn)換為二進制格式,右移5位,然后找到十進制等效值,我們得到:

 17.png

現(xiàn)在,我們添加c2、new,并將結(jié)果的二進制等效值右移10位,得到:

 18.png

您同樣可以驗證點B是否也映射到理想代碼3686。請注意,計算機程序使用系數(shù)的二進制等效值,我只是使用十進制值來闡明計算。我們同樣可以從測量的ADC響應(yīng)中檢查其他點,以確保定點實現(xiàn)產(chǎn)生所需的值。如果不滿足這個要求,我們將不得不使用更大的寄存器來存儲校準系數(shù)。

ADC未使用的輸出代碼和輸入范圍

之前,我們討論過偏移和增益誤差會導致未使用的輸出代碼。上述校準技術(shù)是在A/D轉(zhuǎn)換之后執(zhí)行的。因此,它無法解決未使用的代碼問題。為了澄清這一點,請考慮圖3中所示的示例。

顯示未使用和可用輸入范圍的示例。

 19.png

圖3。示例顯示了未使用和可用的輸入范圍和輸出代碼范圍。

在這個例子中,顯示了一個偏移為-13LSB的單極ADC。通過將ADC讀數(shù)加13,可以校準偏移誤差。但是,請注意,ADC輸出小于13 LSB的輸入值的全零碼。該輸入范圍在校準響應(yīng)中仍然不可用,因為校準是在A/D轉(zhuǎn)換后進行的。校準僅向?qū)嶋HADC響應(yīng)添加恒定偏移,在上述示例中為低于13LSB的所有值產(chǎn)生代碼13。應(yīng)該注意的是,一些ADC具有與本文討論的后轉(zhuǎn)換方法不同的內(nèi)置校準功能。這些內(nèi)置校準技術(shù)可能能夠保持ADC的本機范圍。這種內(nèi)置校準技術(shù)用于TI的TMS320280x和TMS3202801x設(shè)備上的12位ADC。




關(guān)鍵詞: 兩點校準 ADC偏移 增益誤差

評論


技術(shù)專區(qū)

關(guān)閉