JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

DAC 的內部:二進位加權與 R-2R

DAC 把數位化的影片倒著放:餵它一個數字,吐回一個電壓。這篇講兩種經典拓樸如何運作——直觀的二進位加權加法放大器,以及只用兩種電阻值就把它打敗的優雅 R-2R 階梯——再加上參考電壓、規格,以及如何把階梯波平滑回一個訊號。

從數字回到電壓

本階前三篇朝一個方向走:一個平滑的類比訊號在時間上被取樣,再被量化在垂直方向切成有限的一階階碼。而 數位類比轉換器(DAC)把那段影片倒著放。交給它一個 n 位元的數字,它回給你一個電壓——2^n 個可能位階之一,每階恰好一個 LSB 高,整個跨幅由一個參考電壓釘住。它是從數位世界回到類比世界的那道出口。

具體來說:取一個帶 2.56 V 參考的 8 位元 DAC。階距為 LSB = 2.56 / 256 = 10 mV,於是輸出就是碼乘以 LSB。碼 100 給出 100 times 10 mV = 1.000 V;滿碼 255 給出 2.55 V。注意滿刻度落在參考電壓底下一個 LSB(是 2^n - 1 階,不是 2^n)——這俐落地提醒我們:n 位元 DAC 有 2^n 個位階,但它們之間只有 2^n - 1 個間隔。這個解析度,正是第 3 篇量化格柵的鏡像。

二進位加權 DAC:其實就是個加法放大器

最直觀的 DAC,是你在運算放大器那一階早就搭過的東西:一個加法放大器。想像一個反相運算放大器,它的虛接地從好幾個輸入電阻收集電流。現在把那些電阻做成二進位加權——R、2R、4R、8R 等等——並讓每個位元是一個開關,把它的電阻接到參考電壓(代表 1)或接地(代表 0)。最高有效位元拿到最小的電阻,因此灌入最大的電流;每個較低位元透過加倍的電阻,貢獻恰好一半。運算放大器把這一切相加,再把總電流轉成輸出電壓。這就是整個 二進位加權 DAC

算式乾淨地掉出來。以一個帶回授電阻 Rf 的 4 位元版本,輸出為 Vout = -(Rf times Vref / R) times (b3 + b2/2 + b1/4 + b0/8),其中每個 b 是 0 或 1。每個位元的份量恰好是它上一位的一半——這正是二進位位值的定義——於是各碼以平整的 LSB 階距,從零一路走到滿刻度。它直接、它快(撥一下開關,電流就在那兒了),對 4 到 6 個位元而言完全堪用。

但讓它優雅的二進位加權,過了幾個位元也正是它的死因:電阻的跨幅。一個 8 位元 DAC 需要從 R 到 128R 的值——128 比 1 的範圍;12 位元則需要 2048 比 1。要讓連 LSB 都誠實到半階以內,最大的電阻必須與最小的匹配到約 0.4% 以內——而要把比方說一顆 1.28 MΩ 與一顆 10 kΩ 匹配得那麼緊、還要扛得住溫度變化,基本上做不出來。你能買到的單顆電阻容差沒問題;但你需要的「橫跨上千倍跨幅」的容差,就是辦不到。正是這一個問題,逼出了一種更聰明的階梯。

R-2R 階梯:只用兩種值就換來精準

解法很美:整個轉換器只用兩種電阻值搭成,R 與 2R。R-2R 階梯是一個自相似網路,電流在每一個節點恰好對分,於是接連的位元拿到 I/2、I/4、I/8……的電流——完美的二進位加權——而用到的只是同樣那兩種電阻的複本。而且唯一必須精準的,是那個 2 比 1 的比值。若你把每個 2R 做成兩顆 R 串聯,晶片上每顆電阻都一模一樣、漂移也一模一樣,而一個精準的比值,遠比一個精準的 2000 比 1 跨幅好做太多了。

R-2R LADDER DAC   (4-bit, current-steering;  MSB = b3 at the Vref end)

  Vref
    |
    A---[R]---B---[R]---C---[R]---D---[2R]---GND     (R rail on top, 2R end-stop)
    |         |         |         |
   [2R]      [2R]      [2R]      [2R]
    |         |         |         |
   sw3       sw2       sw1       sw0      each switch:  0 -> GND ,  1 -> IOUT
    \_________\_________\_________/
                  IOUT --> op-amp summing node, held at 0 V (virtual ground)

  Both rails sit at 0 V, so the ladder current is FIXED by Vref; the
  code only steers each leg toward GND or toward the summing node.
  Looking right from any node you see 2R, and its own leg is 2R, so the
  current halves at every node:
     b3 = I/2 ,  b2 = I/4 ,  b1 = I/8 ,  b0 = I/16     (binary weights)
一個 R-2R 階梯。上方軌道是串聯的 R;每個節點垂下一條 2R 的腿接到開關;遠端用單一個 2R 收尾。正是那個收尾電阻,讓每個節點在兩個方向都看到 2R,於是電流在每一步恰好對分。

為什麼對分得這麼完美?用戴維寧的眼光看。從最遠的節點開始:接地的 2R 收尾電阻與該節點自己的 2R 腿都通往 0 V,於是從下一個節點往右看,你看到串聯的 R 加上(2R 並聯 2R = R)= 2R。往左挪一個節點,同樣的事重演——由自相似性,每個節點往前看恰好是 2R、往自己的腿往下看也是 2R。兩個相等的電阻把進來的電流均分,於是每條腿帶走「流進它節點的電流」的一半:I/2、再 I/4、再 I/8,這串二進位級聯,純粹從幾何裡掉出來。

開關裡還藏著一個額外的獎賞。每條腿的開關,把它的電流送到接地或運算放大器的虛接地加總節點——而這兩處都坐在 0 V。所以撥動一個位元,從不改變階梯裡電流的;它只改變電流的去向。無論碼是多少,階梯的總電流都穩如磐石,這讓轉換器又快、又大幅降低了你本來會遇到的切換突波。這個組合——只有兩種電阻值、又有與碼無關的電流——正是為什麼市面上幾乎每一個精密電阻網路 DAC,內裡都是一個 R-2R。

參考電壓、開關,與會咬人的規格

一個 DAC 的滿刻度,完全由它的參考電壓決定——輸出是比例式的,等於 (碼 / 2^n) times Vref。這是把雙刃刀:DAC 裡沒有任何東西比它的參考更準,而 Vref 上的任何雜訊或溫度漂移,都會原封不動地按比例落到每一個碼上。一個解析 4096 個位階的 12 位元轉換器,配得上一個穩定、低雜訊的能隙參考,而不是隨手從電源軌上接一根線——把吵雜的 5 V 邏輯電源當參考餵進去,你在階梯還沒輪到上場之前,就已經把低位元給扔掉了。

開關也不是理想的。真實的位元開關是 MOSFET 類比開關,帶著自己的導通電阻,它與每條 2R 腿串聯相加、把那條腿的份量推偏。好的 DAC 會把這修掉,或調整開關尺寸、讓電流大的腿配上更胖、電阻更低的開關——而 R-2R 的定電流把戲又幫上忙,因為無論碼是多少,每個開關都永遠橫跨同一個 0 V 工作。這正是模擬會漏掉的那種細節:一個理想開關的 SPICE 模型會給你一條完美的轉移曲線,而真實的矽片永遠交不出那條曲線。

有兩個規格,決定一個 DAC 誠不誠實。微分非線性(DNL)衡量每一個單一階距偏離理想一個 LSB 有多遠;積分非線性(INL)衡量整條曲線偏離一直線的最糟彎折。DNL 是會咬人的:若任一階距的 DNL 比 -1 LSB 還糟,碼往上走時輸出竟會往下——這個 DAC 就是非單調的,可能搞垮一個信任它會朝對的方向動的回授迴路。危險地帶是主進位轉換(0111…變成 1000…),最大那條腿切入、同時一群較小的腿切出;那裡的時序失配會甩出一個突波,得由建立時間與去突波電路去吸收。

從階梯到平滑:重建與實際使用

DAC 不畫平滑曲線——它畫階梯。每個碼都被保持平直,直到下一個樣本抵達(一個零階保持),而那塊狀的波形充滿了坐在你真實訊號上方的高頻鏡像,正是第 1、2 篇混疊問題的鏡像。所以一個 DAC 的輸出,必須跟一個低通重建濾波器,把那些階梯平滑、把那些鏡像抹去,正如抗混疊濾波器守在 ADC 的輸入端。(保持本身也會把高頻端輕輕往下扳——sinc 下垂——細心的設計會預先補償它。)一如既往,你必須以「想重現的最高頻率的兩倍以上」去更新,否則奈奎斯特會討回沒有任何濾波器補得回來的債。

有時你甚至不需要一顆專用的 DAC 晶片。一隻用 PWM 切換、再經低通濾波的微控制器接腳,就是個窮人的 1 位元 DAC:占空比定下平均電壓,而同一個重建濾波器把脈衝串平滑成一個位階。它對 LED 亮度或一個慢速控制電壓真的很有用,但要對取捨誠實——解析度與速度互相拉扯(更多位元意味著更慢的更新率、或更高的時脈),而留下的漣波就是取巧的代價。一旦你需要乾淨的音訊、或許多又快又準的位元,一顆真正的 R-2R 或 sigma-delta DAC 立刻賺回它的身價。

  1. 挑解析度與參考電壓,使一個 LSB 比你在意的最小階距還細:所需 LSB = 滿刻度 / 2^n,所以在 4.096 V 跨幅上要 1 mV 的 LSB,就需要配 4.096 V 參考的 12 位元。
  2. 接好數位匯流排(串列 DAC 用 SPI 或 I2C),並用一顆就貼在晶片旁的電容對電源腳與參考腳都去耦——尤其參考電壓必須安靜。
  3. 寫入碼字;類比輸出便以 code / 2^n times Vref 出現。在信任整條曲線之前,先用萬用表在幾個碼(零、中、滿)量一量做合理性檢查。
  4. 加上重建低通,把轉角放在訊號頻帶附近(遠低於更新率的一半),以平滑階梯波;若負載會抽取實際電流,就用一個運算放大器隨耦器緩衝它。

退一步,整幅圖就完整了。一個 DAC 把數字變成電壓;二進位加權的形式以加法放大器把這件事說得明白,卻淹死在電阻跨幅裡,而 R-2R 階梯用兩種值與一個自我對分的電流救了它。一個乾淨的參考定下尺度,開關與 INL/DNL 定下誠實,而一個重建濾波器把階梯波變回訊號。又因為這同一塊積木正是 SAR 轉換器的核心,你其實已經蓋好了 ADC 的一半——而那正是第 5 篇接手的地方。