為什麼類比世界由回授說了算
先說一個關於類比元件的難堪真相:它們糟透了。一個裸的共源級,今天增益可能是 40,明天就變成 80,會隨溫度、電源電壓、以及矽晶片出 fab 時那場隨機抽獎而漂移。單個電晶體的本徵增益 gm*ro 很大,卻極不精確。如果你只想著挑一個『增益差不多對』的電晶體來搭精密放大器,必敗無疑——你實際拿到的增益會上下浮動到兩倍之多。
負回授就是那條逃生通道。一句話概括它的思路:測量自己的輸出,拿它跟你想要的值比一比,再把誤差回授回去自我糾正。把電晶體的裸增益拉到要多高有多高——鬆垮也好、漂移也罷、隨它去——然後在它外面套一個迴路,這個迴路不停地說『你有點偏高,退一點』或『你有點偏低,再使勁』。令人驚嘆的回報是:閉迴路行為不再依賴那個糟糕的電晶體,而幾乎完全取決於兩個電阻的比值(或電容比值)——這些元件你*能夠*在晶片上匹配到零點幾個百分點的精度。
可以把它想成開車。引擎(裸增益)動力強勁卻很粗糙——你絕不會把油門固定在某個精確位置,然後就信任汽車自己保持在車道裡。相反,你會*盯著車道*,不停地微調方向盤。你的眼睛就是回授。汽車的精準不是來自一台完美的引擎,而是來自套在一台不完美引擎外面的糾正迴路。負回授對電壓和電流做的正是這件事。
負回授與迴路增益
我們給各個部件起個名字。把放大器裸的開迴路增益叫做 A(很大——也許 10,000 或 100,000)。輸出的一部分 beta 被回授回去,並從輸入中減掉。乘積 **T = A*beta 是整個迴路裡最重要的一個數字;我們稱之為迴路增益**。直觀地說,它就是*迴路自我糾正的力道有多猛*——那句『你跑偏了,快修正』的喊話,比起引發它的誤差,到底響了多少倍。
A_closed = A / (1 + A*beta) ; when loop gain T = A*beta >> 1: A_closed ~= 1 / beta
盯著這個結果多看幾眼,因為它就是全部的要害。當 **T = A*beta 很大時,閉迴路增益就簡單地變成 1/beta。那個反覆無常的 A 消失了。如果 beta 是由兩個匹配電阻構成的分壓器,那麼你放大器的增益此刻就是一個電阻比值——穩定到零點幾個百分點,A 翻倍還是減半都無所謂。我們沒有把 A 做好;我們是讓電路不在乎** A。
迴路增益還告訴你這個近似到底*有多準*。閉迴路增益並不正好等於 1/beta——它會差出大約 1/T 的相對誤差。所以迴路增益為 1,000(60 dB)時,大致能給你 0.1% 的增益精度;迴路增益為 100 時,約為 1%。迴路增益越大,意味著精度越高、線性越好、對各種擾動的抑制也越強。這就是為什麼類比設計師對增益永遠飢渴:每一分貝迴路增益,都是存進銀行的精度。
代價:穩定性
假如回授是免費的,那每個放大器都能有無窮大的迴路增益,咱們就可以收工回家了。問題出在時間上。『把輸出回授回輸入』這句話,悄悄假設了輸出會*瞬間*響應。可它並不會。每一級都有需要時間去充電的電容,所以回授回來的信號總會晚到一點——既有延遲,相位也被移動了。
一點小延遲沒什麼害處。但接下來是噩夢場景。負回授之所以管用,是因為回授回來的信號反相 180 度——它做減法、它對抗、它糾正。現在假設在某個頻率上,電路自身的種種延遲又額外攢出了 180 度相移。把這一份加到原本有意為之的 180 度上,就得到 360 度——而 360 度跟 0 度是一回事。你的負回授悄無聲息地變成了正回授。此刻那個『糾正』不再對抗誤差,反而在助長誤差。
所以回授的代價,是不穩定這把始終懸著的劍。你為了精度而堆上去的迴路增益越多、為了那份增益而級聯的級數越多,累積的相移就越大——你也就越靠近那道 360 度的懸崖。接下來要講的補償之道,正是在盡量保住更多迴路增益的同時,讓自己穩穩退在懸崖邊之外的藝術。精度與穩定性彼此向相反方向拉扯;設計,就是在二者之間談成的那紙停戰協議。
極點與相位裕度
要管好穩定性,我們得把『在哪個頻率、有多少相移』這件事說具體。信號路徑裡每一個 RC 時間常數都會產生一個極點:在這個頻率以上,增益以每十倍頻程 20 dB 的速率滾降,信號也開始累積相位滯後,每個極點漸近地貢獻 90 度。單獨一個極點最多只能讓你損失 90 度——它自己是安全的。麻煩從*第二個*極點的相位滯後疊加到第一個之上時開始,把總相移一步步推向那致命的額外 180 度。
衡量你這道安全緩衝的乾淨辦法,是 [[phase-margin|相位裕度]]。先找到迴路增益 |T| 正好掉到 1(0 dB) 的那個頻率——這就是交越頻率或單位增益頻率,是迴路還能維持信號的最後一個頻率。然後讀出迴路在這個頻率上有多少相移。相位裕度就是你在撞上 180 度之前還剩多少度相位:
phase_margin = 180 deg + angle(T) evaluated at the frequency where |T| = 1 ; PM >= 60 deg -> smooth, well-damped, no ringing (the design target) ; PM ~ 45 deg -> acceptable, mild overshoot/ringing ; PM -> 0 deg -> on the verge of oscillation
對這個數字的直覺:相位裕度就是你這個回授迴路的阻尼,跟汽車的減震器一模一樣。相位裕度大(60 度及以上)就是阻尼充足——拿一個階躍去打它,輸出會乾淨俐落地升到目標值。相位裕度寒酸(低於 45 度)就是欠阻尼——輸出會過衝並振鈴,在目標值上下來回彈跳幾下才安定下來,就像減震器磨壞了的車壓過一個坎。零相位裕度意味著完全沒有阻尼:它會永遠振鈴下去。那就是一台振盪器。
頻率補償
於是你測了自己的迴路,相位裕度是嚇人的 20 度——它振鈴,甚至直接振盪。解藥是 [[frequency-compensation|頻率補償]]:刻意重新塑造迴路的增益-頻率曲線,讓 |T| *在你還剩有舒服的相位餘量時*就穿過 1。你並沒有在增加正確性;你是在贖回穩定性,而且通常要拿一些頻寬去換。
最常用的主力技術是主極點補償(dominant-pole compensation)。訣竅在於:挑出一個極點,故意把它的頻率推得*很低*——低到光靠這一個極點,增益就已經一路滾降到 1,趕在其他那些更快的極點有機會添上各自的相位滯後*之前*。如果在交越頻率處只有一個極點在起作用,那麼最壞情況的相位滯後也不過 90 度,留給你一份闊氣的約 90 度相位裕度。你拿頻寬(迴路如今變慢了)換來了堅如磐石的穩定性。
在晶片上,製造那個主極點的優雅辦法是米勒效應(Miller effect)。把一個小小的補償電容 Cc 跨接在一個高增益反相級兩端,從輸入端看過去,這一級自身的增益會把電容的等效大小*放大*約 (1 + 增益) 倍。一個區區 2 pF 的電容就能表現得像幾百 pF,把主極點大幅往下拽,卻幾乎不佔晶片面積。額外的好處是,米勒補償還會劈開極點(splits the poles)——它把主極點往下拉的*同時*,把次極點往上推,拓寬了二者之間的安全間隔。這就是為什麼你日後碰到的幾乎每一個兩級 op-amp 裡頭,都藏著一個米勒電容。
.ac dec 100 1 1G ; sweep frequency, plot loop gain & phase ; read GBW (where |T| crosses 0 dB) and the phase there: GBW ~= gm1 / (2*pi*Cc) ; bigger Cc -> lower GBW, more phase margin
轉動率:大信號下的極限
到目前為止的一切——極點、相位裕度、GBW——都活在小信號的世界裡,在那裡我們假設放大器表現得是線性的,擺動幅度很小。但只要你讓一個 op-amp 去做一次*大幅度*的快速跳變,一個截然不同、毫不留情的極限就會接管:[[slew-rate|轉動率]],也就是輸出電壓所能變化的最大速率,單位是伏每微秒。
它的成因簡單得讓人愉快,而且很物理。要讓輸出動起來,放大器必須給那個補償電容 Cc 充電或放電,而它能用來幹這件事的,只有輸入級所能提供的那點有限的尾電流。當輸入階躍很大時,輸入差動對會把它全部的尾電流一股腦灌進 Cc——它滿負荷、完全偏向一側、再也不待在自己那溫柔的線性區裡了。於是輸出以一個恆定速率爬升,這個速率由『可用電流除以電容』決定:
slew_rate = I_tail / Cc ; volts per second, large-signal limit ; small-signal speed (different beast): GBW = gm / (2*pi*Cc), gm = 2*I_d / V_ov ; -> SR = (I_tail / Cc) is set by CURRENT; ; GBW is set by gm. You can have great GBW and lousy slew rate.
這裡有個能讓人少踩坑的心智模型:頻寬是你對一句耳語能反應多快;轉動率是你對一聲大喊能反應多快。一隻擴音喇叭也許能忠實重現一段輕聲細語(小信號頻寬很好),卻會把一聲突如其來的大喊徹底搞糊,因為它沒法那麼快地推動空氣(受轉動率限制)。在轉動過程中,放大器*根本不是*一個線性系統——回授實際上變成了開迴路,直到輸出追上為止,而你精心設計的那條乾淨的指數建立曲線,會退化成一條難看的直線斜坡。