以 SPICE 進行電路模擬
收斂
在幕後,SPICE 並不是一步乾淨俐落地解出電路。對任何含二極體或電晶體的東西,方程式都是非線性的,所以它先猜一個答案、檢查錯得多離譜、改進這個猜測、再重複,期望猜測逐步逼近真正的解。收斂就是那個圓滿的結局:猜測安定下來,SPICE 找到一個穩定的答案。不收斂則是它們始終不安定,模擬因而失敗。
這方法稱為牛頓-拉弗森迭代:SPICE 從一組試探的節點電壓出發,算出各電流,看克希荷夫定律被違反了多少,再把電壓推一下以縮小誤差,如此循環,直到每步的變化小於某個容差。它通常就是會成功。但一個尖銳的非線性(理想開關瞬間切上)、一個沒有電阻路徑通往接地的電路,或一個離譜的起始猜測,都可能讓迭代振盪或發散,於是你會看到 singular matrix(奇異矩陣)、timestep too small(時間步太小)或 failed to converge(無法收斂)。
懂得如何哄一個頑固的模擬,是一項真本事。常見的解法:加一顆極小的串聯電阻,讓沒有任何節點是完全孤立的;給出合理的初始條件;軟化一個理想化的模型;或稍微放寬容差。收斂失敗未必是 SPICE 的臭蟲,有時是電路本身的真實缺陷(浮接節點、閂鎖),模擬器卡住是對的,所以在怪罪工具之前,先讀懂訊息。
一個在開關翻轉的瞬間以 timestep too small 死掉的暫態,往往只要加一顆小串聯電阻或一個緩衝器(snubber)就會收斂,因為這給了求解器一個較溫和、較真實的邊緣去跟隨,而非一個不可能的瞬間跳變。
迭代求解器安定到一個穩定答案,以及在它不肯時幫它一把的技藝。
不收斂的模擬有時是在說實話,電路本身可能定義不良(浮接節點、閂鎖)。在認定求解器只是在挑剔之前,先讀懂錯誤訊息。
又称
另见