In [1]:
import serial
import time
import sys
import matplotlib.pyplot as plt
In [3]:
class Spe:
def __init__(self, port):
try:
self.spe = serial.Serial(port, 115200, timeout=None)
except:
print(f"{port} の機器を認識できません")
sys.exit()
self.spe.write('*idn?\r\n'.encode())
line = self.spe.readline()
print(f"{port} *idn? returned: {line.rstrip().decode()}")
self.setV(0.0)
self.setI(0.0)
self.setVL(5.0)
self.setIL(0.1)
def __del__(self):
self.outOff()
self.sendCmd('*RST')
self.spe.close()
def sendCmd(self, cmd):
self.spe.write(f"{cmd.rstrip()}\r\n".encode())
def recvLine(self):
line = self.spe.readline()
return line.decode().rstrip()
def setVL(self, vlimit):
self.sendCmd(f"VOLT:LIM {vlimit}")
def setV(self, voltage):
self.sendCmd(f"VOLT {voltage}")
def setIL(self, climit):
self.sendCmd(f"CURR:LIM {climit}")
def setI(self, current):
self.sendCmd(f"CURR {current}")
def outOn(self):
self.sendCmd('OUTP ON')
def outOff(self):
self.sendCmd('OUTP OFF')
def getV(self):
self.sendCmd("MEAS:VOLT?")
return float(self.recvLine())
def getI(self):
self.sendCmd("MEAS:CURR?")
return float(self.recvLine())
In [5]:
class Xdm:
def __init__(self, port):
try:
self.xdm = serial.Serial(port, 115200, timeout=None)
except:
print(f"{port} の機器を認識できません")
sys.exit()
self.sendCmd('*idn?')
line = self.xdm.readline()
print(f"{port} *idn? returned: {line.rstrip().decode()}")
self.xdm.write('CONF:CURR:DC MIN\r\n'.encode())
self.xdm.write('AUTO\r\n'.encode())
self.xdm.write('RATE S\r\n'.encode())
def __del__(self):
self.sendCmd("*RST")
self.xdm.close()
def sendCmd(self, cmd):
self.xdm.write(f"{cmd.rstrip()}\r\n".encode())
def recvLine(self):
line = self.xdm.readline()
return line.decode().rstrip()
def getI(self):
self.sendCmd("MEAS:CURR?")
return float(self.recvLine())
In [7]:
spe6102 = Spe("COM5")
spe6102.setVL(2.0)
spe6102.setIL(0.2)
spe6102.setI(0.1)
spe6102.setV(0.0)
xdm1041 = Xdm("COM4")
COM5 *idn? returned: OWON,SPE6102,24251887,FV:V5.1.0 COM4 *idn? returned: OWON,XDM1041,24252859,V4.3.0,3
In [9]:
V_data = []
I_data = []
spe6102.outOn()
for V100 in range(20, 80, 2):
V = V100 / 100
spe6102.setV(V)
time.sleep(3)
Vm = spe6102.getV()
Im = xdm1041.getI()
print(f"{V}\t{Vm}\t{Im}")
V_data.append(Vm)
I_data.append(Im)
spe6102.outOff()
0.2 0.19 3.179647e-08 0.22 0.21 6.744832e-08 0.24 0.23 1.222278e-07 0.26 0.25 2.249382e-07 0.28 0.26 3.752564e-07 0.3 0.29 6.565329e-07 0.32 0.31 1.157557e-06 0.34 0.32 1.941367e-06 0.36 0.35 3.491165e-06 0.38 0.36 6.024063e-06 0.4 0.38 1.113671e-05 0.42 0.4 1.924978e-05 0.44 0.42 3.467921e-05 0.46 0.44 5.673118e-05 0.48 0.46 9.310448e-05 0.5 0.48 0.0001378427 0.52 0.5 0.0002015738 0.54 0.52 0.0002796736 0.56 0.54 0.0003615343 0.58 0.56 0.0004644553 0.6 0.58 0.0005660875 0.62 0.6 0.000688044 0.64 0.62 0.0008053719 0.66 0.64 0.0009420288 0.68 0.66 0.001069672 0.7 0.68 0.001217185 0.72 0.7 0.001353832 0.74 0.72 0.001510939 0.76 0.74 0.001654747 0.78 0.76 0.001817801
In [11]:
plt.figure(figsize=(8,6))
plt.plot(V_data, I_data, marker = 'o', linestyle = '', label = '1N4005')
plt.yscale('log')
plt.xlabel('Voltage [V]')
plt.ylabel('Current [A]')
plt.show()
In [13]:
del spe6102
del xdm1041
In [ ]: