IoTで使うPython入門 Step5-Python3 VISA⑥DMM Keithley 2000 +電源E3631A LED
実験用電源の電圧を変えて、デバイスの両端にかかる電圧と電流を測定しました。ここでは、非線形素子のLEDをつないでみます。
LEDは、順方向電圧約2Vを超える電圧がかかると光り始めます。と同時に電流も急速に流れ始めます。順方向電圧は、時代、色によって大きく異なります。LEDは赤色が最初に作られました。そのころは約1.7Vでしたが、現在使われている素材では2V付近といわれています。
青色(白色)は約3Vですが、高輝度の製品では低めです。
●LEDの特性を測る
小信号用の赤色LEDをつなぎました。
プログラムです。測定中に40mAを超えたら終了します。
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" r = visa.ResourceManager() agilentE3631A = r.open_resource(AgilentE3631A_Addr) keithley2000_6 = r.open_resource(Keithley2000_6_Addr) keithley2000_18 = r.open_resource(Keithley2000_18_Addr) dataI = [] dataE = [] agilentE3631A.write("*RST;*CLS") agilentE3631A.write(":INST:SEL P6V") agilentE3631A.write(":TRIG:SOUR IMM") agilentE3631A.write(":OUTPut ON") keithley2000_6.write("*RST;*CLS") keithley2000_18.write("*RST;*CLS") keithley2000_6.write(":CONF:CURR; DC:RANG 1") keithley2000_18.write(":CONF:VOLT:DC:RANG 10") sleep(1) for outVolt in range(1,200): agilentE3631A.write("VOLT:TRIG " + str(float(outVolt)/100.0+1.2)) agilentE3631A.write("INIT") #print(outVolt) sleep(0.5) dI = keithley2000_6.query(":READ?") #print(dI) if float(dI)*1000 > 40.0: agilentE3631A.write(":VOLTage:TRIG 0") agilentE3631A.write("INIT") break dataI.append(dI) dE = keithley2000_18.query(":READ?") dataE.append(dE) print(" E: ", float(dE), "V I: ", float(dI)*1000.0 , "mA") agilentE3631A.write("CURRent:TRIG 0") agilentE3631A.write("VOLTage:TRIG 0") agilentE3631A.write("INIT") sleep(2) print('--done--') agilentE3631A.write(":OUTPut OFF") keithley2000_6.query(":READ?") keithley2000_18.query(":READ?") dataCurrent = [float(f)*1000 for f in dataI] dataVoltage = [float(f) for f in dataE] plt.plot(dataVoltage, dataCurrent, marker="v") plt.xlabel("Volt [V]") plt.ylabel("Current [mA]") plt.show()
グラフです。2.1V付近でDMMの内部でリレーの音がし、レンジが変更されるようで、データが飛びます。この測定データからどの部分を「順方向電圧」と読み取ればいいのかわかりません。LED自体は、1.7V付近からかすかに光り始めます。つまり、1mA以下でも光ります。
小信号用の緑色LEDをつなぎました。1.8V付近で光始めました。
小信号用の青色LEDをつなぎました。2.5V付近で光始めました。開始電圧は2.0Vに変更しました。
小信号用の白色LEDをつなぎました。2.4V付近で光始めました。大変古いLEDです。20mAを超えると壊れた経験があるので、最大電流は20mAに制限しました。
1Wの白色LEDをつなぎました。2.35V付近で光始めました。
●第3象限
逆の電圧をかけます。多くのデータシートには逆耐圧5Vと書かれていますが、実際はいろいろあります。
最初は、古い小信号用の白色LEDです。
プログラムです。2mA以上流れたらストップします。
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" r = visa.ResourceManager() agilentE3631A = r.open_resource(AgilentE3631A_Addr) keithley2000_6 = r.open_resource(Keithley2000_6_Addr) keithley2000_18 = r.open_resource(Keithley2000_18_Addr) dataI = [] dataE = [] agilentE3631A.write("*RST;*CLS") agilentE3631A.write(":INST:SEL N25V") agilentE3631A.write(":TRIG:SOUR IMM") agilentE3631A.write(":OUTPut ON") keithley2000_6.write("*RST;*CLS") keithley2000_18.write("*RST;*CLS") keithley2000_6.write(":CONF:CURR; DC:RANG 1") keithley2000_18.write(":CONF:VOLT:DC:RANG 10") sleep(1) for outVolt in range(1,250): agilentE3631A.write("VOLT:TRIG -" + str(float(outVolt)/10.0)) agilentE3631A.write("INIT") #print(outVolt) sleep(0.5) dI = keithley2000_6.query(":READ?") #print(dI) if abs(float(dI)*1000) > 2.0: agilentE3631A.write(":VOLTage:TRIG 0") agilentE3631A.write("INIT") break dataI.append(dI) dE = keithley2000_18.query(":READ?") dataE.append(dE) print(" E: ", float(dE), "V I: ", float(dI)*1000.0 , "mA") agilentE3631A.write("CURRent:TRIG 0") agilentE3631A.write("VOLTage:TRIG 0") agilentE3631A.write("INIT") sleep(2) print('--done--') agilentE3631A.write(":OUTPut OFF") keithley2000_6.query(":READ?") keithley2000_18.query(":READ?") dataCurrent = [float(f)*1000 for f in dataI] dataVoltage = [float(f) for f in dataE] plt.plot(dataVoltage, dataCurrent, marker="v") plt.xlabel("Volt [V]") plt.ylabel("Current [mA]") plt.show()
グラフです。
赤色です。うまく測れていないようです。
青色です。もっと高い電圧が出せる電源でないと測れないようです。