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

收斂、陷阱,以及該不該相信結果

前四篇讓你的虛擬麵包板跑了起來——網表與節點、幾種核心分析,以及餵養它們的模型。最後這一篇掀開引擎蓋:為什麼模擬有時根本不肯啟動、如何哄一個倔強的模擬乖乖收斂,以及那門誠實的手藝——知道什麼時候該相信那張漂亮的圖、什麼時候該放下滑鼠、拿起烙鐵。

掀開引擎蓋:SPICE 到底怎麼解你的電路

在第 2 篇你學到,一張網表不過是一份元件清單,以及它們所連接的節點。這裡就是 SPICE 拿它來做什麼。在每一個節點上,它寫下 克希荷夫電流定律——那條樸實的記帳規則:流進一個節點的所有電流,必須全部再流出去——這就把你整個電路變成一大組聯立方程式,一個節點一條。這正是你兩階之前在一個三電阻電路上親手做過的節點分析,只是改由機器一次在成千上萬個節點上做。解那組方程式是一次矩陣運算,而參考節點 0 就是讓每個電壓都有個基準可以量。

如果你的電路只有電阻與電源,那些方程式會是線性的,SPICE 一擊就能乾淨地破解。但只要一顆二極體或一顆電晶體加進來,方程式就彎了——第 4 篇那條指數型的二極體電流-電壓曲線、以及電晶體那條彎折的特性曲線都是非線性的,它們沒有一步到位的公式。於是 SPICE 做你會做的事:猜一個答案、代進去、看帳到底差得多離譜、把猜測推一下、再試一次。那一再地推,就是 牛頓–拉夫森疊代,而 收斂 就是那個快樂的時刻——前後兩次猜測一致到只差一個微小容差、不再移動了。一個解出來的工作點,不過就是一個終於站定不動的猜測。

當直流坐不住:工作點的麻煩

幾乎每一種分析都從找出直流工作點開始,而那正是最多失敗藏身之處——因為它是一次純粹的冷啟動非線性求解,沒有任何溫和的斜坡讓求解器慢慢進入。SPICE 免費替你抓到、最常見的一個錯,就是 浮接節點:一個對完全沒有直流路徑的節點。一個電容耦合、上頭再沒接別的東西的輸入;一個懸空的運算放大器輸出;一個沒有偏壓電阻的電晶體基極;或者單純忘了把節點 0 接上——任何一個,都會留下一個方程式釘不住的電壓,於是 SPICE 報出『奇異矩陣(singular matrix)』。那個錯誤是個禮物:它在幾秒內、零烙鐵成本地,替你找出了一個真實的接線錯誤。

當網表本身沒問題、求解器卻還是放棄時,你就哄它。三招經典的輔助幾乎包辦了全部工作。gmin 步進 悄悄在每個節點到地之間掛上一個極小的電導,讓矩陣永遠不會奇異,先解那個容易的版本,再把電導剝掉。電源步進 把你的電源從零慢慢升上來,讓解從那個瑣碎的全零狀態平順地漂移到真正的解。而一個手動給的提示——一條 `.nodeset` 或 `.ic`,告訴 SPICE 某個節點電壓大概該是多少——則交給求解器一個靠近答案的立足點,讓它的第一次猜測不會錯得離譜。這些通通不改變你的電路;它們只改變搜尋從哪裡開始。

  1. 讀那個錯誤、以及它點名的節點。SPICE 通常會印出惹禍的節點編號;在動任何東西之前,先順著網表把它追回去。
  2. 找出浮接節點。每個節點都有對地的直流路徑嗎?一個只碰到電容極板、卻沒碰到任何電阻性東西的節點,是常見的元兇;在那裡加一個大電阻(比方 1 Mohm 到 1 Gohm)接地。
  3. 確認節點 0 存在而且接上了。參考節點不是選配的;少了它,整個矩陣就沒有東西可以倚靠。
  4. 把收斂輔助打開。啟用 gmin 步進與電源步進,然後重跑。大多數倔強的直流求解,就在這一步投降了。
  5. 如果還是失敗,給它種子。在你預期答案附近加一條 .nodeset 或 .ic,並且在怪罪模擬器之前,先懷疑是某個糟糕、或過度理想化的元件模型。

當暫態卡住:時間步長

一次暫態分析在時間裡一小片一小片地往前走,每一片都重新把整個工作點解一遍。那片的寬度就是 時間步長,而 SPICE 會自適應地調整它的大小:在一道快速邊緣前把步長縮小、小心翼翼地爬過去,然後在平靜的段落再把它拉長、大步跨越以省力。那個令人聞之色變的『timestep too small(時間步長過小)』錯誤,意思是求解器為了跟上某個事件而不斷把步長縮小,直到步長塌縮到趨近於零、它只好兩手一攤。它是直流不收斂的暫態表親:撞牆的是數學,不是你的設計。

常見的原因是一個不可能那麼乾淨的理想:一個上升時間為零的電壓源邊緣、一個字面上零電阻的迴路、或一個帶著求解器跟不上的尖銳轉折的模型。解法很討喜,因為它讓模擬同時變得更開心、也更誠實——把那些反正本來就存在的真實 寄生效應 加進去。幾皮法的雜散電容、幾奈亨的引線電感、一個小小的串聯電阻:這些把不可能的尖角磨圓,讓步長有個有限的東西可以追,也把你那張理想化的電路圖往真實板子又推近了一點。把相對容差(`reltol`)稍微放寬一點也能幫上忙,雖然那是拿一絲準確度去換一次解圍。

  SYMPTOM (what SPICE says)        LIKELY CAUSE              FIRST THING TO TRY
  -----------------------------------------------------------------------------
  "singular matrix"               a node with no DC path    add a big R (1e9) to
                                  to ground (floating)      ground; check node 0
  -----------------------------------------------------------------------------
  "no convergence in DC           hard nonlinearity, a      enable gmin stepping +
   operating point"               bad starting guess        source stepping; give
                                                            a .nodeset / .ic hint
  -----------------------------------------------------------------------------
  "timestep too small" /          an ideal infinitely-      add real parasitics:
   transient stalls               fast edge or a glitchy    a few pF / nH, a small
                                  model                     series R; relax reltol
  -----------------------------------------------------------------------------
  it runs, but the result is      wrong model, or a too-    tighten reltol; re-check
   subtly, plausibly wrong        loose tolerance           the model & the op point
一張給不肯乖乖跑的模擬的急救表。前三列讀作『求解器迷路了』——幾乎總能靠一條對地路徑、那些收斂輔助、或撒上一點寄生效應治好。最底下那一列才是陰險的:它跑得好好的,卻還是騙了你。

收斂,不等於正確

這是整個階梯裡最深的陷阱,而且它和當機正好相反。一個跑得乾乾淨淨、畫出一條平滑而自信曲線的模擬,感覺起來很權威——但收斂只證明了數學自洽,從不證明它符合現實。垃圾進、垃圾出:一個錯的模型、一個把 10 kohm 打成 10 ohm 的筆誤、或一個寬鬆到讓求解器隨便交差的容差,全都會生出一張漂亮、卻徹頭徹尾錯誤的圖。結果越平滑、越好看,你就越要小心,正是因為它在邀請你信任它。

一個結果,也不過是骰子的一次擲出。一個在你打進去的標稱值下能動的電路,一旦真實的容差與溫度離散登場,可能就垮了。這正是前面那些入門層級分析的用途:一次參數掃描讓某個值走過它的範圍,顯示結果怎麼彎;而一次蒙地卡羅分析則讓每個元件在它的容差內隨機擲上幾百次,揭露你的設計到底有著舒服的餘裕、還是平衡在刀尖上。信任一個結果,意味著問的不只是『它能動嗎?』,而是『當每樣東西都偏了一點點,它還能動嗎?』

模擬看不見什麼——以及為什麼你還是要動手做

現在來到替整個階梯收尾的那個誠實極限:SPICE 看見的是你的網表,不是你的板子。它完全不知道你把一個零件擺在哪、一條走線有多長、或你畫出來的電流迴路有多大,所以它對那些會毀掉真實高速與高精度電路的東西視而不見——走線電感、地彈、會輻射的迴路面積、相鄰之間的串擾,以及一塊麵包板那悄悄毀掉高速或高阻抗設計的雜散電容。在一塊真實的 PCB 上,佈線本身就是一個電路元件,而那個元件,在你模擬的那張電路圖裡根本不存在。

而一個模擬,永遠只能好到它的模型那麼好。你在第 4 篇信任的那個原廠 SPICE 模型,可能略去了溫度漂移、老化、封裝寄生、或正是你在意的那個角點;一個通用的內建模型是個有用的漫畫像,不是真正的零件。所以 SPICE 賺到它的價值,不是當一個神諭,而是當一個便宜又快速的低級錯誤捕手:它會在幾秒內告訴你,你忘了接地、把電晶體偏到了錯的區域、或做了一個差了一個八度的濾波器——那些在實體電路上很貴才找得到的錯誤——遠在你花一整個下午烙錫之前。

這正是為什麼電子學這門藝術是一個迴圈,而不是一個按鈕。你設計、你用模擬抓出那些便宜的低級錯誤、你做一個原型,然後你量測——一手拿著三用電表、另一手拿著示波器探棒——去抓出所有模擬看不見的東西。實體電路會嚇你一跳,而那個驚嚇是數據,不是失敗:它正是 SPICE 漏掉的那份佈線、寄生與模型的現實。那位既模擬、又動手做、又量測,並讓三者互相校正的工程師,就是那位電路能在凌亂真實世界裡運作的人。模擬是一份了不起的初稿。它從來都不是那本出版的書。