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

元件模型,以及它們為何重要

網表替零件命名、分析把數字算出來——但 SPICE 究竟怎麼知道一個二極體會做什麼?每個元件背後都坐著一個元件模型:方程式加上數字。這篇把那個盒子打開,說明為何親切的 0.7 V 二極體規則是個模型而非定律,並把那條決定一次模擬值不值得信任的真理講透——它頂多只和它的模型一樣好。

元件模型究竟是什麼

到現在,你已經能寫出一張網表,替每個零件命名、把它釘在編了號的節點上,也能呼叫那幾種核心分析——工作點、直流掃描、交流、暫態。但退一步問個顯而易見的問題:當 SPICE 看到一行描述二極體的文字,它怎麼知道二極體會讓電流朝一個方向通過、朝另一個方向阻擋?它並不是憑空知道。那個單一字母背後坐著一個元件模型——一小束方程式,加上餵給它們的數字,精確描述那個零件如何把電壓變成電流、又如何反過來。

每個模型都有兩半,把它們分清楚能消除許多混淆。第一是類型:方程式的形式,這是固定的、內建在 SPICE 裡的——二極體類型用指數形式的 Shockley 方程式,電阻類型用歐姆定律。第二是參數:把那些方程式調校到一個真實零件上的那些具體數字——飽和電流、串聯電阻、電容。這就像一份食譜:做法(打發、拌入、烘烤)是類型;份量(200 克麵粉、3 顆蛋)是參數。同樣的做法,不同的數字,就是一塊不一樣的蛋糕。

二極體:為何 0.7 V 是模型而非定律

在階梯較早的地方,你靠過一條順手的規則:一個導通的矽二極體大約掉 0.7 V,就這樣。SPICE 並沒有把 0.7 這個數字存在任何地方。取而代之,二極體模型用指數律從電壓算出電流:I = Is times (e^(V/(n times VT)) - 1),其中 Is 是飽和電流(一個像幾奈安培那樣的微小數字),VT 是熱電壓(室溫下約 26 mV),n 是一個湊出來的理想因子。那條方程式就是那條著名的曲線——那條先幾乎平坦、然後突然急轉向上的二極體 I-V 曲線。你背下來的 0.7 V,不過是那條曲線在尋常電流下的膝點而已。

* A SPICE diode: the TYPE is fixed (Shockley); the .model card sets the NUMBERS
D1    anode  cathode   D1N4148
.model D1N4148  D(Is=2.5n  N=1.9  Rs=0.6  Cjo=4p  Bv=100  Ibv=100u)

   forward current     forward voltage (this same model, ~25 C)
   ------------------------------------------------------------
   0.1 mA              ~ 0.50 V
   1   mA              ~ 0.61 V
   10  mA              ~ 0.72 V      <-- this is roughly the "0.7 V"
   100 mA              ~ 0.88 V          one snapshot, not a constant
同一個二極體模型,在四個電流下求值。壓降從 0.5 V 滑到將近 0.9 V——而且零件每升溫一度,它還會偏移約 -2 mV。0.7 V 規則只是一條會移動的曲線上的單一個點。

讀一讀那張表,那條規則就不再像定律,而開始像它本來的樣子:一條活生生曲線的單點摘要。順向電壓不是 0.7 V——它是指數式對你實際灌入的電流、你實際所處的溫度所給出的那個值。這正是模型比那個背下來的數字更要緊的深層原因:SPICE 免費給你整條曲線,所以一個從那個壓降決定偏壓的電路,在模擬裡會像在工作台上那樣,正確地隨電流與溫度變動。信任模型;把 0.7 V 當成信封背面的粗估。

原始元件、.model 卡,與廠商的子電路

SPICE 隨附一張簡短的內建原始元件清單——電阻、電容、電感、二極體、雙極性電晶體、MOSFET,以及另外幾個。每一個在網表裡是一個字母(R、C、L、D、Q、M),背後有一張列出它參數的 .model 卡。舉例來說,一張 BJT 卡會把電流增益 beta帶成 BF,再加上 Is 和 Gummel-Poon 方程式裡的數十個其他參數。你幾乎從不會手打這些;你指向一個模型名稱,讓一個程式庫檔案供應那些數字。

但一個真實的運算放大器是一顆晶片上數百個電晶體——你絕不會一個原始元件一個原始元件地去建模它。取而代之,廠商交給你一個子電路(一個 .subckt 區塊):一張封好的小型網路,由原始元件與受控源組成,從它的接腳看過去,它表現得就像那個真實零件——一樣的增益、一樣的輸入失調、一樣的頻寬。這就是廠商 SPICE 模型,你把它當成單一個元件放進去。有些是完整的電晶體級模型(慢但忠實);許多則是更精簡的巨集模型,不去模擬每一個內部元件,而快速地仿出外部行為。

一次模擬,頂多只和它的模型一樣好

這裡有一句該刺在你工作台上的話,也是這整階一再繞回來的那句:SPICE 把數學解得完美無瑕,但它解的是你的模型的數學。餵給它一個錯誤或過度簡化的模型,它就會交還你一個自信、漂亮、錯誤的答案。經典的陷阱是理想運算放大器方塊:它有無限的增益、無限的增益頻寬、沒有迴轉率上限,於是你的暫態圖顯示出一道俐落的方波在兩條電源軌之間瞬間切換——一個真實晶片永遠做不出的輸出。模擬沒有說謊;你只是因為選了一個完美的模型,而問錯了問題。

就算是完美的模型,也對你的電路板一無所知。它看不見你的佈線將會加上的寄生效應——擁擠走線之間的雜散電容、一段長導線的引腳電感、一條細銅道的電阻。所以模擬非常擅長在早期抓住那些便宜、難堪的低級錯誤:比例搞錯的分壓器、被偏壓到截止區的電晶體、接錯正負號的回授迴路。而對於你實體佈線所造成的任何東西,它依設計就是盲的。那不是一個該修正的缺陷——那是你所模擬的、與你必須動手做出並量測的,兩者之間的分界線。

也有令人愉快的另一面。因為模型帶著行為的真實散佈,你能向 SPICE 問出單一個工作台原型一次回答不了的問題。一次蒙地卡羅分析會把每個零件的容差擲幾百次骰子,把整片結果的雲呈現給你——當這個電阻偏高、那個電晶體的 beta 偏低時,設計還過得了關嗎?一次溫度掃描則把同一個電路從 -40 跑到 +85 degC。讓這一切成為可能的,正是模型:它給你的不只是典型的那顆零件,而是一整個家族。

選擇並信任模型——一套簡短的流程

模型的精細度是一個旋鈕,不是一個開關,把每個零件都轉到最大是新手的錯誤——到處都用完整的電晶體級模型,會讓模擬慢如爬行、把它的求解器卡死。功夫在於讓模型配得上問題。要檢查一個偏壓點,簡單模型就綽綽有餘;要預測失真或穩定度餘裕,你會想要廠商真正的那一個。下面是一套清醒的操作順序。

  1. 讓模型配得上問題。粗略的偏壓與直流檢查用簡單的內建模型;只對那些設計真正仰賴其細部行為的零件,才動用完整的廠商模型。
  2. 替關鍵零件取得真實模型。從產品頁下載廠商的 .subckt,讀它的標頭看它涵蓋與不涵蓋什麼,並確認接腳順序與你的網表相符。
  3. 拿手算來做合理性檢查。跑工作點,把它跟信封背面的估算比一比——一個分壓比、一顆 LED 的電阻、一個偏壓電流。若兩者差得離譜,在你信任那張圖之前,先懷疑模型或接線出了錯。
  4. 去考驗整個家族,而不只是那顆典型零件。用蒙地卡羅掃描容差、掃描溫度,好讓一個在紙上過關的設計,在真實元件的散佈範圍內也仍然過關。
  5. 把結果當成一個有力的提示,接著動手做出來並量測。模擬已經抓住了便宜的低級錯誤;工作台會抓住它永遠抓不到的佈線與寄生效應。讓兩者彼此交叉驗證。

抓住那個比每一個工具版本都活得更久的觀念:模型是一種刻意的、有用的簡化,而你的工作就是知道它做了哪些簡化。這個心態會直接帶進本階最後一篇,在那裡,一個正確描述了的電路仍然拒絕收斂——因為即使是完美的模型,也可能交給求解器一團它難以解開的方程式之結。