使用兩點(diǎn)校準消除ADC偏移和增益誤差使用兩點(diǎn)校準消除ADC偏移和增益誤差
通過(guò)示例了解兩點(diǎn)校準方法和定點(diǎn)實(shí)現,以補償模數轉換器(ADC)偏移和增益誤差。
在上一篇文章中,我們討論了單點(diǎn)校準可用于微調ADC偏移誤差。為了補償偏移和增益誤差,我們需要兩點(diǎn)校準。在本文中,我們將探索兩點(diǎn)校準方法,并通過(guò)一個(gè)例子了解該技術(shù)的定點(diǎn)實(shí)現。
確定實(shí)際ADC偏移和增益誤差的兩點(diǎn)校準測試
圖1顯示了受偏移和增益誤差影響的單極12位ADC的特性曲線(xiàn)。
受偏移和增益誤差影響的單極12位ADC的特性曲線(xiàn)。
圖1。受偏移和增益誤差影響的單極12位ADC的特性曲線(xiàn)。
ADC的滿(mǎn)標度值為3V。選擇ADC滿(mǎn)標度范圍10%和90%的兩個(gè)測試輸入點(diǎn)A和B,以確定ADC偏移和增益誤差。在0.3V和2.7V時(shí),測量的輸出代碼分別為437和3749。測量的傳遞函數的斜率可以計算為:
使用點(diǎn)A的x和y值,我們得到以下直線(xiàn)方程:
通過(guò)替換Vin=0,發(fā)現偏移誤差為+23 LSB。以下方程式描述了理想12位ADC的線(xiàn)性模型:
因此,0.3V和2.7V下的理想碼值分別為409和3686。使用這些值,理想響應的斜率可得:
現在我們可以計算ADC的增益誤差如下:
兩點(diǎn)校準——消除ADC偏移誤差和增益誤差
知道實(shí)際響應后,我們現在可以很容易地消除數字域中的偏移和增益誤差。首先,我們可以從每個(gè)輸出代碼中減去偏移量,得到一個(gè)通過(guò)原點(diǎn)且斜率為Slopem的響應。接下來(lái),將結果乘以
SlopeiSlopemSlopeiSlopem
將獲得的直線(xiàn)繞原點(diǎn)旋轉,并產(chǎn)生斜率為Slopei的直線(xiàn)。
這些數學(xué)運算將實(shí)際響應的直線(xiàn)映射到理想ADC的直線(xiàn)。圖2使用了一個(gè)夸張的例子來(lái)說(shuō)明校準概念。
顯示ADC校準的示例響應。
圖2:顯示ADC校準的示例響應。
因此,通過(guò)應用方程式1,可以從實(shí)際代碼Codea計算出校準的輸出代碼CodeCal:
方程式1。
定點(diǎn)校準實(shí)施
另一方面,如果我們試圖補償偏移和增益誤差的固定值,我們可以簡(jiǎn)化方程1,實(shí)現計算效率更高的系統。繼續我們的例子,我們可以將offset=23、Slopei=1365.42和Slopem=1380代入方程1,得到以下關(guān)系:
為了節省系統處理器的一些CPU(中央處理單元)周期,我們可以將上述方程簡(jiǎn)化為方程2:
方程式2。
解釋?zhuān)?/p>
c1=0.989434782
c2=-22.757
雖然我們可以使用浮點(diǎn)算法來(lái)實(shí)現上述方程,但定點(diǎn)實(shí)現可能更高效、更劃算。我們有兩個(gè)分數,c1和c2。為了以定點(diǎn)格式表示分數,我們將使用隱含的二進(jìn)制點(diǎn)。這意味著(zhù)我們將假設寄存器的一定數量的位表示整數部分,而剩余的位表示數字的小數部分。
然后使用Q格式表示法來(lái)指定整數和小數部分的位數。例如,101.0011可以是Q3.4格式的數字,因為它使用三位表示整數,四位表示小數部分。
請注意,二進(jìn)制點(diǎn)實(shí)際上并沒(méi)有在硬件中實(shí)現;它只是一個(gè)概念,允許我們在定點(diǎn)處理器中表示分數。此外,給定Q格式的數字可能表示正值或負值。
回到我們的ADC校準示例,我們有兩個(gè)分數c1和c2,它們應該以適當的定點(diǎn)格式表示。讓我們假設使用二進(jìn)制補碼格式的帶符號16位寄存器來(lái)存儲這些常數。由于c1小于1,整數部分只需要一個(gè)比特作為符號。其余的比特可以表示小數部分,從而形成Q1.15格式。
為了找到c1的不動(dòng)點(diǎn)表示,我們將其乘以215,將其四舍五入到最接近的整數,并將舍入結果轉換為二進(jìn)制形式。
由于c2在16到32之間,我們需要5位用于整數部分,1位用于符號。這給我們留下了10位用于小數部分。因此,c2的適當表示是Q6.10格式。為了用這種格式表示,我們將c2乘以210,將其四舍五入到最接近的整數,并將四舍五進(jìn)的結果轉換為二進(jìn)制形式。
請注意,c2是2補碼格式的負數。由于新系數使用不同的縮放因子,我們需要仔細跟蹤縮放因子對計算的影響。讓我們定義一個(gè)新的臨時(shí)變量Var1,將c1、new和未校準ADC讀數的乘積存儲為方程式3:
方程式3。
這產(chǎn)生了方程2右側的第一項。假設ADC的12位輸出存儲在C程序中的帶符號16位寄存器中。因此,Codea可以被視為Q16.0數字。這意味著(zhù)實(shí)現方程式3需要將Q1.15值乘以Q16.0值。變量Var1應該是一個(gè)32位寄存器來(lái)存儲此乘法的結果。此外,由于Q16.0的數字乘以Q1.15的值,Var1的格式為Q17.15。如果你需要使用定點(diǎn)表示法來(lái)復習乘法,請參閱這篇文章。
如您所見(jiàn),乘法運算增加了數據字長(cháng)。在實(shí)現DSP(數字信號處理器)算法時(shí),我們通常會(huì )截斷或舍入乘法輸出,以防止字長(cháng)無(wú)限增長(cháng)。然而,在截斷或舍入乘法輸出之前,我們應該考慮對數據的下一步操作。
在這個(gè)例子中(方程式2),乘法結果將被添加到Q6.10格式的c2 new中??紤]到c2的分數部分,我們可以丟棄Var1的五個(gè)最低有效位,并將截斷的結果存儲在一個(gè)新的變量Var2中。C編程中的右移運算符可用于執行此操作:
方程式4。
如果我們的系統中有任意的寄存器長(cháng)度(例如,在FPGA中),我們可以使用Q17.10格式的27位寄存器存儲Var2。然而,在C編程中,Var2仍然必須存儲在32位寄存器中。如果我們截斷Q17.15數字的五個(gè)最低有效位并將結果存儲在32位寄存器中,我們將得到Q22.10數字。最后,我們可以將c2添加到Var2中,并丟棄10個(gè)最低有效位,以得到校準的ADC值,得到方程5:
方程式5。
作為旁注,為了避免任何混淆,我想提到的是,方程4和5中的變量不使用下標,因為這兩行被假設為偽代碼。例如,文本中的Var2在方程式4和5中表示為Var2。
ADC定點(diǎn)校準驗證
讓我們看看上述定點(diǎn)系數(c1,new=32422和c2,new=23303)是否可以將測量的ADC響應映射到理想的直線(xiàn)模型。在圖1中的A點(diǎn),ADC輸出為437。應用方程式3,Var1為:
將其轉換為二進(jìn)制格式,右移5位,然后找到十進(jìn)制等效值,我們得到:
現在,我們添加c2、new,并將結果的二進(jìn)制等效值右移10位,得到:
您同樣可以驗證點(diǎn)B是否也映射到理想代碼3686。請注意,計算機程序使用系數的二進(jìn)制等效值,我只是使用十進(jìn)制值來(lái)闡明計算。我們同樣可以從測量的ADC響應中檢查其他點(diǎn),以確保定點(diǎn)實(shí)現產(chǎn)生所需的值。如果不滿(mǎn)足這個(gè)要求,我們將不得不使用更大的寄存器來(lái)存儲校準系數。
ADC未使用的輸出代碼和輸入范圍
之前,我們討論過(guò)偏移和增益誤差會(huì )導致未使用的輸出代碼。上述校準技術(shù)是在A(yíng)/D轉換之后執行的。因此,它無(wú)法解決未使用的代碼問(wèn)題。為了澄清這一點(diǎn),請考慮圖3中所示的示例。
顯示未使用和可用輸入范圍的示例。
圖3。示例顯示了未使用和可用的輸入范圍和輸出代碼范圍。
在這個(gè)例子中,顯示了一個(gè)偏移為-13LSB的單極ADC。通過(guò)將ADC讀數加13,可以校準偏移誤差。但是,請注意,ADC輸出小于13 LSB的輸入值的全零碼。該輸入范圍在校準響應中仍然不可用,因為校準是在A(yíng)/D轉換后進(jìn)行的。校準僅向實(shí)際ADC響應添加恒定偏移,在上述示例中為低于13LSB的所有值產(chǎn)生代碼13。應該注意的是,一些ADC具有與本文討論的后轉換方法不同的內置校準功能。這些內置校準技術(shù)可能能夠保持ADC的本機范圍。這種內置校準技術(shù)用于TI的TMS320280x和TMS3202801x設備上的12位ADC。
評論