筆者最近在做的一個項目中,用到一片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)之間的某一個數。