結(jié)合python與LTspice,讓電路模擬起飛
LTspice是一個(gè)由ADI開(kāi)發(fā)的電路模擬軟件,精致小巧,免費(fèi)使用,模擬方便,簡(jiǎn)直是我最?lèi)?ài)的軟件之一。但是做批量,計(jì)算等一些操作時(shí),就會(huì)顯得有點(diǎn)力不從心,畢竟他只是一款電路模擬軟件啊。
如果LTspice可以和編程語(yǔ)言結(jié)合,可以批量測(cè)試不同原件參數(shù)下,電路的表現(xiàn),或者方便的提取模擬結(jié)果,進(jìn)行進(jìn)一步處理,那簡(jiǎn)直是如虎添翼,直接起飛啦。
PyLTSpice就是這樣一款幫助我們?cè)趐ython中操作LTspice的python庫(kù)!

用一個(gè)小實(shí)驗(yàn)來(lái)試試吧,咱們用它來(lái)測(cè)量一下二極管的伏安特性曲線(xiàn)。
下載安裝LTspice就不在這里說(shuō)啦,首先打開(kāi)LTspice繪制一個(gè)測(cè)量二極管伏安特性曲線(xiàn)的電路:

這里,我暫時(shí)沒(méi)有設(shè)置任何參數(shù),當(dāng)然,如果在你自己的電路中,確定某些參數(shù)是固定的,直接在電路圖中設(shè)定也是可以的。
為了測(cè)量二極管在不同電壓下的表現(xiàn),這里的電源V1的電壓,我希望可以從0V掃描到3.7V.
LTspice直接就可以完成這樣的電壓掃描


文件中出現(xiàn).dc V1 0 3.7 0.01 表示設(shè)置完成
以上都是可以直接在LTspice中實(shí)現(xiàn)的功能。
而電路中的電阻R1我希望可以在程序中再設(shè)置具體值,那也沒(méi)關(guān)系我直接把電阻值設(shè)置為一個(gè)變量就可以了。方法就是給阻值起個(gè)名字,然后放在{ }中。

保存后,給文件起個(gè)名字test.asc,LTspice部分打完收工。

接下來(lái)編寫(xiě)一個(gè)程序來(lái)操作電路和讀取運(yùn)行結(jié)果。
為了使用python實(shí)現(xiàn)這一點(diǎn),首先需要安裝PyLTSpice,
pip install pyltspice
直接安裝完成,開(kāi)始寫(xiě)程序

from matplotlib import pyplot as plt
from PyLTSpice import SimCommander
from PyLTSpice import RawRead ? #導(dǎo)入需要的庫(kù)
Rsh=10
#設(shè)置需要模擬的文件,和ltspice模擬器的路徑
LTC = SimCommander(".\\test.asc",simulator="D:\LTspice\LTspice.exe")
#設(shè)置文件中確定的參數(shù)
LTC.set_parameters(Rsh_value = Rsh)
LTC.run() ?#運(yùn)行
LTC.wait_completion() #等待模擬結(jié)束
LTC.reset_netlist() ?#重置電路。尤其是需要多次模擬運(yùn)行時(shí),必須有這句來(lái)方便后續(xù)模擬
######################電路模擬運(yùn)行后結(jié)果都保存在raw文件中,下面來(lái)讀取運(yùn)行結(jié)果
# 讀取raw文件
raw_file = ".\\test_1.raw"
LTR = RawRead(raw_file)
#讀取raw文件中的數(shù)據(jù)
Vin = LTR.get_trace('V(n001)')
IR1 = LTR.get_trace("I(R1)")
voltage = Vin.get_wave(0)
current=IR1.get_wave(0) ?#獲得運(yùn)行軌跡,如電源的電壓變化,R1的電流變化
#可以讀取的項(xiàng)目在軟件的pick visible Traces中可以看到
#######################使用簡(jiǎn)單歐姆定律計(jì)算二極管上的分壓
Vr = current*Rsh
Vd = voltage-Vr
################使用matplotlib打印二極管伏安特性
plt.plot(Vd,current)
plt.ylabel('Currrent (A)')
plt.xlabel('Voltage (V)')
#plt.yscale('log')
plt.grid() #顯示坐標(biāo)網(wǎng)格
plt.show()

語(yǔ)句的含義都在注釋中,整體來(lái)說(shuō),就是調(diào)用函數(shù)把電路運(yùn)行一遍,運(yùn)行之前也可以調(diào)用函數(shù)給電路中的變量賦值。運(yùn)行的結(jié)果會(huì)被自動(dòng)保存在raw文件中。然后讀取raw獲得自己需要的數(shù)據(jù),最后處理數(shù)據(jù)并繪圖。
這里是運(yùn)行結(jié)果。

怎么樣,是不是很nice。不妨也試試?yán)L制三極管的伏安特性曲線(xiàn)?
現(xiàn)在你甚至可以利用程序自動(dòng)進(jìn)行電路參數(shù)調(diào)優(yōu)。發(fā)揮你的想象力,現(xiàn)在又多出了無(wú)限可能。