Saber電源模擬—step by step
電路模擬作為電路計算的必要補充和論證手段,在工程應用中起著越來越重要的作用。熟練地使用模擬工具,在設計的起始階段就能夠發現方案設計和引數計算的重大錯誤,在產品開發過程中,輔之以精確的建模和模擬,可以替代大量的實際除錯工作,節約可觀的人力和物力投入,極大的提高開發效率。
Saber模擬軟體是一個功能非常強大的電路模擬軟體,尤其適合應用在開關電源領域的時域和頻域模擬。但由於國內的學術機構和公司不太重視模擬應用,所以相關的研究較少,沒有形成系統化的文件體系,這給想學習模擬軟體應用的工程師造成了許多的困擾,始終在門外徘徊而不得入。
例項
下面僅以簡單的例項,介紹一下saber的基本應用,供初學者參考。
在saber安裝完成之後,點選進入saber sketch,然後選擇file—> new—>schematic,進入原理圖繪製畫面,如下圖所示:
在進入原理圖繪製介面之後,可以按照我們自己的需要來繪製電路原理圖。首先,我們來繪製一個簡單的三極體共發射極電路。
第一步,新增元器件,在空白處點選滑鼠右鍵選單get part—>part gallery
有兩個選擇器件的方法,上面的左圖是search畫面,可以在搜尋框中鍵入關鍵字來檢索,右圖是borwse畫面,可以在相關的檔案目錄下查詢自己需要的器件。
通常情況下,選擇search方式更為快捷,根據關鍵字可以快速定位到自己想要的器件。
如下圖所示,輸入雙極型電晶體的縮寫bjt,回車確定,列表中顯示所有含有關鍵字bjt的器件,我們選擇第三個選擇項,這是一個理想的NPN型三極體,雙擊之後,在原理圖中就添加了該器件。
依照此方法,我們先後輸入voltage source查詢電壓源,並選擇voltage source general purpose新增到原理圖。輸入resistor,選擇resistor[I]新增到原理圖(新增2個)。輸入GND,選擇ground(saber node 0)新增到原理圖,ground(saber node 0)是必須的,否則saber模擬將因為沒有參考地而無法進行。
新增完器件之後,用滑鼠左鍵拖動每個器件,合理佈置位置,滑鼠左鍵雙擊該器件,即可修改必要的引數,在本示例中,僅需要修改電壓源的電壓,電阻的阻值,其他的都不需修改。
然後按下鍵盤的W鍵,游標變成了一個十字星,即表示可繪製wire(連線),將所有的器件連線起來。如下圖所示:
其中電壓源為12V,基極電阻為10k,集電極電阻為1k,共發射極連線。
選擇分析方法,由於這是一個大訊號系統,我們尋找的是一個靜態直流工作點,因此我們選擇下圖所示的DC operating point,將basic中的display after analysis項選擇Yes,完成後點選OK。
直流工作點模擬結果如下:
三極體的基極電壓為0.8422V,集電極電壓為0.06869V,即深度飽和時,Vbe約為0.84V,Vce約為0.069V。
還有一種更為直觀的方法,如同示波器一樣觀測每個節點的電壓波形,如下圖所示:
選擇分析圖示欄的第五項operating point / transient,彈出視窗,進行引數設定。在上圖中的basic欄中,End Time指的是模擬結束的時間,這個時間指的是電路執行的時間跨度,而不是模擬軟體工作的時間,在本示例中,由於在系統中沒有時變數和電容器,所以選擇1us就足夠了,預設單位為s,所以輸入1u。Time Step指的是模擬軟體計算步進,即從這個工作點到下一個工作點的時間跨度,在本示例中,由於沒有瞬變數,選擇100ns就可以了,輸入100n。Monitor Progress採用預設設定,Plot Analysis選擇下拉框中的Yes-replace Plot,表示每一次模擬之後,所有的模擬結果都更新為最新值。
在上圖中,input/output一欄裡,waveform at pins選擇下拉框中的Across and Through Variables,表示模擬結果同時含有電壓和電流值,這樣你既可以看電壓波形,也可以看電流波形。在右圖的Transient選項欄裡,Data File的輸入框中輸入 _ ,即下劃線,表示模擬結果不以檔案的形式輸出(只儲存在虛擬記憶體中),一旦關閉模擬軟體,模擬結果將會丟失。記住,這裡一定要輸入下劃線,否則你的硬碟很容易被模擬結果檔案填滿,一個小的模擬結果檔案都有幾百M,稍大一點的都有幾個G,還是節省一點吧,不要以檔案形式儲存在硬碟中了。
還需要設定integration control欄中的Max Time Step和Min Time Step選項,這兩個會影響模擬的速度,一個是最大步進,一個是最小步進,模擬的步進將在這兩個值之間,這兩個值取的越大,模擬軟體的執行速度越快,但同樣的會降低模擬的精度,導致結果可能失真。同時,有一點必須注意,Min Time Step必須小於Basic中設定的Time Step,否則模擬軟體會因為錯誤而終止模擬程序。在本示例中,我們選擇Max Time Step為200ns,Min Time Step為99ns(小於Time Step設定的100ns)。
以上引數設定完成之後,其他引數均保持預設值,點選OK,saber會執行模擬程序。
模擬結束之後,程式會開啟cosmoscope介面,讓我們可以觀察所有節點的電壓和電流波形。
如上圖所示,在cosmoscope介面裡,有兩個對話方塊,第一個是signal manager,其中顯示所有可供選擇的模擬結果檔案,此檔案儲存在虛擬記憶體中,軟體關閉後即丟失。第二個對話方塊顯示所選中的模擬結果檔案中所有可供觀察的節點,我們點選三極體q_3p.q_3p1的可選項,選擇b和c,即基極b和集電極c的電壓,分別雙擊,其波形顯示如下:
選擇測量選項,分別測得Vc為0.06869V,Vb為0.8422V,與DC operating point中分析的結果一致。
以上是一個簡單的示例,下面我們再模擬一個稍微複雜一點的電路,用TL431和三極體共同構成的一個線性直流穩壓電源,如下圖所示:
新增TL431的方法與上面新增其他器件的一樣,在空白處點選滑鼠右鍵—>get part—>parts gallery,然後輸入tl431進行關鍵字檢索,在搜尋到的器件列表中選擇tl431c,雙擊新增到原理圖中。
這裡還有兩個簡單的原理圖繪製技巧,如果想新增某個器件,原理圖中已有類似器件,比如說電阻,那麼不必再去檢索了,滑鼠左鍵單擊已有的電阻,這時器件顏色為綠色,表示已選中,然後用ctrl+C複製,滑鼠左鍵再點選空白處,鍵盤ctrl+V貼上,器件就新增完成了,修改其引數即可。第二個就是旋轉器件的角度,滑鼠左鍵點選選中器件,滑鼠右鍵點選彈出選單欄,其中的rotate選項可以按照角度旋轉器件,flip選項可以上下或左右翻轉器件。
在本示例中,我們想做一個10V 0.5A的線性電源。
輸入電壓12V,用TL431來控制輸出電壓值,反饋比例為1k/(1k+3k)=1/4,輸出電壓即為2.5V*4=10V,負載電阻為20Ω,輸出電流為10V/20Ω=0.5A,假定三極體的Vbe為0.8V,那麼TL431陰極電壓為10V+0.8V=10.8V,TL431的工作電流在1mA~100mA之間,這裡我們選擇三極體集電極和基極之間的跨接電阻為50Ω,則流過該電阻的電流為(12V-10.8V)/50Ω=24mA,假定三極體的放大倍數為100,那麼流入三極體基極的電流為5mA,流入TL431陰極的電流為19mA,滿足TL431工作電流的取值範圍。
首先來看一下DC operating point的分析結果:
n_9即為輸出電壓,其值為9.998V,與我們設計的10V輸出電壓吻合。
接下來用operating point / transient來看一下各節點的電壓波形:
以上波形基本上與設計值一致。通過這個簡單的例子,我們用幾分鐘的時間來模擬,可以替代幾個小時的電路板焊接和除錯的工作,是不是可以節約很多的時間呢?
接下來,我們的模擬工作要進入開關電源的領域了,先從最簡單的BUCK電路開始吧,腦子裡面不能立即勾畫出BUCK電路的請舉手,您可以從大學一年級重新開始學習啦。
模擬之前,先做簡單的設定和計算:
輸入電壓20V,輸出電壓10V,那麼穩態佔空比是0.5。
輸出電流10A,那麼負載電阻是1Ω。
設定電流紋波係數為0.4,紋波電流峰峰值為10A*0.4=4A。
設定開關頻率為100kHz,開關週期為10us,那麼電感量為:
L=(20V-10V)*(10us*0.5)/4A=12.5uH。
電容根據經驗值取100uF,電容的大小將決定輸出電壓紋波的大小,取的大一點,輸出電壓紋波小一點,大家可以自由選取,觀察輸出電壓紋波的大小。模擬的優點就是你可以隨心所欲的選取你的引數,來觀察不同的模擬結果,而不用勞心勞力的去焊板子除錯,示波器觀測。
引數計算完成之後,下面要在saber中新增元器件,繪製原理圖了:
首先,我們要新增一個開關管,你可以新增一個真實的MOSFET,也可以用一個模擬開關替代,由於本示例僅僅是驗證BUCK電路的原理,所以選擇了模擬開關。在search檢索欄中輸入關鍵字switch確認,在檢索結果中選擇switch,analog SPST w/logic Enbl,雙擊新增到原理圖中。
在原理圖中雙擊該器件,開啟屬性欄,需要設定一些關鍵引數,ron即開關導通時的阻抗,此處保持預設值0.001Ω,roof即開關管關閉時的阻抗,此處保持預設值1megΩ(1兆歐),如果你想改變導通和關斷阻抗也是可以的,還是那句話,隨心所欲。ton和toff是兩個關鍵引數,即開關管的開通時間和關斷時間,表示開關管的開關速度,理論上我們希望開關速度越快越好,比如你可以設定為1ns(注意,必須大於0,所以不能設定為0),但是這兩個值影響到saber模擬的時間步進,即saber模擬引數中的Min Time Step必須小於ron和roff,否則模擬程序會因為錯誤而無法進行。所以如果ron和roff設定的太小,模擬引數中的Min Time Step也必須設定很小,導致模擬速度很慢,需要等待很長時間才能結束模擬程序,尤其是在大型的系統模擬中,由於電路結構複雜,元器件多,saber的計算量很大,如果時間步進再設定的很小,可能需要幾十分鐘的時間來模擬一個幾十毫秒的模擬程序。當然,您也可以泡一杯咖啡或一杯茶,悠閒的等待。在本示例中,為了節約時間,設定ron和roff為100ns。
添加了開關管之後,還需要新增一個驅動訊號,由於我們使用的模擬開關是邏輯使能的,所以需要一個邏輯時鐘訊號來驅動它。
在器件搜尋欄中輸入logic clock,雙擊搜尋結果,新增到原理圖中。然後再雙擊原理圖中的器件,開啟屬性欄設定引數,有兩個關鍵引數,一個是freq,即頻率,此處輸入100k,預設單位是Hz,所以不需要畫蛇添足的輸入單位。此處再說明一下,saber的引數設定中,所有的引數都是有預設單位的,頻率是Hz,時間是s,電壓是V,電流是A,功率是W,以此類推,並不需要我們輸入單位符號。第二個引數是duty,即佔空比,此處輸入0.5。
接下來,依次新增電感(關鍵字inductor搜尋),電容(關鍵字capacitor搜尋),二極體(關鍵字diode搜尋)到原理圖中,diode檢索後選擇diode,ideal,即理想二極體。
新增完成之後,修改必要的引數,電感修改引數欄的l值,輸入12.5u,電容修改引數欄的c值,輸入100u,二極體修改引數欄的Von值,輸入0.3V(肖特基二極體的導通壓降)。負載電阻的rnom值修改為1。
所有器件引數設定完成,進行模擬引數設定,如下:
為什麼要模擬10ms?是因為我們的開環電路,一開始就是0.5的佔空比,電感電流為0,電容電壓為0,會有一個震盪的過程,直到達到穩態值。
在這裡我們希望看到的是穩態值,而不是震盪的過程,所以模擬程序設定10ms,以使時間長度足夠觀測到穩態值。
模擬結果如上圖所示,在經過1ms左右的震盪之後,電壓和電流逐漸達到穩態值,輸出電壓為9.87V,與我們計算的10V有些誤差,為何?因為在我們的電路中開關管有導通阻抗,二極體有導通壓降,這是在計算時沒有考慮的,所以模擬結果與計算值有些出入。
在上圖所示的時間軸上,如紅色標記所示,滑鼠左鍵按住不放,向右移動一段距離後鬆開,即可把此段時間內的波形展開:
同樣的方式繼續展開時間軸,直到能夠看到完整清晰的電感電流波形和電容電壓波形,如下圖所示:
測量結果顯示,電容電壓紋波為0.05V,電感電流紋波為4.06A。如何進行精確的測量?
如上圖所示,在Tool中選擇measurement tool,彈出選單,點選measurement右邊的可選框,彈出下拉選單,選擇levels中的peak to peak,即可測量峰峰值,同時可以看到選單中的選項非常豐富,跟示波器的使用方法類似,可測量最大值,最小值,峰峰值,平均值等,在time domain選項中還可以測量各種跟時間相關的量。
至此,一個BUCK電路的開環模擬就完成了,你也可以嘗試模擬BOOST,BUCK-BOOST等電路的開環模擬,用幾分鐘的時間,完成了一個電路的模擬,看到了和示波器中一樣的電壓或電流波形,效果是多麼的美妙啊。
大部分的除錯工作都是可以通過模擬來替代的。大部分的設計工作都是可以通過模擬來驗證合理性和可行性的,一旦您掌握了模擬的方法,並能夠熟練的使用,你將終生受益,你可以擺脫大多數低效的除錯工作,可以節約大量的時間和精力,可以直觀的看到你的設計結果,而不僅僅是計算書中的計算公式和枯燥的數字。
當你有一個對於電路的新的想法和思路,如果你要驗證它,你可能要花費幾天甚至幾個月的時間去準備器件,焊板子,除錯,直到獲得結果。可是如果你用模擬的方法,也許幾分鐘就搞定了,並且通過更改電路和引數,許多靈感就會迸發出來。
對於很多無法通過精確計算來推算的電路,我們通過模擬就可以獲得精確的結果,這對於非線性系統的解決方案而言,真是事半功倍啊,為什麼要去求解複雜的矩陣方程?我需要的僅僅是結果而已,過程的推導留給大學老師吧。模擬可以讓我們從複雜的計算中解脫出來,隨心所欲的更改電路引數,然後獲得直觀的結果,當你掌握訣竅的時候,你可以讓自己的開發效率提高十倍!