每一顆 ADC 都在問的那一個問題
在這一整階裡,你一塊一塊地跨過了類比/數位的鴻溝:第 1 篇說明取樣如何在時脈節拍上把連續訊號定格,第 2 篇說明為什麼混疊逼著你在那些節拍之前擺上抗混疊濾波器,第 3 篇把振幅變成編了號的編碼、給了我們解析度與 ENOB,第 4 篇則讓一顆 DAC 正向運作、把編碼變回電壓。一顆 ADC 把最後這一步反過來跑,而在它一切巧妙底下,問的其實是一個直白的問題:這個輸入電壓,相當於參考電壓的多少個最小步階——多少個 LSB?答案是一個從 0 到 2^n 減 1 的編碼。
有兩個零件讓這件事成為可能。參考電壓是那把沉默的尺:每一顆 ADC 都只拿輸入去和 Vref 的各個分數相比,所以 Vref 訂下滿量程,而它身上任何雜訊或漂移,都會原封不動地以誤差的形式落進你的答案裡。另一個零件是比較器——那隻電子眼睛,看著兩個電壓,只說『左邊那個比較高』或『左邊那個比較低』。撕掉行銷詞藻,每一顆轉換器都只是用某種巧妙的方式,把一個或多個比較器對準輸入與參考,再讀出輸入坐落在哪裡。各架構的差別,純粹在於它們如何進行這場搜尋。
整篇請在腦中握住一幅畫面:一道由 2^n 個編碼組成的階梯,而 ADC 想找出輸入落在哪一階上。你可以一口氣盤問每一階、可以玩一場一次一位元的二分搜尋猜謎、也可以拿一連串粗糙的觀看去平均它們。這三種策略就是快閃、逐次逼近與 Σ-Δ——而它們之間的抉擇,正是糾纏著整個電子學的那個三方取捨:速度對上解析度、對上成本與功耗。這三者你無法同時都拉到最大。
快閃:一口氣問完所有問題
快閃 ADC 是蠻力冠軍:它替每一個門檻雇一個比較器,讓它們在同一瞬間全部投票。一道電阻梯——跨在 Vref 上的一長串相等電阻,也就是最初那一階的分壓器重複許多次——每個編碼分出一個參考電平。2^n 減 1 個比較器各自拿輸入去和自己那一抽頭相比,於是輸出讀起來像一支溫度計:輸入以下的比較器全讀高、以上的全讀低,而那道分界就標出了答案。一個優先編碼器讀出溫度計翻轉的位置、吐出二進位編碼,整件事都在單一個時脈節拍內完成。
那份平行性快得令人屏息——快閃轉換器可達每秒數十億次取樣,住在高速示波器與無線電接收機的前端——但代價毫不留情。比較器的數目是 2^n 減 1,所以它每多一個位元就翻一倍:一顆 8 位元快閃需要 2^8 減 1 = 255 個比較器、10 位元需要 1023 個、12 位元超過四千個。每個比較器還會增加輸入電容、消耗功率,所以整個陣列變成一個又重又熱的負載,得由你的訊號源去驅動。快閃用矽面積與瓦數去換取純粹的速度,沒有半點耐心可言。
對天花板真正的位置要誠實。超過約 8 位元,一顆純粹的快閃就很少划算了:比較器數目爆炸、輸入電容變得難以驅動,而要把那些梯級抽頭與比較器失調全都匹配到優於一個 LSB,也變得異常嚴酷。設計者用管線式與摺疊式架構去延伸這個點子,把一個小的快閃級反覆重用許多次——對快速、中等解析度的工作是個明智的折衷——但純粹的快閃本身仍是專科醫師:當你需要極致速度、又能接受不高的解析度時,才選它。
逐次逼近:內藏一顆 DAC 的二分搜尋
逐次逼近(SAR)ADC 玩的是猜數字遊戲。想像你要從 0 到 15 之間找出一個藏起來的數,只能問『比較高還是比較低?』:你先猜 8(正中間),接著猜 4 或 12,依此類推,一個問題釘下一個位元。在內部,SAR 轉換器接出來的零件正好做這件事:一個取樣保持把輸入定格、一個比較器、一顆小小的 DAC(第 4 篇的二進位加權或 R-2R 梯,或現代晶片裡的電荷重分配電容陣列),以及 SAR 邏輯。每個時脈週期它設定一個試探位元,DAC 把試探編碼變成試探電壓,比較器則說保留這個位元、還是清掉它。一次 n 位元的轉換要花 n 個週期——每個位元問一個謹慎的問題。
- 用真實的數字佈好場:一顆 4 位元 SAR,參考 Vref = 5 V,於是一個 LSB = 5 V / 2^4 = 5 / 16 = 0.3125 V。被保持住的輸入是 Vin = 3.0 V。我們會從最高有效位元往下建出編碼。
- 位元 3(權重 8):試編碼 1000 -> DAC = 8 times 0.3125 = 2.5 V。3.0 V 比較高嗎?是,所以保留這個位元。目前編碼 = 1000。
- 位元 2(權重 4):試編碼 1100 -> DAC = 12 times 0.3125 = 3.75 V。3.0 V 比較高嗎?否,所以清掉這個位元。編碼回到 1000。
- 位元 1(權重 2):試編碼 1010 -> DAC = 10 times 0.3125 = 3.125 V。3.0 V 比較高嗎?否,清掉它。編碼維持 1000。
- 位元 0(權重 1):試編碼 1001 -> DAC = 9 times 0.3125 = 2.8125 V。3.0 V 比較高嗎?是,保留它。最終編碼 = 1001 = 9,讀回來是 2.8125 V——恰在 3.0 V 下方的那一階,留下 0.1875 V 的量化誤差,遠小於一個 LSB。四個時脈、四個位元,搞定。
這場二分搜尋,正是 SAR 成為轉換器世界主力的原因。不論解析度多高,它都只需要一個比較器和一顆 DAC,所以維持小巧、低功耗又便宜,同時能在每秒數百千取樣到數百萬取樣的速率下達到 8 到 18 位元。它就是大多數微控制器內建的那顆 ADC。不過有兩個誠實的提醒:取樣保持是必備的,因為輸入在所有 n 次比較期間都得完美靜止;而且這顆轉換器的好壞,受制於它內部的 DAC——那些二進位加權元件裡的任何非線性,都會原原本本地以結果的非線性現形。
Σ-Δ:以過取樣,用速度換解析度
Σ-Δ ADC 拒絕那謹慎的單一觀看,改為拿一連串粗糙的觀看。一個簡單的迴路——一個積分器、一個當作 1 位元 ADC 的比較器,以及一顆回授回來做相減的 1 位元 DAC——以遠快於訊號所需的速率運轉,傾瀉出一道密密的 1 與 0 之流,其平均密度追蹤著輸入。餵進半量程,位元流大約一半是 1;餵進接近滿量程,就幾乎全是 1。一個數位濾波器接著把那道流數算、平滑成一個高解析度的數字。妙處在於,1 位元的轉換器不可能非線性(兩個點永遠落在一條直線上),於是它繞開了限制快閃與 SAR 的那些匹配問題。
第 3 篇的兩個點子在這裡挑大樑。第一個是過取樣:總量化雜訊是固定的,所以用遠高於奈奎斯特的速率取樣,會把它攤在一條寬得多的頻帶上,而只有落在你訊號頻帶裡的那一薄片才算數。純過取樣大約每 4 倍速率換來一個額外位元(約 6 dB 的 SNR)。第二個、也是真正的魔法,是雜訊整形:回授迴路不只是把量化雜訊均勻攤開——它主動把雜訊往上推到高頻、推出你在乎的頻帶之外,讓數位濾波器在那裡把它刪掉。兩者合力,讓一個樸素的 1 位元核心達到 16 到 24 個有效位元。最後一級降取樣丟掉多餘的取樣,把那慢速、乾淨、高解析度的輸出交到你手上。
這些誠實的取捨,是快閃的鏡像。Σ-Δ 很慢:每個輸出取樣需要許多內部週期,而數位濾波器又添了延遲,所以它不適合捕捉快速的單發事件,或在通道之間快速跳換。但對音訊、以及對來自感測器的慢速、精密直流量測,它無與倫比。它還帶著一個悄悄的紅利:因為取樣遠高於關注頻帶,它前面那個類比抗混疊濾波器可以溫和又便宜,不必是一隻陡峭的怪物(回想第 2 篇那道又寬又寬容的過渡縫隙)。不過它在最終輸出速率上仍服從奈奎斯特——它降取樣後的結果仍可能遭受混疊,所以那個溫和的濾波器是被放寬,絕不是被取消。
雙斜率,與一張誠實的比較表
第四個家族讓整幅畫面完整:雙斜率(積分式)轉換器,是 ADC 裡的天平。它讓一個積分器以未知輸入充電固定的時間 T1,然後切到一個相反極性的已知參考,計算它斜降回零所花的時間 T2。比值漂亮地掉出來:Vin / Vref = T2 / T1——並注意積分器的電容與電阻在這個比值裡完全抵消,所以它們的漂移與容差根本不重要。這份免疫力,正是雙斜率好得出奇地穩定又準確的原因。把 T1 選成市電週期的整數倍(100 ms 恰好是 50 Hz 的 5 個週期、60 Hz 的 6 個週期),市電哼聲就積分歸零,排掉那個折磨其他一切的干擾。它很慢——每秒幾次到幾百次轉換——這正是它住在桌上型萬用電表裡的原因。
FAMILY RESOLUTION SPEED HARDWARE COST BEST FOR ------------------------------------------------------------------------------ Flash 6-8 bits fastest ~2^n comparators scopes, RF front-ends SAR 8-18 bits fast 1 comparator + DAC MCUs, general DAQ Sigma-delta 16-24 bits slow 1-bit loop + filter audio, precision DC Dual-slope 12-22 bits slowest integrator + timer bench multimeters ------------------------------------------------------------------------------ one conversion: flash = 1 clock SAR = n clocks S-D / dual-slope = many always the same triangle: SPEED <-> RESOLUTION <-> COST / POWER
不論你挑哪個家族,都要誠實地讀同一小撮規格。轉換時間是一個答案要花多久;吞吐率是你實際每秒拿到幾個答案,含取樣保持的擷取時間與任何管線延遲——這兩個不是同一個數字。INL(積分非線性)量的是整條轉移曲線偏離直線多遠(以 LSB 計),而 DNL(微分非線性)量的是每一個個別步階偏離一個 LSB 寬多遠;DNL 比負一個 LSB 更糟,就表示有一個編碼完全消失了——一個轉換器永遠輸出不了的階。而把這一切繫回第 3 篇,ENOB 就是那個告訴你:把雜訊與失真都算進去之後,那些標稱位元裡有幾個是真的。
把一顆 ADC 接到微控制器上
大多數時候你不會去搭這些當中的任何一個——你會用微控制器裡本來就內建的那顆 SAR ADC(通常 10 到 12 位元),或在需要更高解析度或速度時,透過 SPI 或 I2C 匯流排外掛一顆轉換器。不論哪一種,第一個決定都是參考電壓,因為它訂下滿量程、也因此訂下每一個編碼的意義。一個有雜訊或會漂移的參考會悄悄偷走位元;一個乾淨、穩定的參考則賺得它的位置。當你量的是一個比值(比方說一個感測器分壓器)時,有個漂亮的訣竅:用同一個電源供應感測器與參考,這樣電源的搖晃會在比值裡抵消、而不是變成誤差。
現實世界裡的經典臭蟲是擷取時間。取樣保持的保持電容必須透過你訊號源的電阻充電,轉換器才讀它,而那是一個 RC 安定,正如前面幾階所教。如果你的訊號來自高源阻抗——一個大分壓器、一個經由長導線的感測器——電容在那短短的取樣窗裡填不滿,於是每次讀數都偏低下垂。解方是在 ADC 正前方擺一個緩衝器(一個運放隨耦器,帶著它近乎零的輸出阻抗),而當然,抗混疊濾波器仍然要排在最前面、在任何取樣之前。然後留意佈線:一顆真實的 ADC 需要在它的電源與參考腳就近擺一個穩固的去耦電容,因為在真實的板子上,佈線本身就是一個電路元件,而參考雜訊會直接變成轉換誤差。