IoTで使うPython入門 Step5-Python3 VISA⑨DMM Keithley 2000 +電源E3631A 中電力トランジスタのVCE-IC特性
前回まで、次の測定回路を使って、小信号用トランジスタ2SC1815の静特性を測りました。
●中電力トランジスタ2SC3422
TO220パッケージに入った2SC3422は、コンパクトでコレクタ出力容量の少ないトランジスタです。
- コレクタ-ベース間電圧 Vcbo 40 V
- コレクタ電流 Ic 3A
- コレクタ損失Pc Ta = 25°C;1.5W、Tc = 25°C;10W
Ta = 25°Cは、周辺温度が常温以下の温度で利用するとき、単独でコレクタ電圧5Vで300mAまでの電流が流せます。Tc = 25°Cは、無限大の放熱器を付けて熱を奪い、ケースの温度を25℃としたとき、たとえば5Vで2Aの電流を流して10Wの損失に耐えられますが、現実の放熱器はそれほど大きくはありません。
半導体自体は最高150~175℃までしか耐えられません。電流をたくさん流すときは、デバイスがそれ以下の温度(例えば80℃)になるように放熱器の大きさを選びます。温度が高いと寿命が縮みます(10℃上がるごとにデバイスの寿命は約半分になり、故障率は約2倍)。
●VCE-IC特性を取る<その1>
上記の回路のままで、測定します。トランジスタは単独で、放熱器をつけていません。
●VCE-IC特性を取る<その2>
上記の回路の中で、ベースに入っている100kΩを10kΩに変更し、ベース電流を増やして測定します。温度は30~39℃で変動しました。トランジスタは単独で、放熱器をつけていません。
●VCE-IC特性を取る<その3>
上記の回路の中で、ベースに入っている100kΩを1kΩに変更し、ベース電流を増やして測定します。温度は30~74℃で変動しました。トランジスタは単独で、放熱器をつけていません。
飽和領域が大きくなり、コレクタ電圧が高いところでしか、増幅に使えないかもしれません。
温度の影響が出ているのではないかと思い、電圧を設定して0.5秒後に測定し、そのあと1秒間電流を0にするようにプログラムを変更しました。
温度は最高56℃に抑えられましたが、特性データはあまり変化しません。
入手しやすい55×50x20mmの放熱器にトランジスタを取り付けました。温度は29~32℃と低めに抑えられました。特性データは少し改善されましたが、飽和領域はあまり減少しません。
●VCE-IC特性を取る<その4>
これ以上ベース電流を増やすとコレクタ電流が1Aを超えるので、電源の6V(最大3A)と25V(最大1A)を入れ替えました。データシートに書かれている特性(Ib=約10mA)を青色の実線で記入しました。データシートに従えば、飽和領域は大変狭いです。しかし、実測ではそうではありません。どこに差があるのでしょうか。
データシートには注釈はありませんが、東芝の解説には、実際の測定はパルス測定です。と説明されています。つまり、直流電流を流しながら測定すると、電力損失が大きすぎて、データが取れないからでしょう。
プログラムです。
import visa
from time import sleep
import matplotlib.pyplot as plt
Keithley2000_6_Addr = "GPIB0::6"
Keithley2000_18_Addr = "GPIB0::18"
AgilentE3631A_Addr = "GPIB1::10"
Keysight34461A_Addr = "USB0::0x2A8D::0x1301::MY53216054::0::INSTR"
IwatsuVOAC7602_Addr = "ASRL5::INSTR"
dataIc =[]
dataVc =[]
dataVb =[]
dataIb =[]
g = []
r = visa.ResourceManager()
Ic_keithley2000_6 = r.open_resource(Keithley2000_6_Addr)
Vc_keithley2000_18 = r.open_resource(Keithley2000_18_Addr)
Ib_keysight34461A = r.open_resource(Keysight34461A_Addr)
Vb_iwatsuVOAC7602 = r.open_resource(IwatsuVOAC7602_Addr)
Ic_keithley2000_6.write("*RST;*CLS")
Vc_keithley2000_18.write("*RST;*CLS")
Ic_keithley2000_6.write(":CONF:CURR; DC:RANG AUTO")
Vc_keithley2000_18.write(":CONF:VOLT:DC:RANG AUTO")
sleep(1)
Ib_keysight34461A.write("*RST;*CLS")
Vb_iwatsuVOAC7602.write("*RST;*CLS")
Ib_keysight34461A.write(":CONF:CURR; DC:RANG AUTO")
Vb_iwatsuVOAC7602.write(":CONF:VOLT:DC:RANG AUTO")
Vb_iwatsuVOAC7602.write("INIT")
sleep(1)
print('--start--')
agilentE3631A = r.open_resource(AgilentE3631A_Addr)
for baseVolt in range(1,7):
agilentE3631A.write(":INST:SEL P25V")
agilentE3631A.write(":TRIG:SOUR IMM")
agilentE3631A.write(":VOLTage:TRIG " + str((float(baseVolt)+0.01)/1.0)) # Vb
agilentE3631A.write(":CURR:TRIG 0.5") # max 500mA
agilentE3631A.write(":OUTPut ON")
agilentE3631A.write("INIT")
print('Base V', (float(baseVolt/1.0)) )
sleep(1)
agilentE3631A.write(":INST:SEL P6V")
agilentE3631A.write(":TRIG:SOUR IMM")
agilentE3631A.write(":VOLTage:TRIG 0.0") # Vc
agilentE3631A.write(":CURR:TRIG 0.5") # max 500mA
agilentE3631A.write(":OUTPut ON")
agilentE3631A.write("INIT")
sleep(2)
dataIc =[]
dataVc =[]
dataVb =[]
dataIb =[]
for CorrectorVolt in range(0,60):
agilentE3631A.write(":INST:SEL P6V")
agilentE3631A.write(":VOLTage:TRIG " + str((float(CorrectorVolt)+0.1)/10.0)) # Vc
agilentE3631A.write(":CURR:TRIG 1.5") # max 1500mA
agilentE3631A.write("INIT")
sleep(0.5)
Ic = Ic_keithley2000_6.query(":READ?")
dataIc.append(Ic)
print('Corrector V=', (float(CorrectorVolt/10.0)), ' Ic=', Ic )
Vc = Vc_keithley2000_18.query(":READ?")
dataVc.append(Vc)
Ib = Ib_keysight34461A.query(":READ?")
dataIb.append(Ib)
Vb_iwatsuVOAC7602.write("INIT")
Vb = Vb_iwatsuVOAC7602.query(":FETCh?") ##
dataVb.append(Vb)
dataVoltageC = [float(f) for f in dataVc]
dataCurrentC = [float(f)*1000 for f in dataIc]
dataVoltageB = [float(f) for f in dataVb]
dataCurrentB = [float(f)*1000000 for f in dataIb]
agilentE3631A.write(":CURR:TRIG 0")
agilentE3631A.write("INIT")
sleep(1)
print('\n', dataVoltageC, "V Vc")
print(dataCurrentC, "mA Ic")
print(dataVoltageB, "V Vb")
print(dataCurrentB, "uA Ib")
plt.plot(dataVoltageC, dataCurrentC, marker="o", linestyle='dashed', label=("Vbb=" + str(baseVolt)))
#atoshimatsu
agilentE3631A.write("CURRent:TRIG 0")
agilentE3631A.write("VOLTage:TRIG 0")
agilentE3631A.write("INIT")
plt.xlabel("Corrector Voltage [V]")
plt.ylabel("Corrector Current [mA]")
plt.legend()
plt.grid()
plt.show()
sleep(2)
print('--done--')
agilentE3631A.write(":OUTPut OFF")
Ic_keithley2000_6.write(":READ?")
Vc_keithley2000_18.write(":READ?")
Ib_keysight34461A.write(":READ?")
Vb_iwatsuVOAC7602.write("INIT:FETCh?")
