使用兩點校準消除ADC偏移和增益誤差使用兩點校準消除ADC偏移和增益誤差
通過示例了解兩點校準方法和定點實現(xiàn),以補償模數(shù)轉(zhuǎn)換器(ADC)偏移和增益誤差。
在上一篇文章中,我們討論了單點校準可用于微調(diào)ADC偏移誤差。為了補償偏移和增益誤差,我們需要兩點校準。在本文中,我們將探索兩點校準方法,并通過一個例子了解該技術(shù)的定點實現(xiàn)。
圖1顯示了受偏移和增益誤差影響的單極12位ADC的特性曲線。
受偏移和增益誤差影響的單極12位ADC的特性曲線。
圖1。受偏移和增益誤差影響的單極12位ADC的特性曲線。
ADC的滿標度值為3V。選擇ADC滿標度范圍10%和90%的兩個測試輸入點A和B,以確定ADC偏移和增益誤差。在0.3V和2.7V時,測量的輸出代碼分別為437和3749。測量的傳遞函數(shù)的斜率可以計算為:
使用點A的x和y值,我們得到以下直線方程:
通過替換Vin=0,發(fā)現(xiàn)偏移誤差為+23 LSB。以下方程式描述了理想12位ADC的線性模型:
因此,0.3V和2.7V下的理想碼值分別為409和3686。使用這些值,理想響應(yīng)的斜率可得:
現(xiàn)在我們可以計算ADC的增益誤差如下:
兩點校準——消除ADC偏移誤差和增益誤差
知道實際響應(yīng)后,我們現(xiàn)在可以很容易地消除數(shù)字域中的偏移和增益誤差。首先,我們可以從每個輸出代碼中減去偏移量,得到一個通過原點且斜率為Slopem的響應(yīng)。接下來,將結(jié)果乘以
SlopeiSlopemSlopeiSlopem
將獲得的直線繞原點旋轉(zhuǎn),并產(chǎn)生斜率為Slopei的直線。
這些數(shù)學運算將實際響應(yīng)的直線映射到理想ADC的直線。圖2使用了一個夸張的例子來說明校準概念。
顯示ADC校準的示例響應(yīng)。
圖2:顯示ADC校準的示例響應(yīng)。
因此,通過應(yīng)用方程式1,可以從實際代碼Codea計算出校準的輸出代碼CodeCal:
方程式1。
定點校準實施
另一方面,如果我們試圖補償偏移和增益誤差的固定值,我們可以簡化方程1,實現(xiàn)計算效率更高的系統(tǒng)。繼續(xù)我們的例子,我們可以將offset=23、Slopei=1365.42和Slopem=1380代入方程1,得到以下關(guān)系:
為了節(jié)省系統(tǒng)處理器的一些CPU(中央處理單元)周期,我們可以將上述方程簡化為方程2:
方程式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)換為二進制形式。
由于c2在16到32之間,我們需要5位用于整數(shù)部分,1位用于符號。這給我們留下了10位用于小數(shù)部分。因此,c2的適當表示是Q6.10格式。為了用這種格式表示,我們將c2乘以210,將其四舍五入到最接近的整數(shù),并將四舍五進的結(jié)果轉(zhuǎn)換為二進制形式。
請注意,c2是2補碼格式的負數(shù)。由于新系數(shù)使用不同的縮放因子,我們需要仔細跟蹤縮放因子對計算的影響。讓我們定義一個新的臨時變量Var1,將c1、new和未校準ADC讀數(shù)的乘積存儲為方程式3:
方程式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í)行此操作:
方程式4。
如果我們的系統(tǒng)中有任意的寄存器長度(例如,在FPGA中),我們可以使用Q17.10格式的27位寄存器存儲Var2。然而,在C編程中,Var2仍然必須存儲在32位寄存器中。如果我們截斷Q17.15數(shù)字的五個最低有效位并將結(jié)果存儲在32位寄存器中,我們將得到Q22.10數(shù)字。最后,我們可以將c2添加到Var2中,并丟棄10個最低有效位,以得到校準的ADC值,得到方程5:
方程式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為:
將其轉(zhuǎn)換為二進制格式,右移5位,然后找到十進制等效值,我們得到:
現(xiàn)在,我們添加c2、new,并將結(jié)果的二進制等效值右移10位,得到:
您同樣可以驗證點B是否也映射到理想代碼3686。請注意,計算機程序使用系數(shù)的二進制等效值,我只是使用十進制值來闡明計算。我們同樣可以從測量的ADC響應(yīng)中檢查其他點,以確保定點實現(xiàn)產(chǎn)生所需的值。如果不滿足這個要求,我們將不得不使用更大的寄存器來存儲校準系數(shù)。
ADC未使用的輸出代碼和輸入范圍
之前,我們討論過偏移和增益誤差會導致未使用的輸出代碼。上述校準技術(shù)是在A/D轉(zhuǎn)換之后執(zhí)行的。因此,它無法解決未使用的代碼問題。為了澄清這一點,請考慮圖3中所示的示例。
顯示未使用和可用輸入范圍的示例。
圖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。
評論