def iv_curve(self, channel): """ Function to perform iv curve with smu2612b """ [start, end, step] = self.experiment_setup output_flag = False if channel == 'a': source_func = self.instruments[0].measure_a elif channel == 'b': source_func = self.instruments[0].measure_b j = start while j <= end: if source_func == 'V': self.instruments[0].smu.write('smu%s.source.levelv = %s' % (str(channel), str(j))) elif source_func == 'I': self.instruments[0].smu.write('smu%s.source.leveli = %s' % (str(channel), str(j))) self.instruments[0].smu.measure(channel, output_flag) j += step if not output_flag: self.instruments[0].smu.write( 'smu%s.source.output = smu%s.OUTPUT_OFF' % (str(channel), str(channel))) readings_measure = cast( readBuffer(self.instruments[0].smu, str(channel))[1]) readings_source = cast( readBuffer(self.instruments[0].smu, str(channel))[0]) readings_source_error = error_V(readings_source, '2612') readings_measure_error = error_I(readings_measure, '2612') import matplotlib.pyplot as plt plt.errorbar(readings_source, readings_measure, xerr=readings_source_error, yerr=readings_measure_error, fmt='.') return [ readings_source, readings_measure, readings_source_error, readings_measure_error ]
def SelfHeating(smu_2612b, smu_2400, i_cc_sipm, v_cc_sipm, i_rang_sipm, v_rang_sipm, v_level_sipm, i_cc_led, v_cc_led, i_rang_led, v_rang_led, iStart, iEnd, fourWire, i_cc_rtd, v_cc_rtd, i_rang_rtd, r_rang_rtd, i_level_rtd, return_sweep, N, points, delay, curves): """ --------- """ NPLC = round(points * 200 * P('u') * 50, 2) readingsR = [] smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2400.write("*RST") smu_2612b.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu_2612b.write('smua.nvbuffer1.clear()') smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.nvbuffer1.appendmode = 1') smu_2612b.write('smub.nvbuffer1.appendmode = 1') smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # smua configuration smu_2612b.write('smua.source.func = smua.OUTPUT_DCVOLTS') smu_2612b.write('display.smua.measure.func = display.MEASURE_DCAMPS') if (i_rang_sipm == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(i_rang_sipm)) if (v_rang_sipm == 'AUTO'): smu_2612b.write('smua.measure.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.measure.rangev = ' + str(v_rang_sipm)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cc_sipm)) smu_2612b.write('smua.source.limitv = ' + str(v_cc_sipm)) smu_2612b.write('smua.source.levelv = ' + str(v_level_sipm)) smu_2612b.write('smua.measure.nplc = ' + str(NPLC)) # ------------------------------------------------------------------------- # smub configuration smu_2612b.write('smub.source.func = smub.OUTPUT_DCAMPS') if (i_rang_led == 'AUTO'): smu_2612b.write('smub.source.autorangei = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangei = ' + str(i_rang_led)) if (v_rang_led == 'AUTO'): smu_2612b.write('smub.source.autorangev = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangev = ' + str(v_rang_led)) #compliance values for I and V smu_2612b.write('smub.source.limiti = ' + str(i_cc_led)) smu_2612b.write('smub.source.limitv = ' + str(v_cc_led)) # smu_2612b.write('smub.measure.delay = ' + str(delay)) #smu_2612b.write('smub.measure.nplc = ' + str(NPLC)) # ------------------------------------------------------------------------- # k2400 configuration (R measurement) smu_2400.write(':SENS:FUNC "RES"') smu_2400.write(':SOUR:FUNC CURR') smu_2400.write('SENS:RES:MODE MAN') if (i_rang_rtd == 'AUTO'): smu_2400.write(':SOUR:CURR:RANG:AUTO ON') else: smu_2400.write(':SOUR:CURR:RANG ' + str(i_rang_rtd)) if (r_rang_rtd == 'AUTO'): smu_2400.write(':SENS:RES:RANG:AUTO ON') else: smu_2400.write(':SENS:RES:RANG ' + str(r_rang_rtd)) smu_2400.write(':SOUR:CURR:LEV ' + str(i_level_rtd)) smu_2400.write('SENS:CURR:PROT ' + str(i_cc_rtd)) smu_2400.write('SENS:VOLT:PROT ' + str(v_cc_rtd)) #smu_2400.write('SENS:CURR:NPLC ' + str(1)) if fourWire: smu_2400.write(':SYST:RSEN ON') # ------------------------------------------------------------------------- # Measurement ------------------------------------------------------------- import numpy as np #calculates logarithmic current sweep # a = (1.0/(N - 1)) * np.log10(iEnd / iStart) b = np.arange(0, N, 1) # i_led_values = [iStart * 10**(i*a) for i in b] i_led_values = [iStart + (iEnd - iStart) / N * i for i in b] smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2612b.write('smub.source.output = smub.OUTPUT_ON') smu_2400.write('OUTP ON') print("Start of measurement") for i in range(0, curves): #startTime = time.time() for j in range(len(i_led_values)): smu_2612b.write('smub.source.leveli = ' + str(i_led_values[j])) smu_2612b.write('smub.measure.v(smub.nvbuffer1)') smu_2612b.write('smua.measure.i(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') rtd_r = float(cast(auxRead)[2]) readingsR.append(rtd_r) time.sleep(delay + NPLC / 50.) smu_2612b.write('waitcomplete()') if return_sweep == 1: n = len(i_led_values) for j in range(len(i_led_values)): smu_2612b.write('smub.source.leveli = ' + str(i_led_values[n - j - 1])) smu_2612b.write('smub.measure.v(smub.nvbuffer1)') smu_2612b.write('smua.measure.i(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') rtd_r = float(cast(auxRead)[2]) readingsR.append(rtd_r) time.sleep(delay + NPLC / 50.) smu_2612b.write('waitcomplete()') # #startTime = time.time() # for j in range(len(i_led_values)): # # smu_2612b.write('smub.source.leveli = ' + str(i_led_values[j])) # smu_2612b.write('smub.measure.v(smub.nvbuffer1)') # smu_2612b.write('smua.measure.i(smua.nvbuffer1)') # # auxRead = smu_2400.query(':READ?') # rtd_r = float(cast(auxRead)[2]) # readingsR.append(rtd_r) # time.sleep(delay + NPLC/50.) # # # smu_2612b.write('waitcomplete()') # # # if return_sweep == 1: # # n = len(i_led_values) # for j in range(len(i_led_values)): # # smu_2612b.write('smub.source.leveli = ' + str(i_led_values[n - j - 1])) # smu_2612b.write('smub.measure.v(smub.nvbuffer1)') # smu_2612b.write('smua.measure.i(smua.nvbuffer1)') # # auxRead = smu_2400.query(':READ?') # rtd_r = float(cast(auxRead)[2]) # readingsR.append(rtd_r) # time.sleep(delay + NPLC/50.) # # # smu_2612b.write('waitcomplete()') smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2612b.write('smub.source.output = smub.OUTPUT_OFF') smu_2400.write('OUTP OFF') print("End of measurement") readingsV_sipm = cast(readBuffer(smu_2612b, 'a')[1]) readingsI_sipm = cast(readBuffer(smu_2612b, 'a')[0]) readingsV_led = cast(readBuffer(smu_2612b, 'b')[0]) readingsI_led = cast(readBuffer(smu_2612b, 'b')[1]) return [ readingsV_sipm, readingsI_sipm, readingsV_led, readingsI_led, readingsR ]
def ivr(smu, fourWire, i_cca, v_cca, iRanga, vRanga, iLevela, i_ccb, v_ccb, iRangb, vRangb, vStart, vEnd, vStep, iStart, iEnd, iStep, source, NPLC, wait_time): """ Function to control Keithley 2612B for IV measurement on sipm and R measurement on rtd resistance. --------- """ readingsV = [] readingsI = [] readingsR = [] smu.write('smua.reset()') smu.write('smub.reset()') smu.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu.write('smua.nvbuffer1.clear()') smu.write('smub.nvbuffer1.clear()') smu.write('smua.nvbuffer1.appendmode = 1') smu.write('smub.nvbuffer1.appendmode = 1') smu.write('smua.nvbuffer1.collectsourcevalues = 1') smu.write('smub.nvbuffer1.collectsourcevalues = 1') smu.write('smua.measure.count = 1') smu.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # Smub (iv) configuration if (source == 'V'): smu.write('smub.source.func = smub.OUTPUT_DCVOLTS') smu.write('display.smub.measure.func = display.MEASURE_DCAMPS') if (iRangb == 'AUTO'): smu.write('smub.measure.autorangei = smub.AUTORANGE_ON') else: smu.write('smub.measure.rangei = ' + str(iRangb)) if (vRangb == 'AUTO'): smu.write('smub.source.autorangev = smub.AUTORANGE_ON') else: smu.write('smub.source.rangev = ' + str(vRangb)) smu.write('smub.source.levelv = ' + str(vStart)) #compliance values for I and V smu.write('smub.source.limiti = ' + str(i_ccb)) smu.write('smub.source.limitv = ' + str(v_ccb)) elif (source == 'I'): smu.write('smub.source.func = smub.OUTPUT_DCAMPS') #smu.write('display.smua.measure.func = display.MEASURE_DCVOLTS') if (iRangb == 'AUTO'): smu.write('smub.source.autorangei = smub.AUTORANGE_ON') else: smu.write('smub.source.rangei = ' + str(iRangb)) if (vRangb == 'AUTO'): smu.write('smub.measure.autorangev = smub.AUTORANGE_ON') else: smu.write('smub.measure.rangev = ' + str(vRangb)) smu.write('smub.source.leveli = ' + str(iStart)) #compliance values for I and V smu.write('smub.source.limiti = ' + str(i_ccb)) smu.write('smub.source.limitv = ' + str(v_ccb)) else: print(str(source) + " is not a valid source") return #sets the ADC speed to NPLC smu.write('smub.measure.nplc = ' + str(NPLC)) # ------------------------------------------------------------------------- # smua (r) configuration smu.write('smua.source.func = smua.OUTPUT_DCAMPS') if (iRanga == 'AUTO'): smu.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu.write('smua.source.rangei = ' + str(iRanga)) if (vRanga == 'AUTO'): smu.write('smua.source.autorangev = smua.AUTORANGE_ON') else: smu.write('smua.source.rangev = ' + str(vRanga)) smu.write('smua.source.leveli = ' + str(iLevela)) #compliance values for I and V smu.write('smua.source.limiti = ' + str(i_cca)) smu.write('smua.source.limitv = ' + str(v_cca)) if (fourWire == 1): smu.write('smua.sense = smua.SENSE_REMOTE') # ------------------------------------------------------------------------- # Measurement ------------------------------------------------------------- smu.write('smua.source.output = smua.OUTPUT_ON') smu.write('smub.source.output = smub.OUTPUT_ON') print("Start of measurement") if (source == 'V'): v = vStart #startTime = time.time() while (v <= vEnd): smu.write('smub.source.levelv = ' + str(v)) time.sleep(wait_time) smu.write('smub.measure.i(smub.nvbuffer1)') smu.write('smua.measure.r(smua.nvbuffer1)') v += vStep elif (source == 'I'): i = iStart #startTime = time.time() while (i <= iEnd): smu.write('smub.source.leveli = ' + str(i)) time.sleep(wait_time) smu.write('smub.measure.v(smub.nvbuffer1)') smu.write('smua.measure.r(smua.nvbuffer1)') i += iStep #80 is the number of measurements for vbr time.sleep(4 + wait_time * 100) smu.write('smua.source.output = smua.OUTPUT_OFF') smu.write('smub.source.output = smub.OUTPUT_OFF') #endTime = time.time() - startTime print("End of measurement") #print("Elapsed time: " + str(endTime)) #print("Press Enter to continue...") #enter = raw_input() if (source == 'V'): readingsV_temp = readBuffer(smu, 'b')[1] readingsI_temp = readBuffer(smu, 'b')[0] elif (source == 'I'): readingsV_temp = readBuffer(smu, 'b')[0] readingsI_temp = readBuffer(smu, 'b')[1] readingsR_temp = readBuffer(smu, 'a')[0] readingsIR_temp = readBuffer(smu, 'a')[1] readingsV = cast(readingsV_temp) readingsI = cast(readingsI_temp) readingsR = cast(readingsR_temp) readingsIR = cast(readingsIR_temp) return [readingsV, readingsI, readingsR, readingsIR]
def led2(smu_2612b, smu_2400, fourWire, i_cca, v_cca, iRanga, vRanga, iLevela, i_ccb, v_ccb, iRangb, vRangb, v_cc_led, measurements, vPolarization_sipm, iPolarization_led, wait_time): """ Function to control Keithley 2612B (I_sipm and R measurement) and Keithley 2400 (V_led measurement) for fixed current on led and fixed voltage on sipm. This function measures I_sipm as a function of time to check sipm stability. wait_time in this function serves the purpose of "time counter", not to wait between measurements, so total time = measurements*wait_time.led current and sipm voltage can be set on k2612B.py under 'led2' section. Data format of iv data in output is time, I_sipm, V_led. Data format of r data is R_rtd, I_rtd. --------- """ readingsV_led = [] readingsI_sipm = [] readingsR = [] smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2400.write("*RST") smu_2612b.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu_2612b.write('smua.nvbuffer1.clear()') smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.nvbuffer1.appendmode = 1') smu_2612b.write('smub.nvbuffer1.appendmode = 1') smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # Smub (iv) configuration smu_2612b.write('smub.source.func = smub.OUTPUT_DCVOLTS') smu_2612b.write('display.smub.measure.func = display.MEASURE_DCAMPS') if (iRangb == 'AUTO'): smu_2612b.write('smub.measure.autorangei = smub.AUTORANGE_ON') else: smu_2612b.write('smub.measure.rangei = ' + str(iRangb)) if (vRangb == 'AUTO'): smu_2612b.write('smub.source.autorangev = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangev = ' + str(vRangb)) #compliance values for I and V smu_2612b.write('smub.source.limiti = ' + str(i_ccb)) smu_2612b.write('smub.source.limitv = ' + str(v_ccb)) smu_2612b.write('smub.source.levelv = ' + str(vPolarization_sipm)) # ------------------------------------------------------------------------- # smua (r) configuration smu_2612b.write('smua.source.func = smua.OUTPUT_DCAMPS') if (iRanga == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(iRanga)) if (vRanga == 'AUTO'): smu_2612b.write('smua.source.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangev = ' + str(vRanga)) smu_2612b.write('smua.source.leveli = ' + str(iLevela)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cca)) smu_2612b.write('smua.source.limitv = ' + str(v_cca)) if (fourWire == 1): smu_2612b.write('smua.sense = smua.SENSE_REMOTE') # ------------------------------------------------------------------------- # k2400 configuration (Sipm measurement) smu_2400.write(':SENS:FUNC "VOLT"') smu_2400.write(':SOUR:FUNC CURR') smu_2400.write(':SENS:CURR:RANG:AUTO ON') smu_2400.write(':SENS:VOLT:RANG:AUTO ON') #compliance current smu_2400.write(':SOUR:CURR:LEV ' + str(iPolarization_led)) smu_2400.write(':SENS:VOLT:PROT ' + str(v_cc_led)) # ------------------------------------------------------------------------- # Measurement ------------------------------------------------------------- smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2612b.write('smub.source.output = smub.OUTPUT_ON') smu_2400.write('OUTP ON') print("Start of measurement") count = 0 #startTime = time.time() while (count < measurements): smu_2612b.write('smub.measure.i(smub.nvbuffer1)') smu_2612b.write('smua.measure.r(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') led_voltage = float(cast(auxRead)[1]) readingsV_led.append(led_voltage) count += 1 #in this function, wait_time serves to measure time (not to wait #between measurements) time.sleep(wait_time) #time.sleep(4.5) smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2612b.write('smub.source.output = smub.OUTPUT_OFF') smu_2400.write('OUTP OFF') #endTime = time.time() - startTime print("End of measurement") #print("Elapsed time: " + str(endTime)) #print("Press Enter to continue...") #enter = raw_input() readingsI_sipm_temp = readBuffer(smu_2612b, 'b')[0] readingsR_temp = readBuffer(smu_2612b, 'a')[0] readingsIR_temp = readBuffer(smu_2612b, 'a')[1] readingsI_sipm = cast(readingsI_sipm_temp) readingsR = cast(readingsR_temp) readingsIR = cast(readingsIR_temp) return [readingsI_sipm, readingsV_led, readingsR, readingsIR]
def led1(smu_2612b, smu_2400, fourWire, i_cca, v_cca, iRanga, vRanga, iLevela, i_ccb, v_ccb, iRangb, vRangb, iStart, iEnd, iStep, return_sweep, vPolarization_sipm, wait_time): """ Function to control Keithley 2612B (V_led and R measurement) and Keithley 2400 (I_Sipm measurement). This function performs a current sweep on the led while measuring I on Sipm polarized with a fixed voltage. Voltage can be set on k2612B.py under 'led1' section. Format of iv data is I_sipm, V_led, I_led. Data format of r data is R_rtd, I_rtd. --------- """ readingsI_sipm = [] readingsV_led = [] readingsI_led = [] readingsR = [] smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2400.write("*RST") smu_2612b.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu_2612b.write('smua.nvbuffer1.clear()') smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.nvbuffer1.appendmode = 1') smu_2612b.write('smub.nvbuffer1.appendmode = 1') smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # Smub (iv) configuration smu_2612b.write('smub.source.func = smub.OUTPUT_DCAMPS') #smu_2612b.write('display.smub.measure.func = display.MEASURE_DCVOLTS') if (iRangb == 'AUTO'): smu_2612b.write('smub.source.autorangei = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangei = ' + str(iRangb)) if (vRangb == 'AUTO'): smu_2612b.write('smub.measure.autorangev = smub.AUTORANGE_ON') else: smu_2612b.write('smub.measure.rangev = ' + str(vRangb)) #compliance values for I and V smu_2612b.write('smub.source.limiti = ' + str(i_ccb)) smu_2612b.write('smub.source.limitv = ' + str(v_ccb)) # ------------------------------------------------------------------------- # smua (r) configuration smu_2612b.write('smua.source.func = smua.OUTPUT_DCAMPS') if (iRanga == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(iRanga)) if (vRanga == 'AUTO'): smu_2612b.write('smua.source.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangev = ' + str(vRanga)) smu_2612b.write('smua.source.leveli = ' + str(iLevela)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cca)) smu_2612b.write('smua.source.limitv = ' + str(v_cca)) if (fourWire == 1): smu_2612b.write('smua.sense = smua.SENSE_REMOTE') # ------------------------------------------------------------------------- # k2400 configuration (Sipm measurement) smu_2400.write(':SENS:FUNC "CURR"') smu_2400.write(':SOUR:FUNC VOLT') smu_2400.write(':SENS:CURR:RANG:AUTO ON') smu_2400.write(':SENS:VOLT:RANG:AUTO ON') #compliance current smu_2400.write(':SOUR:VOLT:LEV ' + str(vPolarization_sipm)) #protection for sipm is 18mA smu_2400.write('SENS:CURR:PROT ' + str(0.018)) # ------------------------------------------------------------------------- # Measurement ------------------------------------------------------------- smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2612b.write('smub.source.output = smub.OUTPUT_ON') smu_2400.write('OUTP ON') print("Start of measurement") i = iStart #startTime = time.time() while (i <= iEnd): smu_2612b.write('smub.source.leveli = ' + str(i)) time.sleep(wait_time) smu_2612b.write('smub.measure.v(smub.nvbuffer1)') smu_2612b.write('smua.measure.r(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') sipm_current = float(cast(auxRead)[1]) readingsI_sipm.append(sipm_current) if i != iEnd: i += iStep i -= iStep if return_sweep == 1: while (i >= iStart): smu_2612b.write('smub.source.leveli = ' + str(i)) time.sleep(wait_time) smu_2612b.write('smub.measure.v(smub.nvbuffer1)') smu_2612b.write('smua.measure.r(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') sipm_current = float(cast(auxRead)[1]) readingsI_sipm.append(sipm_current) i -= iStep smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2612b.write('smub.source.output = smub.OUTPUT_OFF') smu_2400.write('OUTP OFF') print("End of measurement") readingsI_led_temp = readBuffer(smu_2612b, 'b')[1] readingsV_led_temp = readBuffer(smu_2612b, 'b')[0] readingsR_temp = readBuffer(smu_2612b, 'a')[0] readingsIR_temp = readBuffer(smu_2612b, 'a')[1] readingsI_led = cast(readingsI_led_temp) readingsV_led = cast(readingsV_led_temp) readingsR = cast(readingsR_temp) readingsIR = cast(readingsIR_temp) return [ readingsI_sipm, readingsV_led, readingsI_led, readingsR, readingsIR ]
def IVComplete(smu_2612b, config): """ --------- """ [ i_cc_sipm, v_cc_sipm, i_rang_sipm, v_rang_sipm, v_level_sipm, i_cc_led, v_cc_led, i_rang_led, v_rang_led, vStart, vEnd, return_sweep, N, points, delay, curves ] = config i_led_level = 500 * P('n') NPLC = round(points * 200 * P('u') * 50, 2) smu_2612b.write('reset()') smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2612b.write('format.data = format.ASCII') smu_2612b.write('iv_buffer = smua.makebuffer(%s)' % 2 * N) # Buffer operations ------------------------------------------------------- # smu_2612b.write('smua.nvbuffer1.clear()') # smu_2612b.write('smub.nvbuffer1.clear()') # # smu_2612b.write('smua.nvbuffer1.appendmode = 1') # # smu_2612b.write('smua.nvbuffer1.fillcount = ' + str(2*N)) # # smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') # # smu_2612b.write('smua.measure.count = 1') # # smu_2612b.write('smua.nvbuffer1.clear()') # smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.iv_buffer.appendmode = 1') smu_2612b.write('smua.iv_buffer.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') # ------------------------------------------------------------------------- # smua configuration (SiPM) smu_2612b.write('smua.source.func = smua.OUTPUT_DCVOLTS') smu_2612b.write('display.smua.measure.func = display.MEASURE_DCAMPS') if (i_rang_sipm == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(i_rang_sipm)) if (v_rang_sipm == 'AUTO'): smu_2612b.write('smua.measure.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.measure.rangev = ' + str(v_rang_sipm)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cc_sipm)) smu_2612b.write('smua.source.limitv = ' + str(v_cc_sipm)) smu_2612b.write('smua.measure.nplc = ' + str(NPLC)) smu_2612b.write('smua.measure.delay = ' + str(delay)) # ------------------------------------------------------------------------- # smua configuration (SiPM) smu_2612b.write('smub.source.func = smub.OUTPUT_DCAMPS') smu_2612b.write('display.smub.measure.func = display.MEASURE_DCVOLTS') if (i_rang_led == 'AUTO'): smu_2612b.write('smub.source.autorangei = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangei = ' + str(i_rang_led)) if (v_rang_led == 'AUTO'): smu_2612b.write('smub.measure.autorangev = smub.AUTORANGE_ON') else: smu_2612b.write('smub.measure.rangev = ' + str(v_rang_led)) #compliance values for I and V smu_2612b.write('smub.source.limiti = ' + str(i_cc_led)) smu_2612b.write('smub.source.limitv = ' + str(v_cc_led)) smu_2612b.write('smub.source.leveli = ' + str(0)) import numpy as np # allowed voltage values in sweep b = np.arange(0, N, 1) v_sipm_values1 = [vStart - (vStart) / N * i for i in b] v_sipm_values2 = [20 + (vEnd - 20) / N * i for i in b] v_sipm_values = np.concatenate((v_sipm_values1, v_sipm_values2)) smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2612b.write('smub.source.output = smub.OUTPUT_ON') print("Start of measurement") for i in range(0, curves): #startTime = time.time() for j in range(len(v_sipm_values)): smu_2612b.write('smua.source.levelv = ' + str(v_sipm_values[j])) #smu_2612b.write('smua.measure.i(smua.nvbuffer1)') smu_2612b.write('smua.measure.i(smua.iv_buffer)') time.sleep(delay) if j != len(v_sipm_values) - 1: if (v_sipm_values[j + 1] - v_sipm_values[j]) > 10: smu_2612b.write('smub.source.leveli = ' + str(i_led_level)) smu_2612b.write('waitcomplete()') smu_2612b.write('smub.source.leveli = ' + str(0)) if return_sweep == 1: n = len(v_sipm_values) for j in range(len(v_sipm_values)): smu_2612b.write('smua.source.levelv = ' + str(v_sipm_values[n - j - 1])) #smu_2612b.write('smua.measure.i(smua.nvbuffer1)') smu_2612b.write('smua.measure.i(smua.iv_buffer)') time.sleep(delay) if j != len(v_sipm_values) - 1: if (v_sipm_values[j + 1] - v_sipm_values[j]) > 10: smu_2612b.write('smub.source.leveli = ' + str(i_led_level)) smu_2612b.write('waitcomplete()') smu_2612b.write('smub.source.leveli = ' + str(0)) time.sleep(5) smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2612b.write('smub.source.output = smub.OUTPUT_OFF') print("End of measurement") # readingsV_sipm = cast(readBuffer(smu_2612b, 'a')[1]) # readingsI_sipm = cast(readBuffer(smu_2612b, 'a')[0]) readingsV_sipm = cast(readBuffer(smu_2612b, 'a', 'iv_buffer')[1]) readingsI_sipm = cast(readBuffer(smu_2612b, 'a', 'iv_buffer')[0]) smu_2612b.write('iv_buffer = nil') return [readingsV_sipm, readingsI_sipm]
def LEDTest(smu_2612b, config): """ --------- """ [ i_cc_sipm, v_cc_sipm, i_rang_sipm, v_rang_sipm, v_level_sipm, i_cc_led, v_cc_led, i_rang_led, v_rang_led, _, _, return_sweep, N, points, delay, curves ] = config iStart = 0 iEnd = 800 * P('n') NPLC = round(points * 200 * P('u') * 50, 2) smu_2612b.write('reset()') smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2612b.write('format.data = format.ASCII') smu_2612b.write('led_buffer1 = smua.makebuffer(%s)' % N) smu_2612b.write('led_buffer2 = smub.makebuffer(%s)' % N) # Buffer operations ------------------------------------------------------- # smu_2612b.write('smua.nvbuffer1.clear()') # smu_2612b.write('smub.nvbuffer1.clear()') # # smu_2612b.write('smua.nvbuffer1.appendmode = 1') # smu_2612b.write('smub.nvbuffer1.appendmode = 1') # # smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') # smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') # # smu_2612b.write('smua.nvbuffer1.fillcount = ' + str(N)) # smu_2612b.write('smub.nvbuffer1.fillcount = ' + str(N)) # # smu_2612b.write('smua.measure.count = 1') # smu_2612b.write('smub.measure.count = 1') # # # smu_2612b.write('smua.nvbuffer1.clear()') # smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('led_buffer1.appendmode = 1') smu_2612b.write('led_buffer2.appendmode = 1') smu_2612b.write('led_buffer1.collectsourcevalues = 1') smu_2612b.write('led_buffer2.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # smua configuration (SiPM) smu_2612b.write('smua.source.func = smua.OUTPUT_DCVOLTS') smu_2612b.write('display.smua.measure.func = display.MEASURE_DCAMPS') if (i_rang_sipm == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(i_rang_sipm)) if (v_rang_sipm == 'AUTO'): smu_2612b.write('smua.measure.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.measure.rangev = ' + str(v_rang_sipm)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cc_sipm)) smu_2612b.write('smua.source.limitv = ' + str(v_cc_sipm)) smu_2612b.write('smua.measure.nplc = ' + str(NPLC)) smu_2612b.write('smua.source.levelv = 30') # ------------------------------------------------------------------------- # smub configuration (LED) smu_2612b.write('smub.source.func = smub.OUTPUT_DCAMPS') smu_2612b.write('display.smub.measure.func = display.MEASURE_DCVOLTS') if (i_rang_led == 'AUTO'): smu_2612b.write('smub.source.autorangei = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangei = ' + str(i_rang_led)) if (v_rang_led == 'AUTO'): smu_2612b.write('smub.measure.autorangev = smub.AUTORANGE_ON') else: smu_2612b.write('smub.measure.rangev = ' + str(v_rang_led)) #compliance values for I and V smu_2612b.write('smub.source.limiti = ' + str(i_cc_led)) smu_2612b.write('smub.source.limitv = ' + str(v_cc_led)) smu_2612b.write('smub.measure.nplc = ' + str(NPLC)) smu_2612b.write('smub.measure.delay = ' + str(delay)) import numpy as np # allowed voltage values in sweep b = np.arange(0, N, 1) i_led_values = [iStart + (iEnd - iStart) / N * i for i in b] #can code i_led_values with log scale too smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2612b.write('smub.source.output = smub.OUTPUT_ON') print("Start of measurement") for i in range(0, curves): #startTime = time.time() for j in range(len(i_led_values)): smu_2612b.write('smub.source.leveli = ' + str(i_led_values[j])) smu_2612b.write('smua.measure.i(led_buffer1)') smu_2612b.write('smub.measure.v(led_buffer2)') # smu_2612b.write('smua.measure.i(smua.nvbuffer1)') # smu_2612b.write('smub.measure.v(smub.nvbuffer1)') time.sleep(delay) smu_2612b.write('waitcomplete()') if return_sweep == 1: n = len(i_led_values) for j in range(len(i_led_values)): smu_2612b.write('smub.source.leveli = ' + str(i_led_values[n - j - 1])) smu_2612b.write('smua.measure.i(led_buffer1)') smu_2612b.write('smub.measure.v(led_buffer2)') # smu_2612b.write('smua.measure.i(smua.nvbuffer1)') # smu_2612b.write('smub.measure.v(smub.nvbuffer1)') time.sleep(delay) smu_2612b.write('waitcomplete()') smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2612b.write('smub.source.output = smub.OUTPUT_OFF') print("End of measurement") time.sleep(3) readingsI_sipm = cast(readBuffer(smu_2612b, 'a', 'led_buffer1')[0]) readingsI_led = cast(readBuffer(smu_2612b, 'b', 'led_buffer2')[1]) readingsV_led = cast(readBuffer(smu_2612b, 'b', 'led_buffer2')[0]) smu_2612b.write('led_buffer1 = nil') smu_2612b.write('led_buffer2 = nil') return [readingsI_sipm, readingsI_led, readingsV_led]
def DarkCurrent(smu_2612b, config): """ --------- """ [ i_cc_sipm, v_cc_sipm, i_rang_sipm, v_rang_sipm, v_level_sipm, i_cc_led, v_cc_led, i_rang_led, v_rang_led, _, _, return_sweep, N, points, delay, curves ] = config NPLC = 25 smu_2612b.write('reset()') smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2612b.write('format.data = format.ASCII') smu_2612b.write('dark_buffer = smua.makebuffer(10)') # Buffer operations ------------------------------------------------------- # smu_2612b.write('smua.nvbuffer1.clear()') # smu_2612b.write('smub.nvbuffer1.clear()') # # smu_2612b.write('smua.nvbuffer1.appendmode = 1') # # smu_2612b.write('smua.nvbuffer1.fillcount = 10') # # smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') # # smu_2612b.write('smua.measure.count = 10') # # smu_2612b.write('smua.nvbuffer1.clear()') # smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('dark_buffer.appendmode = 1') smu_2612b.write('dark_buffer.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 10') # ------------------------------------------------------------------------- # smua configuration (SiPM) smu_2612b.write('smua.source.func = smua.OUTPUT_DCVOLTS') smu_2612b.write('display.smua.measure.func = display.MEASURE_DCAMPS') if (i_rang_sipm == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(i_rang_sipm)) if (v_rang_sipm == 'AUTO'): smu_2612b.write('smua.measure.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.measure.rangev = ' + str(v_rang_sipm)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cc_sipm)) smu_2612b.write('smua.source.limitv = ' + str(v_cc_sipm)) smu_2612b.write('smua.measure.nplc = ' + str(NPLC)) smu_2612b.write('smua.source.levelv = 30') smu_2612b.write('smua.measure.delay = ' + str(delay)) # ------------------------------------------------------------------------- smu_2612b.write('smua.source.output = smua.OUTPUT_ON') print("Start of measurement") smu_2612b.write('smua.measure.i(dark_buffer)') #smu_2612b.write('smua.measure.i(smua.nvbuffer1)') smu_2612b.write('waitcomplete()') smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') print("End of measurement") time.sleep(5) #readingsI_sipm = cast(readBuffer(smu_2612b, 'a')[0]) readingsI_sipm = cast(readBuffer(smu_2612b, 'a', 'dark_buffer')[0]) smu_2612b.write('dark_buffer = nil') return readingsI_sipm
def IVComplete(smu_2612b, smu_2400, config): """ --------- """ [i_cc_sipm, v_cc_sipm, i_rang_sipm, v_rang_sipm, v_level_sipm, i_cc_led, v_cc_led, i_rang_led, v_rang_led, vStart, vEnd, fourWire, i_cc_rtd, v_cc_rtd, i_rang_rtd, r_rang_rtd, i_level_rtd, return_sweep, N, points, delay, curves] = config i_led_level = 210*P('u') NPLC = round(points*200*P('u')*50, 2) readingsR = [] smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2400.write("*RST") smu_2612b.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu_2612b.write('smua.nvbuffer1.clear()') smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.nvbuffer1.appendmode = 1') smu_2612b.write('smub.nvbuffer1.appendmode = 1') smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # smua configuration (SiPM) smu_2612b.write('smua.source.func = smua.OUTPUT_DCVOLTS') smu_2612b.write('display.smua.measure.func = display.MEASURE_DCAMPS') if (i_rang_sipm == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(i_rang_sipm)) if (v_rang_sipm == 'AUTO'): smu_2612b.write('smua.measure.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.measure.rangev = ' + str(v_rang_sipm)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cc_sipm)) smu_2612b.write('smua.source.limitv = ' + str(v_cc_sipm)) smu_2612b.write('smua.measure.nplc = ' + str(NPLC)) smu_2612b.write('smua.measure.delay = ' + str(delay)) # ------------------------------------------------------------------------- # smua configuration (SiPM) smu_2612b.write('smub.source.func = smub.OUTPUT_DCAMPS') smu_2612b.write('display.smub.measure.func = display.MEASURE_DCVOLTS') if (i_rang_led == 'AUTO'): smu_2612b.write('smub.source.autorangei = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangei = ' + str(i_rang_led)) if (v_rang_led == 'AUTO'): smu_2612b.write('smub.measure.autorangev = smub.AUTORANGE_ON') else: smu_2612b.write('smub.measure.rangev = ' + str(v_rang_led)) #compliance values for I and V smu_2612b.write('smub.source.limiti = ' + str(i_cc_led)) smu_2612b.write('smub.source.limitv = ' + str(v_cc_led)) smu_2612b.write('smub.source.leveli = ' + str(0)) # ------------------------------------------------------------------------- # k2400 configuration (R measurement) smu_2400.write(':SENS:FUNC "RES"') smu_2400.write(':SOUR:FUNC CURR') smu_2400.write('SENS:RES:MODE MAN') if (i_rang_rtd == 'AUTO'): smu_2400.write(':SOUR:CURR:RANG:AUTO ON') else: smu_2400.write(':SOUR:CURR:RANG ' + str(i_rang_rtd)) if (r_rang_rtd == 'AUTO'): smu_2400.write(':SENS:RES:RANG:AUTO ON') else: smu_2400.write(':SENS:RES:RANG ' + str(r_rang_rtd)) smu_2400.write(':SOUR:CURR:LEV ' + str(i_level_rtd)) smu_2400.write('SENS:CURR:PROT ' + str(i_cc_rtd)) smu_2400.write('SENS:VOLT:PROT ' + str(v_cc_rtd)) #smu_2400.write('SENS:CURR:NPLC ' + str(1)) if fourWire: smu_2400.write(':SYST:RSEN ON') import numpy as np # allowed voltage values in sweep b = np.arange(0, N, 1) v_sipm_values1 = [vStart - (vStart)/N*i for i in b] v_sipm_values2 = [20 + (vEnd - 20)/N*i for i in b] v_sipm_values = np.concatenate((v_sipm_values1, v_sipm_values2)) smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2400.write('OUTP ON') print("Start of measurement") for i in range(0, curves): #startTime = time.time() for j in range(len(v_sipm_values)): smu_2612b.write('smua.source.levelv = ' + str(v_sipm_values[j])) smu_2612b.write('smua.measure.i(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') rtd_r = float(cast(auxRead)[2]) readingsR.append(rtd_r) time.sleep(delay + NPLC/50.) if j != len(v_sipm_values) - 1: if (v_sipm_values[j + 1] - v_sipm_values[j]) > 10: smu_2612b.write('smub.source.output = smub.OUTPUT_ON') smu_2612b.write('smub.source.leveli = ' + str(i_led_level)) smu_2612b.write('waitcomplete()') smu_2612b.write('smub.source.leveli = ' + str(0)) if return_sweep == 1: n = len(v_sipm_values) for j in range(len(v_sipm_values)): smu_2612b.write('smua.source.levelv = ' + str(v_sipm_values[n - j - 1])) smu_2612b.write('smua.measure.i(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') rtd_r = float(cast(auxRead)[2]) readingsR.append(rtd_r) time.sleep(delay + NPLC/50.) if j != len(v_sipm_values) - 1: if (v_sipm_values[j + 1] - v_sipm_values[j]) > 10: smu_2612b.write('smub.source.leveli = ' + str(i_led_level)) smu_2612b.write('waitcomplete()') smu_2612b.write('smub.source.leveli = ' + str(0)) smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2612b.write('smub.source.output = smub.OUTPUT_OFF') smu_2400.write('OUTP OFF') print("End of measurement") readingsV_sipm = cast(readBuffer(smu_2612b, 'a')[1]) readingsI_sipm = cast(readBuffer(smu_2612b, 'a')[0]) return [readingsV_sipm, readingsI_sipm, readingsR]
def DarkCurrent(smu_2612b, smu_2400, config): """ --------- """ [i_cc_sipm, v_cc_sipm, i_rang_sipm, v_rang_sipm, v_level_sipm, i_cc_led, v_cc_led, i_rang_led, v_rang_led, vStart, vEnd, fourWire, i_cc_rtd, v_cc_rtd, i_rang_rtd, r_rang_rtd, i_level_rtd, return_sweep, N, points, delay, curves] = config NPLC = 25 readingsR = [] smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2400.write("*RST") smu_2612b.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu_2612b.write('smua.nvbuffer1.clear()') smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.nvbuffer1.appendmode = 1') smu_2612b.write('smub.nvbuffer1.appendmode = 1') smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # smua configuration (SiPM) smu_2612b.write('smua.source.func = smua.OUTPUT_DCVOLTS') smu_2612b.write('display.smua.measure.func = display.MEASURE_DCAMPS') if (i_rang_sipm == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(i_rang_sipm)) if (v_rang_sipm == 'AUTO'): smu_2612b.write('smua.measure.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.measure.rangev = ' + str(v_rang_sipm)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cc_sipm)) smu_2612b.write('smua.source.limitv = ' + str(v_cc_sipm)) smu_2612b.write('smua.measure.nplc = ' + str(NPLC)) smu_2612b.write('smua.source.levelv = 30') smu_2612b.write('smua.measure.delay = ' + str(delay)) # ------------------------------------------------------------------------- # k2400 configuration (R measurement) smu_2400.write(':SENS:FUNC "RES"') smu_2400.write(':SOUR:FUNC CURR') smu_2400.write('SENS:RES:MODE MAN') if (i_rang_rtd == 'AUTO'): smu_2400.write(':SOUR:CURR:RANG:AUTO ON') else: smu_2400.write(':SOUR:CURR:RANG ' + str(i_rang_rtd)) if (r_rang_rtd == 'AUTO'): smu_2400.write(':SENS:RES:RANG:AUTO ON') else: smu_2400.write(':SENS:RES:RANG ' + str(r_rang_rtd)) smu_2400.write(':SOUR:CURR:LEV ' + str(i_level_rtd)) smu_2400.write('SENS:CURR:PROT ' + str(i_cc_rtd)) smu_2400.write('SENS:VOLT:PROT ' + str(v_cc_rtd)) #smu_2400.write('SENS:CURR:NPLC ' + str(1)) if fourWire: smu_2400.write(':SYST:RSEN ON') smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2400.write('OUTP ON') print("Start of measurement") for j in range(10): smu_2612b.write('smua.measure.i(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') rtd_r = float(cast(auxRead)[2]) readingsR.append(rtd_r) time.sleep(delay + NPLC/50.) smu_2612b.write('waitcomplete()') smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2400.write('OUTP OFF') print("End of measurement") readingsI_sipm = cast(readBuffer(smu_2612b, 'a')[0]) return [readingsI_sipm, readingsR]
def led4(smu_2612b, smu_2400, fourWire, i_cca, v_cca, iRanga, vRanga, iLevela, i_ccb, v_ccb, iRangb, vRangb, iStart, iEnd, iStep, return_sweep, vPolarization_sipm, wait_time, tolerance): """ Function to control Keithley 2612B (I_sipm and R measurement) and Keithley 2400 (I_led measurement). This function performs a voltage sweep on the sipm while measuring I, with led polarized with a fixed current. Format of iv data is I_led, V_sipm, I_sipm. Data format of r data is R_rtd, I_rtd. --------- """ ######---------- Set R gap for measurment -----------------###### readingsI_led = [] readingsV_led = [] readingsI_sipm = [] readingsR = [] tiempo = [] smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2400.write("*RST") smu_2612b.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu_2612b.write('smua.nvbuffer1.clear()') smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.nvbuffer1.appendmode = 1') smu_2612b.write('smub.nvbuffer1.appendmode = 1') smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') smu_2612b.write('smua.source.func = smua.OUTPUT_DCAMPS') if (iRanga == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(iRanga)) if (vRanga == 'AUTO'): smu_2612b.write('smua.source.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangev = ' + str(vRanga)) smu_2612b.write('smua.source.leveli = ' + str(iLevela)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cca)) smu_2612b.write('smua.source.limitv = ' + str(v_cca)) if (fourWire == 1): smu_2612b.write('smua.sense = smua.SENSE_REMOTE') #--------------------------------------------------------------------------- smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2400.write("*RST") smu_2612b.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu_2612b.write('smua.nvbuffer1.clear()') smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.nvbuffer1.appendmode = 1') smu_2612b.write('smub.nvbuffer1.appendmode = 1') smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # Smub (iv) configuration smu_2612b.write('smub.source.func = smub.OUTPUT_DCAMPS') smu_2612b.write('display.smub.measure.func = display.MEASURE_DCVOLTS') if (iRangb == 'AUTO'): smu_2612b.write('smub.source.autorangei = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangei = ' + str(iRangb)) if (vRangb == 'AUTO'): smu_2612b.write('smub.measure.autorangev = smub.AUTORANGE_ON') else: smu_2612b.write('smub.measure.rangev = ' + str(vRangb)) #compliance values for I and V smu_2612b.write('smub.source.limiti = ' + str(i_ccb)) smu_2612b.write('smub.source.limitv = ' + str(v_ccb)) # ------------------------------------------------------------------------- # smua (r) configuration smu_2612b.write('smua.source.func = smua.OUTPUT_DCAMPS') if (iRanga == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(iRanga)) if (vRanga == 'AUTO'): smu_2612b.write('smua.source.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangev = ' + str(vRanga)) smu_2612b.write('smua.source.leveli = ' + str(iLevela)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cca)) smu_2612b.write('smua.source.limitv = ' + str(v_cca)) if (fourWire == 1): smu_2612b.write('smua.sense = smua.SENSE_REMOTE') # ------------------------------------------------------------------------- # k2400 configuration (Sipm measurement) smu_2400.write(':SENS:FUNC "CURR"') smu_2400.write(':SOUR:FUNC VOLT') smu_2400.write(':SENS:CURR:RANG:AUTO ON') smu_2400.write(':SENS:VOLT:RANG:AUTO ON') #compliance current smu_2400.write(':SOUR:VOLT:LEV ' + str(vPolarization_sipm)) #protection for sipm is 18mA smu_2400.write('SENS:CURR:PROT ' + str(0.018)) print("Measuring temperature") condition = thermostatInitial(smu_2612b, tolerance) print("Temperature: " + str(condition - tolerance) + " \pm " + str(tolerance)) print("Start of measurement") if return_sweep == 1: print("Return active") smu_2612b.write('smub.source.output = smub.OUTPUT_ON') smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2400.write('OUTP ON') smu_2612b.write('smub.source.leveli = ' + '0') i = iStart while (i <= iEnd): smu_2612b.write('smua.measure.r(smua.nvbuffer1)') R_condition = cast(readBuffer(smu_2612b, 'a')[0]) temp = [] if R_condition[-1] < (condition + tolerance) and R_condition[-1] > ( condition - tolerance): print(i) smu_2612b.write('smub.source.leveli = ' + str(i)) time.sleep(wait_time) smu_2612b.write('smub.measure.v(smub.nvbuffer1)') smu_2612b.write('smua.measure.r(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') sipm_current = float(cast(auxRead)[1]) smu_2612b.write('smub.source.leveli = ' + '0') readingsR_temp = readBuffer(smu_2612b, 'a')[0] temp = cast(readingsR_temp) readingsR.append(temp[-1]) tiempo.append(time.time()) readingsI_sipm.append(sipm_current) i += iStep #smu_2612b.write('smua.nvbuffer1.clear()') elif R_condition[-1] < (condition - tolerance): smu_2612b.write('smub.source.leveli = ' + '0.080') time.sleep(1) smu_2612b.write('smub.source.leveli = ' + '0') else: time.sleep(3) i -= iStep if return_sweep == 1: while (i >= iStart): smu_2612b.write('smua.measure.r(smua.nvbuffer1)') R_condition = cast(readBuffer(smu_2612b, 'a')[0]) temp = [] if R_condition[-1] < (condition + tolerance) and R_condition[-1] > (condition - tolerance): print(i) smu_2612b.write('smub.source.leveli = ' + str(i)) time.sleep(wait_time) smu_2612b.write('smub.measure.v(smub.nvbuffer1)') smu_2612b.write('smua.measure.r(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') sipm_current = float(cast(auxRead)[1]) smu_2612b.write('smub.source.leveli = ' + '0') readingsR_temp = readBuffer(smu_2612b, 'a')[0] temp = cast(readingsR_temp) readingsR.append(temp[-1]) tiempo.append(time.time()) readingsI_sipm.append(sipm_current) i -= iStep elif R_condition[-1] < (condition - tolerance): smu_2612b.write('smub.source.leveli = ' + '0.140') time.sleep(1) smu_2612b.write('smub.source.leveli = ' + '0') else: time.sleep(3) smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2612b.write('smub.source.output = smub.OUTPUT_OFF') smu_2400.write('OUTP OFF') print("End of measurement") readingsI_led_temp = readBuffer(smu_2612b, 'b')[1] readingsV_led_temp = readBuffer(smu_2612b, 'b')[0] readingsI_led = cast(readingsI_led_temp) readingsV_led = cast(readingsV_led_temp) return [readingsI_sipm, readingsV_led, readingsI_led, readingsR]
def led3(smu_2612b, smu_2400, fourWire, i_cca, v_cca, iRanga, vRanga, iLevela, i_ccb, v_ccb, iRangb, vRangb, vStart, vEnd, vStep, v_cc_led, return_sweep, iPolarization_led, wait_time): """ Function to control Keithley 2612B (I_sipm and R measurement) and Keithley 2400 (I_led measurement). This function performs a voltage sweep on the sipm while measuring I, with led polarized with a fixed current. Format of iv data is I_led, V_sipm, I_sipm. Data format of r data is R_rtd, I_rtd. --------- """ readingsI_sipm = [] readingsV_sipm = [] readingsI_led = [] readingsR = [] smu_2612b.write('smua.reset()') smu_2612b.write('smub.reset()') smu_2400.write("*RST") smu_2612b.write('format.data = format.ASCII') # Buffer operations ------------------------------------------------------- smu_2612b.write('smua.nvbuffer1.clear()') smu_2612b.write('smub.nvbuffer1.clear()') smu_2612b.write('smua.nvbuffer1.appendmode = 1') smu_2612b.write('smub.nvbuffer1.appendmode = 1') smu_2612b.write('smua.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smub.nvbuffer1.collectsourcevalues = 1') smu_2612b.write('smua.measure.count = 1') smu_2612b.write('smub.measure.count = 1') # ------------------------------------------------------------------------- # Smub (iv) configuration smu_2612b.write('smub.source.func = smub.OUTPUT_DCVOLTS') smu_2612b.write('display.smub.measure.func = display.MEASURE_DCAMPS') if (iRangb == 'AUTO'): smu_2612b.write('smub.source.autorangei = smub.AUTORANGE_ON') else: smu_2612b.write('smub.source.rangei = ' + str(iRangb)) if (vRangb == 'AUTO'): smu_2612b.write('smub.measure.autorangev = smub.AUTORANGE_ON') else: smu_2612b.write('smub.measure.rangev = ' + str(vRangb)) #compliance values for I and V smu_2612b.write('smub.source.limiti = ' + str(i_ccb)) smu_2612b.write('smub.source.limitv = ' + str(v_ccb)) # ------------------------------------------------------------------------- # smua (r) configuration smu_2612b.write('smua.source.func = smua.OUTPUT_DCAMPS') if (iRanga == 'AUTO'): smu_2612b.write('smua.source.autorangei = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangei = ' + str(iRanga)) if (vRanga == 'AUTO'): smu_2612b.write('smua.source.autorangev = smua.AUTORANGE_ON') else: smu_2612b.write('smua.source.rangev = ' + str(vRanga)) smu_2612b.write('smua.source.leveli = ' + str(iLevela)) #compliance values for I and V smu_2612b.write('smua.source.limiti = ' + str(i_cca)) smu_2612b.write('smua.source.limitv = ' + str(v_cca)) if (fourWire == 1): smu_2612b.write('smua.sense = smua.SENSE_REMOTE') # ------------------------------------------------------------------------- # k2400 configuration (Sipm measurement) smu_2400.write(':SENS:FUNC "VOLT"') smu_2400.write(':SOUR:FUNC CURR') smu_2400.write(':SENS:CURR:RANG:AUTO ON') smu_2400.write(':SENS:VOLT:RANG:AUTO ON') #compliance current smu_2400.write(':SOUR:CURR:LEV ' + str(iPolarization_led)) #protection for sipm is 18mA smu_2400.write('SENS:VOLT:PROT ' + str(v_cc_led)) smu_2612b.write('smua.source.output = smua.OUTPUT_ON') smu_2612b.write('smub.source.output = smub.OUTPUT_ON') smu_2400.write('OUTP ON') print("Start of measurement") v = vStart #startTime = time.time() while (v <= vEnd): smu_2612b.write('smub.source.levelv = ' + str(v)) time.sleep(wait_time) smu_2612b.write('smub.measure.i(smub.nvbuffer1)') smu_2612b.write('smua.measure.r(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') led_current = float(cast(auxRead)[1]) readingsI_led.append(led_current) if v != vEnd: v += vStep v -= vStep if return_sweep == 1: while (v >= vStart): smu_2612b.write('smub.source.levelv = ' + str(v)) time.sleep(wait_time) smu_2612b.write('smub.measure.i(smub.nvbuffer1)') smu_2612b.write('smua.measure.r(smua.nvbuffer1)') auxRead = smu_2400.query(':READ?') led_current = float(cast(auxRead)[1]) readingsI_led.append(led_current) v -= vStep smu_2612b.write('smua.source.output = smua.OUTPUT_OFF') smu_2612b.write('smub.source.output = smub.OUTPUT_OFF') smu_2400.write('OUTP OFF') print("End of measurement") readingsI_sipm_temp = readBuffer(smu_2612b, 'b')[0] readingsV_sipm_temp = readBuffer(smu_2612b, 'b')[1] readingsR_temp = readBuffer(smu_2612b, 'a')[0] readingsIR_temp = readBuffer(smu_2612b, 'a')[1] readingsI_sipm = cast(readingsI_sipm_temp) readingsV_sipm = cast(readingsV_sipm_temp) readingsR = cast(readingsR_temp) readingsIR = cast(readingsIR_temp) return [ readingsI_led, readingsV_sipm, readingsI_sipm, readingsR, readingsIR ]