ADC相關引數之 INL和DNL

2021-10-05 18:26:58 字數 2817 閱讀 4624

筆者最近在做的乙個專案中,用到一片16位的高解析度的晶元,藉此再學習一下由於adc和dac的相關知識,以此鞏固。

關於adc的精度和解析度將在另外一篇部落格討論,解析度不等於精度。

一塊精度0.2%(或常說的準確度0.2級)的四位半萬用表,測得a點電壓1.0000v,b電壓1.0005v,可以分出b比a高0.0005v,但a點電壓的真實值可能在0.9980~1.0020之間不確定。

那麼,既然數字萬用表存在著精度和解析度兩個指標,那麼,對於adc和dac,除了解析度以外,也存在精度的指標。模數器件的精度指標是用積分非線性度(interger nonliner)即inl值來表示。也有的器件手冊用 linearity error 來表示。他表示了adc器件在所有的數值點上對應的模擬值,和真實值之間誤差最大的那一點的誤差值。也就是,輸出數值偏離線性最大的距離。單位是lsb(即最低位所表示的量)。

比如12位adc:tlc2543,inl值為1lsb。那麼,如果基準4.095v,給定數字量1000,輸出電壓在1v,那麼,真實電壓值可能分布在0.999~1.001v之間。對於dac也是類似的。比如dac7512,inl值為8lsb,那麼,如果基準4.095v,給定數字量1000,那麼輸出電壓可能是0.992~1.008v之間。

下面再說dnl值。理論上說,模數器件相鄰量個資料之間,模擬量的差值都是一樣的。就相一把疏密均勻的尺子。但實際並不如此。一把解析度1公釐的尺子,相鄰兩刻度之間也不可能都是1公釐整。那麼,adc相鄰兩刻度之間最大的差異就叫差分非線性值(differencial nonliner)。dnl值如果大於1,那麼這個adc甚至不能保證是單調的,輸入電壓增大,在某個點數值反而會減小。這種現象在sar(逐位比較)型adc中很常見。 

舉個例子,某12位adc,inl=8lsb,dnl=3lsb(效能比較差),基準4.095v,測a電壓讀數1000,測b電壓度數1200。那麼,可判斷b點電壓比a點高197~203mv。而不是準確的200mv。對於dac也是一樣的,某dac的dnl值3lsb。那麼,如果數字量增加200,實際電壓增加量可能在197~203mv之間。

很多解析度相同的adc,**卻相差很多。除了速度、溫度等級等原因之外,就是inl、dnl這兩個值的差異了。比如ad574,貴得很,但它的inl值就能做到0.5lsb,這在sar型adc中已經很不容易了。換個便宜的2543吧,速度和解析度都一樣,但inl值只有1~1.5lsb,精度下降了3倍。 

另外,工藝和原理也決定了精度。比如sar型adc,由於採用了r-2r或c-2c型結構,使得高權值電阻的一點點誤差,將造成末位好幾位的誤差。在sar型adc的2^n點附近,比如128、1024、2048、切換權值點阻,誤差是最大的。1024值對應的電壓甚至可能會比1023值對應電壓要小。這就是很多sar型器件dnl值會超過1的原因。但sar型adc的inl值都很小,因為權值電阻的誤差不會累加。 

和sar型器件完全相反的是階梯電阻型模數/數模器件。比如tlc5510、dac7512等低價模數器件。比如7512,它由4095個電阻串聯而成。每個點阻都會有誤差,一般電阻誤差5%左右,當然不會離譜到100%,更不可能出現負數。因此這類器件的dnl值都很小,保證單調。但是,每個電阻的誤差,串聯後會累加,因此inl值很大,線性度差。

這裡要提一下雙積分adc,它的原理就能保證線性。比如icl7135,它在40000字的量程內,能做0.5lsb的inl值(線性度達到1/80000 !!)和0.01lsb的dnl值.這兩個指標在7135的10倍價錢內,是不容易被其他模數器件超越的。所以7135這一類雙積分adc特別適合用在數字電壓表等需要線性誤差非常小的場合。 

還要特別提一下基準源。基準源是測量精度的重要保證。基準的關鍵指標是溫飄,一般用ppm/k來表示。假設某基準30ppm/k,系統在20~70度之間工作,溫度跨度50度,那麼,會引起基準電壓30*50=1500ppm的漂移,從而帶來0.15%的誤差。溫漂越小的基準源越貴,比如30ppm/k的431,七毛錢;20ppm/k的385,1塊5;10ppm/k的mc1403,4塊5;1ppm/k的lm399,14元;0.5ppm/k的lm199,130元。 

該死的教科書害了一代學生。在adc電路中的基準源不能直接接電源vcc,這裡要考慮基準電壓的穩定度。其中常用的基準源電壓可由tl431提供。 

最後說一下sigma-delta型adc,它比較特殊,對於精度,一般用直接用線性度表示,比如0.0015%.不說差分非線性值,而直接用有效解析度來表示。此外,sigma-delta型adc還存許多怪脾氣,難伺候。 

總結: 

(1)inl(interger nonlinear,linearity error)精度。理解為單值資料誤差,對應該點模擬資料由於元器件及結構造成的不能精確測量產生的誤差。 

(2)dnl(differential nonlinear)差分非線性值。理解為刻度間的差值,即對每個模擬資料按點量化,由於量化產生的誤差。 

例子: 

(1)inl,精度 

比如12位adc:假設基準vref=4.095v,那麼1lsb=vref/2^12=0.001v。如果精度為1lsb,則它的單值測量誤差0.001v*1=0.001v,比如測量結果1.000v,實際在1.000+/-0.001v範圍。如果精度為8lsb,則他的單值測量誤差0.001v*8=0.008v,比如測量結果1.000v,實際在1.000+/-0.008v範圍 

(2)dnl,差分非線性值 

比如12位adc:假設基準vref=4.095v,那麼1lsb=vref/2^12=0.001v。不考慮精度,即精度為0lsb。沒有單值誤差。如果dnl=3lsb=0.001v*3=0.003v假設a實際電壓為1.001v,b實際電壓為1.003v。理論上a點讀數1.001v/1lsb=1001,b點讀數1.003v/1lsb=1003,b-a=2,b>a,但由dnl=3lsb=0.003v,模擬資料間的量化誤差有0.003v,那麼b-a會在-1(2-3=-1)到+5(2+3=5)之間的某乙個數。

談談ADC的相關效能引數

說到adc的引數,可能我們一開始學習的時候比較會關注到他的轉換位數,轉換速度啊這些。但是我想說的是,對於乙個adc來說,我們在今後的設計中可能更應該去關注這兩個引數 inl dnl。dnl,即微分非線性,他表徵的是我們adc的實際刻度與理想刻度之間的差值。舉個例子,比如說我們手中普通的尺子,正常情況...

Linux核心引數和Oracle相關引數調整

shared memory segments key shmid owner perms bytes nattch status 0x00000000 65537 oracle 640 4194304 27 0x00000000 98306 oracle 640 20971520 27 0x0000...

引數命名 空調的命名方法和相關引數

空調器型號標識的命名方法執行國家統一標準 gb t 7725 2004 一般由產品代號,氣候型別代號,結構形式代號,功能代號,額定製冷量,機組結構類代號等部分構成。1.2.1 空調器的命名與銘牌標識 1 空調器的命名 空調器型號標識的命名方法執行國家統一標準 gb t 7725 2004 一般由產品...