24小時聯(lián)系電話:18217114652、13661815404
中文
公司新聞
單片機(jī)開發(fā)設(shè)計(jì)模數(shù)轉(zhuǎn)換器(ADC)簡介
模數(shù)轉(zhuǎn)換器或ADC有許多不同的實(shí)現(xiàn)。本文概述了主要類型,它們的特征和局限性。
幾乎所有的微控制器都有內(nèi)置的ADC。即使是基于AVR ATMega系列的小型Arduino,也擁有它們。本文的最后一部分討論了使用此類ADC時應(yīng)注意的一些問題。但是首先我們將回顧模數(shù)轉(zhuǎn)換的基礎(chǔ)。
模擬到數(shù)字轉(zhuǎn)換的基礎(chǔ)
ADC由圖1中的示意圖符號表示。它僅顯示了一個模擬輸入及其等效的數(shù)字輸出。所示示例為一個N位ADC。N通常是6到24之間的任何值,常見的是8、10、12或16。
輸入是電壓,范圍為0到最大值,取決于實(shí)際ADC。假設(shè)有N位,則可能有2 N個數(shù)字值,則以1位表示的值為(V ADCMAX / 2 N)。
作為一個例子,如果給定ADC的最大輸入值是5.0V,并且所述ADC是10位類型的,則每個比特代表(5V / 2 10),5.00 / 1024,或約4.89mV。因此,該特定ADC的分辨率或量化步長為4.89mV。這是其絕對的理論分辨率。
在這種特殊情況下,無法將信號解析為優(yōu)于±(4.89mV / 2)的分辨率。此限制稱為量化誤差,并且所有ADC甚至是完美ADC都具有一定程度的量化誤差,具體取決于ADC的分辨率。
實(shí)用的ADC具有更多的誤差源。兩個這樣的錯誤是:差分非線性(DNL)和積分非線性(INL)錯誤。在為特定應(yīng)用指定ADC時必須考慮這些因素。
當(dāng)ADC輸出應(yīng)保持不變時,DNL錯誤就會發(fā)生。例如,假設(shè)給定輸入的當(dāng)前輸出代碼為01101100,并且輸入值增加了量化步長的一半。然后,代碼應(yīng)為01101100 +1位或01101101。
當(dāng)輸入電壓低于當(dāng)前輸入電壓時,也會發(fā)生相反的情況。有時,由于各種原因不會發(fā)生這種情況。在這種情況下,據(jù)說ADC具有±1位DNL誤差。
如果量化級別未在整個輸入范圍內(nèi)均勻分布,則會發(fā)生INL錯誤。例如,假設(shè)某個特定的ADC具有12位或4096個計(jì)數(shù)的分辨率和4.096V基準(zhǔn)電壓。每個位數(shù)精確地代表了1.000mV的輸入電壓變化。
因此,4096 mV的輸入電壓應(yīng)提供1111 1111 1111的輸出,即0xFFF。對于某些ADC,4095mV甚至4094mV的輸入仍將提供0xFFF的數(shù)字輸出。發(fā)生的是,在整個輸入范圍內(nèi),1位的值變化很小,只有1.001mV或0.999mV。累積的誤差導(dǎo)致一到兩位精度的滿量程誤差。
稍后將看到,有許多外部因素會進(jìn)一步降低ADC輸出精度。
ADC實(shí)施
有多種實(shí)現(xiàn)ADC的方法。接下來的幾節(jié)介紹了一些較常見的部分。為了使本文相對簡短,僅給出每個此類實(shí)現(xiàn)的簡單且有些不完整的描述。
單斜率和雙斜率積分ADC
單斜率ADC的框圖如圖2所示?;静僮鞣浅:唵?。電容器從輸入源充電,直到其電壓達(dá)到V Ref為止,此時比較器跳閘。充電時,由時鐘供電的數(shù)字計(jì)數(shù)器也在進(jìn)行計(jì)數(shù)。當(dāng)比較器跳閘時,它將停止計(jì)數(shù),此時達(dá)到的計(jì)數(shù)代表模擬輸入。
圖2 –單斜率積分ADC的框圖
這種方法最常見的變體之一是雙斜率積分ADC。在其中,電容器放電,然后對計(jì)數(shù)器值求平均值。此技術(shù)減輕了積分電容器中介電吸收的影響,介電吸收的影響可能導(dǎo)致ADC讀數(shù)錯誤。
這種類型的ADC是準(zhǔn)確的,但是非常慢。例如,它最常用于萬用表中,其中精度比速度更重要。
Sigma-Delta Σ-ΔADC
Sigma-Delta或Σ-? ADC框圖如圖3所示。從輸入端開始,差動放大器產(chǎn)生的輸出為 V in和DAC輸出。
1位DAC的輸出可以是以下兩個值之一:-V Ref或+ V Ref。在這種情況下,最好將積分器視為取前一個值和當(dāng)前輸入值的移動平均值。
所以,開始,假設(shè) V in固定在高于0V的很小一點(diǎn),以便比較器跳閘。其值將為高或1。然后DAC輸出為+ V參考。在下一輪中,將從當(dāng)前值V in中減去該值。由于先前的值為0V,因此積分器輸出現(xiàn)在將為– V ref。比較器輸出現(xiàn)在將為0,而DAC輸出將為at – V參考。
在下一個樣本中,由于先前的值是– V Ref,并且差動放大器實(shí)際上減去-V Ref,因此將V Ref加到V in。比較器輸出將因此為1。
此過程繼續(xù)進(jìn)行,因此,對于0V的V in,比較器輸出將為101010…的穩(wěn)定流。記住邏輯1意味著V Ref,0表示-V Ref,則如果取N個樣本并取平均值,則很容易發(fā)現(xiàn)平均值為0V。比較器之后的處理塊將簡單地將其輸出為單個值0000 ...假定為(V Ref – -V Ref)或2 x V Ref。
現(xiàn)在,假設(shè)V in為1V,這是一個5V ADC;±V Ref為±2.5V。按照與之前相同的步驟進(jìn)行操作,輸出將為:1011101…該輸出為1.07V。
但是,如果采樣更多,則精度會更高,并且該值接近1.00V。因此,Sigma-Delta需要許多樣本才能生成一個輸出。換句話說,需要對輸入信號進(jìn)行過采樣以減少ADC轉(zhuǎn)換誤差。
Sigma-Delta ADC通常用于數(shù)字化音頻信號,并在某些微控制器中用作ADC。
圖3 – Sigma-Delta ADC的框圖
閃存ADC
閃存ADC的操作也許是最容易理解的。圖4給出了閃存ADC的框圖。僅僅是許多比較器,每個比較器都被提供了比前一個電壓高一個位值的參考電壓。因此,對于一個8位ADC,需要256個這樣的比較器。對于10位,則需要1024。
閃存轉(zhuǎn)換器速度很快。它無需任何采樣或繁重的后處理即可直接轉(zhuǎn)換輸入。問題在于它需要大量的比較器,并且許多比較器占用了芯片上的大量硅面積。因此,僅在需要其他ADC實(shí)現(xiàn)方法無法達(dá)到的極高速度時才使用閃存ADC。
剛剛描述的內(nèi)容實(shí)際上稱為全閃存ADC。一種常用的變體是半閃存ADC。它使用兩步過程將實(shí)際轉(zhuǎn)換鏈中所需轉(zhuǎn)換器的數(shù)量減少一半。
首先,將輸入信號與精確設(shè)置為一半V Ref的電平進(jìn)行比較。如果它較低,則最高有效位MSb設(shè)置為0,并且將輸入電壓饋送到比較器鏈,參考電壓設(shè)置為V Ref / 2實(shí)際獲得剩余位。
如果輸入信號高于V Ref / 2,則MSb設(shè)置為1,從輸入信號中減去V Ref / 2。例如,可以通過使基準(zhǔn)電阻的下端偏移+ V Ref / 2來實(shí)現(xiàn)。
比較器鏈再次用于獲取其余位。因此,從本質(zhì)上講,這使用的是全閃存比較器數(shù)量的一半,但要付出額外的比較代價。例如,該技術(shù)還可擴(kuò)展為具有四分之一閃存ADC。
圖4 –全閃存ADC
逐次逼近寄存器(SAR)
這是中速ADC中最常使用的ADC技術(shù)。SAR ADC的框圖如圖5所示。SAR操作是該ADC的關(guān)鍵。最初,它設(shè)置為DAC范圍的中點(diǎn)。
比較器輸出將為高電平或低電平,具體取決于輸入是高于還是低于DAC輸出電平。
現(xiàn)在,輸入位于DAC范圍的上半部或下半部?,F(xiàn)在,將DAC設(shè)置為DAC輸入所處正確范圍的上半部或下半部的中點(diǎn),從而有效地將該范圍減小到整個范圍的四分之一。
重復(fù)此過程,依次縮小輸入所處的范圍,直到放大到正確的值為止。
另一種看待這種情況的方式是說,在第一次迭代之后,將知道輸入的MSbit,根據(jù)比較器輸出是低電平還是高電平,它的值為0或1。在下一次迭代之后,將知道下一個MSbit。重復(fù)該過程,直到所有輸出位都已知為止。
未提及的一件事是“跟蹤并保持”或“ T&H”塊。如果在ADC轉(zhuǎn)換過程中更改輸入值,則迭代過程將被中斷。T&H塊僅在轉(zhuǎn)換開始時捕獲輸入值,并在整個轉(zhuǎn)換過程中保持該值。
如圖6所示。T&H輸出將輸入信號的值保持在被觸發(fā)的點(diǎn),而不管輸入信號隨后的作用如何。轉(zhuǎn)換完成后,T&H將再次返回以跟蹤輸入信號。
SAR ADC是使用最廣泛的ADC,并且是大多數(shù)微控制器的內(nèi)置ADC中發(fā)現(xiàn)的一種。有些使用Sigma-Delta ADC,但大多數(shù)使用SAR ADC。
圖5 – SAR ADC的框圖
圖6 – T&H框圖
微控制器ADC
幾乎所有的微控制器都有內(nèi)置的ADC,大多數(shù)具有多路復(fù)用輸入。為了有效使用,應(yīng)考慮其局限性。
首先,根據(jù)目前為止的內(nèi)容,很明顯,輸入范圍不能超過ADC V Ref,必須遵守ADC的轉(zhuǎn)換速率限制。
例如,Arduino Uno的最大ADC轉(zhuǎn)換速率小于10KHz。因此,根本無法通過該ADC采樣20Hz至20KHz帶寬的完整音頻。
基于微控制器的ADC的問題全部歸結(jié)為微控制器是CMOS器件這一事實(shí),并且用于制造微控制器的硅工藝與實(shí)現(xiàn)模擬電路模塊不太兼容。
因此,例如,DAC和比較器不使用精密電阻器,因?yàn)檫@些電阻實(shí)際上很難在CMOS硅工藝中實(shí)現(xiàn)。取而代之的是,它們采用了功能等效的設(shè)計(jì),即使用電容器。最終結(jié)果是微控制器的ADC輸入具有相對較低的阻抗,該阻抗也是電容性的。
更重要的是,輸入阻抗在轉(zhuǎn)換過程中會有所變化。這一切都意味著,如果信號源的輸出阻抗很高,則ADC傾向于給出相差甚遠(yuǎn)的轉(zhuǎn)換結(jié)果。圖7舉例說明了這一點(diǎn)。
在此示例中,ADC用于讀取6V電池電壓。為了不使電池過度放電,將R1和R2都選擇為20KΩ,以便在電池電壓為6V時ADC輸入為3.0V。ADC的V Ref為3.3V;因此,一切都應(yīng)該正常工作。
但是,典型的微控制器ADC的輸入阻抗約為10KΩ,如圖所示,它與R2并聯(lián)。這將在電池電壓讀數(shù)中引起很大的誤差。這種情況下的解決方案是使用一個外部緩沖器來驅(qū)動ADC輸入。
圖7 – ADC輸入阻抗影響的圖示
使用微控制器ADC時應(yīng)考慮的最后一件事是ADC參考。在某些微控制器中,這只是微控制器VDD。
可以肯定的是,微控制器VDD來自穩(wěn)壓器,但是穩(wěn)壓器與適當(dāng)?shù)膮⒖茧妷褐g存在很大差異。
這很容易導(dǎo)致至少兩位精度損失。因此,現(xiàn)在12位微控制器ADC更像是10位ADC,并且沒有計(jì)算DNL和INL錯誤貢獻(xiàn)。
最重要的是要意識到這些限制,并確定微控制器ADC是否適合該應(yīng)用。