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