通過(guò)示例了解用于補(bǔ)償模數(shù)轉(zhuǎn)換器 (ADC) 偏移和增益誤差的兩點(diǎn)校準(zhǔn)方法和定點(diǎn)實(shí)現(xiàn)。
在之前的文章中,我們討論了可以使用單點(diǎn)校準(zhǔn)來(lái)消除 ADC 偏移誤差。為了補(bǔ)償偏移和增益誤差,我們需要兩點(diǎn)校準(zhǔn)。在本文中,我們將探討兩點(diǎn)校準(zhǔn)方法,并通過(guò)示例了解該技術(shù)的定點(diǎn)實(shí)現(xiàn)。
確定實(shí)際 ADC 失調(diào)和增益誤差的兩點(diǎn)校準(zhǔn)測(cè)試
圖 1 顯示了受偏移和增益誤差影響的單極性 12 位ADC的特性曲線。
圖 1.受偏移和增益誤差影響的單極性 12 位 ADC 的特性曲線。
ADC 的滿量程值為 3 V。在 ADC 滿量程范圍的 10% 和 90% 處選擇兩個(gè)測(cè)試輸入,即點(diǎn) A 和 B,以確定 ADC 偏移和增益誤差。在 0.3 V 和 2.7 V 時(shí),測(cè)得的輸出代碼分別為 437 和 3749。測(cè)量傳遞函數(shù)的斜率可以計(jì)算為:
使用點(diǎn) A 的 x 和 y 值,我們得到以下線性方程:
通過(guò)代入 V?in??= 0,可以發(fā)現(xiàn)偏移誤差為 +23 LSB。下面的等式描述了理想 12 位 ADC 的線性模型:
因此,0.3 V 和 2.7 V 時(shí)的理想代碼值分別為 409 和 3686。使用這些值,可獲得理想響應(yīng)的斜率:
現(xiàn)在我們可以計(jì)算ADC的增益誤差如下:?
兩點(diǎn)校準(zhǔn)——修正 ADC 失調(diào)誤差和增益誤差
了解實(shí)際響應(yīng)后,我們現(xiàn)在可以輕松地消除數(shù)字域中的偏移和增益誤差。首先,我們可以從每個(gè)輸出代碼中減去偏移量,得到一個(gè)通過(guò)原點(diǎn)且斜率為 Slope?m的響應(yīng)。接下來(lái),將結(jié)果乘以 (frac{Slope_{i}}{Slope_{m}}) 圍繞原點(diǎn)旋轉(zhuǎn)獲得的直線并生成斜率為 Slope?i的直線。SlopeiSlopem圍繞原點(diǎn)旋轉(zhuǎn)獲得的線并產(chǎn)生斜率為 Slope 的直線
這些數(shù)學(xué)運(yùn)算將實(shí)際響應(yīng)的直線映射到理想 ADC 的直線。圖 2 使用一個(gè)夸張的例子來(lái)說(shuō)明校準(zhǔn)概念。
圖 2.?顯示 ADC 校準(zhǔn)的示例響應(yīng)。
因此,校準(zhǔn)后的輸出代碼 Code?Cal可以通過(guò)應(yīng)用等式 1 從實(shí)際代碼 Code?a計(jì)算得出:
等式 1。
定點(diǎn)校準(zhǔn)實(shí)現(xiàn)
另一方面,如果我們?cè)噲D補(bǔ)償偏移和增益誤差的固定值,我們可以簡(jiǎn)化方程式 1 并實(shí)現(xiàn)計(jì)算效率更高的系統(tǒng)。繼續(xù)我們的例子,我們可以將 offset = 23,Slope?i??= 1365.42,Slope?m??= 1380 代入等式 1,得到以下關(guān)系:
為了節(jié)省系統(tǒng)處理器的一些CPU(中央處理器)周期,我們可以將上面的等式簡(jiǎn)化為等式 2:
等式 2。
在這里:
c?1?= 0.989434782
c?2??= -22.757
雖然我們可以使用浮點(diǎn)運(yùn)算來(lái)實(shí)現(xiàn)上述等式,但定點(diǎn)實(shí)現(xiàn)可能更高效且更具成本效益。我們有兩個(gè)小數(shù),c?1和 c?2。為了以定點(diǎn)格式表示小數(shù),我們將使用隱含的二進(jìn)制小數(shù)點(diǎn)。這意味著我們將假設(shè)寄存器的一定數(shù)量的位代表整數(shù)部分,而其余位代表數(shù)字的小數(shù)部分。
然后使用 Q 格式符號(hào)來(lái)指定整數(shù)和小數(shù)部分的位數(shù)。例如,101.0011 可以是 Q3.4 格式的數(shù)字,因?yàn)樗褂萌徽麛?shù)和四位小數(shù)部分。
請(qǐng)注意,二進(jìn)制小數(shù)點(diǎn)實(shí)際上并未在硬件中實(shí)現(xiàn);這只是一個(gè)允許我們?cè)诙c(diǎn)處理器中表示小數(shù)的概念。此外,給定 Q 格式中的數(shù)字可能表示正值或負(fù)值。
回到我們的 ADC 校準(zhǔn)示例,我們有兩個(gè)小數(shù),c?1和 c?2,它們應(yīng)該以適當(dāng)?shù)亩c(diǎn)格式表示。假設(shè)使用二進(jìn)制補(bǔ)碼格式的有符號(hào) 16 位寄存器來(lái)存儲(chǔ)這些常量。由于c?1小于1,整數(shù)部分只需要一位符號(hào)。剩余的位可以表示小數(shù)部分,從而形成 Q1.15 格式。
為找到 c 1的定點(diǎn)表示,我們將其乘以 2?15,將其四舍五入為最接近的整數(shù),并將四舍五入的結(jié)果轉(zhuǎn)換為二進(jìn)制形式。
由于 c?2在 16 和 32 之間,我們需要 5 位用于整數(shù)部分,1 位用于符號(hào)。這為小數(shù)部分留下了 10 位。因此,c?2的適當(dāng)表示是 Q6.10 格式。為了以這種格式表示,我們將 c?2乘以2?10,將其四舍五入為最接近的整數(shù),并將四舍五入的結(jié)果轉(zhuǎn)換為二進(jìn)制形式。
請(qǐng)注意,c?2是二進(jìn)制補(bǔ)碼格式的負(fù)數(shù)。由于新系數(shù)使用不同的比例因子,我們需要仔細(xì)跟蹤比例因子對(duì)我們計(jì)算的影響。讓我們定義一個(gè)新的臨時(shí)變量 Var?1來(lái)存儲(chǔ) c?1、新的和未校準(zhǔn)的 ADC 讀數(shù)的乘積,如等式 3:
等式 3。
這將產(chǎn)生等式 2 右側(cè)的第一項(xiàng)。假設(shè) ADC 的 12 位輸出存儲(chǔ)在我們的 C 程序中的帶符號(hào) 16 位寄存器中。因此,Code a可以認(rèn)為是Q16.0號(hào)碼。這意味著實(shí)現(xiàn)公式 3 需要將 Q1.15 值乘以 Q16.0 值。變量 Var 1應(yīng)該是一個(gè) 32 位的寄存器來(lái)存儲(chǔ)這個(gè)乘法的結(jié)果。此外,由于 Q16.0 數(shù)字乘以 Q1.15 值,因此 Var 1為 Q17.15 格式。如果您需要復(fù)習(xí)使用定點(diǎn)表示的乘法,請(qǐng)參閱本文。
如您所見(jiàn),乘法運(yùn)算增加了數(shù)據(jù)字長(zhǎng)。在實(shí)現(xiàn)DSP(數(shù)字信號(hào)處理器)?算法時(shí),我們通常會(huì)截?cái)嗷蛏崛氤朔ㄝ敵觯苑乐棺珠L(zhǎng)無(wú)限增長(zhǎng)。然而,在截?cái)嗷蛏崛氤朔ㄝ敵鲋?,我們?yīng)該考慮對(duì)數(shù)據(jù)的下一步操作。
在本例中(公式 2),乘法結(jié)果將添加到 Q6.10 格式的 c 2, new中。考慮到 c 2, new的小數(shù)部分,我們可以丟棄 Var 1的五個(gè)最低有效位,并將截?cái)嗟慕Y(jié)果存儲(chǔ)在新變量 Var 2中。C 編程中的右移運(yùn)算符可用于執(zhí)行此操作:
等式 4。
如果我們的系統(tǒng)中有任意長(zhǎng)度的寄存器(例如,就像我們?cè)?a href="http://wenjunhu.com/soft/data/30-91/" target="_blank">FPGA中那樣),我們可以使用 Q17.10 格式的 27 位寄存器存儲(chǔ) Var?2 。但是在C編程中,Var?2還是要存放在一個(gè)32位的寄存器中。如果我們截?cái)?Q17.15 數(shù)字的五個(gè)最低有效位并將結(jié)果存儲(chǔ)在 32 位寄存器中,我們將獲得 Q22.10 數(shù)字。最后,我們可以將新的 c 2添加到 Var?2,并丟棄 10 個(gè)最低有效位以獲得校準(zhǔn)的 ADC 值,得到公式 5:
等式 5。
作為旁注,為避免混淆,我想提一下等式 4 和 5 中的變量不使用下標(biāo),因?yàn)檫@兩行被假定為偽代碼。例如,文中的Var?2在方程式4和方程式5中寫(xiě)為Var2。
ADC 定點(diǎn)校準(zhǔn)驗(yàn)證
讓我們看看上面的定點(diǎn)系數(shù)(c 1,new ?= 32422 和 c 2,new ?= 23303)是否可以將測(cè)得的 ADC 響應(yīng)映射到理想的直線模型。在圖 1 中的 A 點(diǎn),ADC 輸出為 437。應(yīng)用公式 3,可得 Var 1為:
將其轉(zhuǎn)換為二進(jìn)制格式,右移 5 位,然后找到等效的十進(jìn)制,我們得到:
Var2=442762
現(xiàn)在,我們添加 c 2,new,并將結(jié)果的二進(jìn)制等效項(xiàng)右移 10 位,得到:
CodeCal=409
您可以類似地驗(yàn)證 B 點(diǎn)也映射到理想代碼 3686。請(qǐng)注意,計(jì)算機(jī)程序使用系數(shù)的二進(jìn)制等效值,我只是使用十進(jìn)制值來(lái)闡明計(jì)算。我們可以類似地檢查測(cè)得的 ADC 響應(yīng)中的其他點(diǎn),以確保定點(diǎn)實(shí)現(xiàn)產(chǎn)生所需的值。如果不滿足,我們將不得不使用更大的寄存器來(lái)存儲(chǔ)校準(zhǔn)系數(shù)。
ADC 未使用的輸出代碼和輸入范圍
之前,我們討論了偏移和增益誤差會(huì)導(dǎo)致未使用的輸出代碼。上面討論的校準(zhǔn)技術(shù)是在 A/D 轉(zhuǎn)換之后執(zhí)行的。結(jié)果,它無(wú)法解決未使用的代碼問(wèn)題。為闡明這一點(diǎn),請(qǐng)考慮圖 3 中所示的示例。
圖 3.?顯示未使用和可用輸入范圍和輸出代碼范圍的示例。
在這個(gè)例子中,顯示了一個(gè)偏移量為 -13 LSB 的單極性 ADC??梢酝ㄟ^(guò)將 ADC 讀數(shù)加 13 來(lái)校準(zhǔn)偏移誤差。但是,請(qǐng)注意 ADC 輸出小于 13 LSB 的輸入值的全零代碼。該輸入范圍在校準(zhǔn)響應(yīng)中仍然不可用,因?yàn)樾?zhǔn)是在 A/D 轉(zhuǎn)換之后執(zhí)行的。校準(zhǔn)僅向?qū)嶋H ADC 響應(yīng)添加恒定偏移,在上例中為所有低于 13 LSB 的值生成代碼 13。需要注意的是,一些 ADC 具有與本文討論的轉(zhuǎn)換后方法不同的內(nèi)置校準(zhǔn)功能。這些內(nèi)置校準(zhǔn)技術(shù)可能能夠保留 ADC 的原始范圍。這種內(nèi)置校準(zhǔn)技術(shù)用于 12 位 ADC來(lái)自 TI 的TMS320280x 和 TMS3202801x 設(shè)備。
審核編輯:湯梓紅
評(píng)論
查看更多