SPICE?電路仿真原理

(轉)概述

本文主要描述了基本的 SPICE 模擬仿真原理,事實上所有的基于直接矩陣算法的模擬仿真器都采用相同的方法。本文是基于基本的核心算法,而不是仿真器內部真實發生的時序。

電路仿真的三個復雜層次

解決電路仿真的問題可分為以下 3 個層次:

1. 怎樣分析一個只有固定的電流源和線性電阻的電路

2. 已經解決第一個問題后,怎樣處理非線性元件,如二極管、晶體管

3. 已經解決以上兩個問題后,怎樣處理電抗元件,如電容

第一個問題相對來說比較簡單,一個完全線性、并且沒有電抗元件存在的電路,你可以應用基爾霍夫和歐姆定律導出它的方程式,從而計算所有的節點電壓和器件中的電流,由此衍生的兩種分析是節點分析法和網孔分析法。下文將以節點分析法來做介紹。

第二個問題相對難解決一些,因為一些非線性元件不好用數學解析的方法來計算,如以下一個簡單的二極管電路:圖片1.jpg

沒有可以直接計算二極管和電阻間的節點電壓的表達式,盡管你可以導出一個簡單的表達式來計算這個電壓,但是沒有方法去解這個方程。我們能做的是先猜測一個電壓值,再去測試它是否正確,判斷的結果是太大或太小,而不是一個具體的值,并在增大或減小這個猜測值后再次嘗試。這種方法是相當隨意的,因此產生了一種更系統的方法——牛頓迭代法,這種方法可以在每次迭代后簡單有效地估算新的猜測值,并且精度常??梢赃_到 0.1% 左右,因此SPICE 類軟件基本都采用此方法。

第三個問題最難解決,直到目前也只解決了 DC 值,觀察時域仿真結果,此文沒有論及 AC 分析,下文會以電容為例。

節點分析法

要計算 V1 和 V2,根據基爾霍夫電流定

律:I?1+(V2-V1)/R1=0   I2+(V1-V2)/R1+(0-V2)/R2=0

解此方程組可得:V1=1.2,V2=0.2

盡管這只是個簡單的例子,過程大致都是、以上面的二極管電路為例,25℃下二極管的動態電阻近似等于 25.8/id,id 是二極管電流(單位 mA),這里用一個電阻作為二極管的小信號模型,再考慮 DC 偏置,這里再添加一個固定的電流源,并聯在電阻兩端:一樣的,可以應用于任何電流源和電阻的電路。

圖片2.jpg仿真軟件建立以上等式而采用的程序稍微有點不同,但最后的方程

是一樣的,只是表達上有所區別。

如何處理非線性元件

上文提到采用牛頓迭代法來解決包含非線性元件的電路,非線性元件在一個小的范圍內可以當作是線性的,相當于半導體器件的小信號模型的處理。例如一個雙極型晶體管的小信號模型:但是這種模型沒有偏置條件,不能用于 DC 分析,這里添加一個 DC 電流源并聯在 rpi 兩端,一個 DC 電流項到集電極,作為偏置條件:這個模型是線性的,用節點分析法就可以計算,但是這種線性只在很小的范圍內才成立,因此不能直接給出正確的結果,盡管如此這種模型可以提供一個比初始的猜測值更好的結果,具體的

步驟:

1. 先給非線性元件的端電壓指定一個初始的猜測值 ;

2. 根據端電壓計算每個非線性元件修正后的小信號模型,例如上面的 BJT,先根據集電極電流和增益計算 rpi 和 gm,進而計算 Ib 和 Ic 的值 ;

3. 由節點分析法構建算式方程組 ;

4. 由此方程組計算出新的端電壓值,從第 2 步開始重新計算 ;

5. 重復計算此過程,直到得到一個足夠精確的結果(通過連續的迭代對比結果來測量精度),每個返回的節點電壓的值越來越接近之前一次迭代的值,說明已收斂。當連續迭代的值之差小于一個確定的公差,認為此過程完成。

3.png

以上面的二極管電路為例,25℃下二極管的動態電阻近似等于 25.8/id,id 是二極管電流(單位 mA),這里用一個電阻作為二極管的小信號模型,再考慮 DC 偏置,這里再添加一個固定的電流源,并聯在電阻兩端現在這個電路就可以用節點分析法來計算了,我們會得到一個新的二 極 管 電 壓 ,雖 然 未 必 是 正 確 的 結 果 ,但 比 初 始 的 猜 測 值 要 更 接 近 了 ,

重復此步驟最后就會在需要的地方收斂。圖片3.jpg圖片4.jpg

二 極 管 電 壓 Vd 的 初 始 猜 測 值 是 0 . 7 , I d 是 由 Vd 計 算 得 到 的 電 流值,ieq 是等效電流,也就是并聯于 Rd 兩端的電流源的值,用于維持二極管最初的電壓降和電流的,ieq=Id-Vd/Rd,最后一列是新的電壓值,并作為下次迭代計算的起始值,最后在 10 次迭代后得到的最終結果 0.75021 已精確到 5 個有效數字。

怎樣計算二極管的電流

Id=Is×[e(Vd/V T)-1],V T=q/KT=25.8mV@25℃,Is 是一個模型參數,典型值為 1e-15。

一般來說,所有的 SPICE 器件模型都需要能根據其端電壓計算 pin腳電流和動態電阻的方法。

電抗元件

接下來我們來看下 SPICE 怎樣處理電容的,電感等其他器件的處理基本是相同的。

注意:這里描述的是在時域分析時 SPICE 怎樣處理電容等,AC 分析時電容是被當做電阻的(但是有一個復雜的值),在時域分析里如何處理電容是更為困難的問題。

以下圖為例:

已知 t=0 時 C1:

1. 電容大小 =C

2. 電容電流 =i0

3. 電容電壓 =v0

假設 t=0 時電流是恒定的:

i0 ≈ C(v1-v0)/Δt v1 ≈ v0+i0*Δt/C

v1 是 t=Δt 時的電壓值。

圖片5.jpg

用一個大小等于 v1 的電壓源替代電容后:在每個時間步長后重新計算電壓源,只要 Δt 足夠小,此方法的 精 度 就是足夠的,但是有一個本質的缺陷使其在電路仿真中幾 乎 毫 無 用 處 , 要 理 解 這 個缺陷,先考慮當電容電壓為 4.999V 時的情況,此時電容已完全充滿,不再需要小的時間步長來仿真,如果此時我

們設定仿真步長 timestep 為 1ms:v1=4.999+i0x1e-3/1e-9。i0=5-4.999/1000=1e-6

v1=5.999

顯然結果并不是一個有用的值,我們這里假定電流在 1ms 的時間內保持為 1uA,但事實并不是這樣的,實際上在此期間電容的電流會呈指數形式的衰減至接近為 0。這就意味著盡管電容事實上已經穩定了,仿真器仍然需要小的時間步長來保持它的電壓穩定,在數學術語里就是指此方法沒有剛性穩定,這種方法稱為前向歐拉積分法。SPICE 并沒有采用此方法,這里簡單介紹一下它可以幫助理解為何 SPICE 采用其他更復雜的方法來處理,其中最簡單的就是后向歐拉積分法。

我們知道 i0 ≈ C(v1-v0)/Δt,  i1 ≈ C(v1-v0)/Δti1 并不是已知的,不能直接得到 v1 的表達式,意味著不能將電容。當作一個固定的電壓源來處理,而用一個電流源并聯一個電阻來替代電容:Δt 時 :i1=v1/req+ieq

i1 ≈ v1xC/Δt-v0*C/Δt  當 1/req=C/Δt,ieq= ﹣ v0*C/Δt 時,兩個方程等效。

因此我們可以用阻值為 Δt/C 的電阻并聯電流為﹣ v0*C/Δt 的電流源來替代電容。

這就是后向歐拉法,再對比之前提到的當電容電壓為 4.999V,time  step 為1ms 時的情況:req=Δt/C=1e-3/1e-9=1e6。ieq= ﹣ v0*C/Δt= ﹣ 4.999x1e-9/1e-3= ﹣ 4.999e-6

因此計算的 v1 值為 4.999999001,精度很高,是剛性穩定的。SPICE 一般是在第一個時間點和之后的每個斷點時使用此方法處理,發生在波形的轉折點處,如脈沖的起始處。默認設置下,SPICE 通常采用另一種方法:梯形法則,也是剛性穩定的,同時具有更高的精度。

TRAPEZOIDAL  RULE

i0 ≈ C(v1-v0)/Δt

i1 ≈ C(v1-v0)/Δt

等式里 t0 和 t1 時刻的電流是用 t0 和 t1 時刻的電壓來近似計算的,如果用 t0 和 t1 時刻的電流平均值來計算表達式 C(v1-v0)/Δt 會得到一個更為精確的值:

(i0+i1)/2=C(v1-v0)/Δt

i1=2Cv1/Δt-2Cv0/Δt-i0

因此:

req=Δt/2C

ieq=-2Cv0/Δt-i0

這就是梯形法則或梯形積分法,SPICE 大部分情況下都是采用此方法。

結果對比

下圖是分別采用這兩種方法得到的結果對比,另一條是理論計算結果,時間步長設為固定的 500ns。由此可以看出梯形法則比后向歐拉法更為精確。

圖片6.jpg

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

4
2
1