END = False
INI_time = time.time()
TEMPERATURE = np.empty(shape=(0))
RESISTANCE = np.empty(shape=(0))



while (not END) and (low_temp <= mytriton.GetTemperature(8) <= high_temp):


	plt_Vg=np.array([])
	plt_resistance=np.array([])
	plt_leak_curr=np.array([])

	dev.RampVoltage(DAC,1000*shift_voltage/s1h_gain,tt=ramp_time, steps = 20) # the factor 1000 is applied as the unit reads in mV.

	start_T = mytriton.GetTemperature(8)
	
	for count,gate_voltage in enumerate(pattern['ramp_pattern']): # ramping up the gate voltage

		time = time.time() - INI_time
			
		dev.RampVoltage(DAC,1000*gate_voltage/s1h_gain,tt=ramp_time, steps = 5) # the factor 1000 is applied as the unit reads in mV.
		leakage_current = 1e9*gate_leakage_v_I_conversion*float(vmeasure.query('READ?')) # in the units of [nA]

		print ('\n\n------------------------')

		if np.abs(leakage_current) > safe_gate_current:
			GATE_LEAKAGE = True
			print ('gate current', 1e9*leakage_current, ' nA exceeds safe gate current limit reaching the gate voltage of', gate_voltage, 'V.')
Exemple #2
0
applied_gate_array = np.array([])
I_leakage_array = np.array([])


##Inititalizing the devices
ivvi = IVVI_DAC(addr='COM5', verb=True)
ivvi.RampAllZero(tt=2.)

vmeas = stlab.adi(addr='TCPIP::192.168.1.105::INSTR') #for measuring the voltage accross the sample
v_gateleakage = stlab.adi(addr='TCPIP::192.168.1.162::INSTR') #for measuring the leakage current

## Estimating for the internal resistances
print ('#### Calibration for the internal resistances ####')
input ('Short the S3b_output and M1b_input (pin #4), Press Enter to continue...')

ivvi.RampVoltage(S3b_dac,V_bias/S3b_range*1e3,tt=0.5, steps = 5) ##ramping this voltage in 20seconds
I_cal_p = float(vmeas.query('READ?')) / M1b_total_gain

ivvi.RampVoltage(S3b_dac,-V_bias/S3b_range*1e3,tt=1, steps = 5) ##ramping this voltage in 20seconds
I_cal_n = float(vmeas.query('READ?')) / M1b_total_gain

R_cal = 2*V_bias/(I_cal_p-I_cal_n)

print ('V_bias:',V_bias)
print('I_cal_p:',I_cal_p)
print('I_cal_n',I_cal_n)

print ('#### Calibration finished ####')
print ('Total internal resistance measures: {:.2f}kOhm'.format(R_cal/1000))
input ('Connect to the device, Press Enter to continue...')
Exemple #3
0
t0 = INI_time
T0 = 300

TIME = np.empty(shape=(0))
TEMPERATURE = np.empty(shape=(0))
RESISTANCE = np.empty(shape=(0))

## Estimating for the internal resistances
if initial_calibration:
    I_cal_p = 0
    I_cal_n = 0
    print('#### Calibration for the internal resistances ####')
    input(
        'Short the S3b_output and M1b_input (pin #4), Press Enter to continue...'
    )
    ivvi.RampVoltage(S3b_dac, V_bias / S3b_range * 1e3, tt=0.5,
                     steps=5)  ##ramping this voltage in 20seconds

    for cnt in range(measure_iteration):
        I_cal_p += float(vmeas.query('READ?')) / M1b_total_gain

    I_cal_p = I_cal_p / measure_iteration

    ivvi.RampVoltage(S3b_dac, -V_bias / S3b_range * 1e3, tt=1,
                     steps=5)  ##ramping this voltage in 20seconds

    for cnt in range(measure_iteration):
        I_cal_n += float(vmeas.query('READ?')) / M1b_total_gain

    I_cal_n = I_cal_n / measure_iteration

    R_cal = 2 * V_bias / (I_cal_p - I_cal_n)
Exemple #4
0
plt.rcParams["figure.figsize"] = [16,9] 
plt.title(prefix)
plt.ylabel('current [nA]')
plt.xlabel('bias Voltage [$\mu$V]')
plt.xlim(V_bias_min*1e6,V_bias_max*1e6)
palette = plt.get_cmap('Set1') # create a color palette


''' Start the measurement '''


## Ramping up the gate to the first point
if Vg_ini !=0:
    print('############# Initialize back-gate to',Vg_ini,'V #############')
    ivvi.RampVoltage(S1h_dac,Vg_ini/S1h_gain*1000.,tt=Vg_ini/gate_ramp_speed) ##ramping to the 
    print('Wait {:.0f}s for back-gate satbility at {:.1f}V'.format(gate_time_sleep,Vg_ini))
    time.sleep(gate_time_sleep) 
last_time = time.time()


## Sweeping the gate
for gate_count,Vg in enumerate(Vglist):
    
    if Vg !=0:
        ivvi.RampVoltage(S1h_dac,Vg/S1h_gain*1000.,tt=deltaVg/gate_ramp_speed, steps = 3) ##ramping this gate voltage
        print('Wait {:.0f}s for back-gate stability at {:.1f}'.format(gate_time_sleep, Vg))
        time.sleep(gate_time_sleep)
        I_leakage = float(v_gateleakage.query('READ?'))*1e3 #the factor 1e3 is used to convert the current to [nA]
    else: I_leakage = 0
Exemple #5
0
Keysight.SetOutputOn()


## Output setting
idstring = 'bias_current{:.0f}nA_at{:.2f}mK'.format(i_BiasMax*1e9,Tini).replace('.','p')
colnames = ['Iset (A)', 'Vmeas (V)', 'Rmeas (Ohm)', 'Vgate (V)', 'Leakage Current (A)', 'T (mK)', 'Time (s)', 'Ileakage (nA)']
last_time = time.time()

## Calculation
Vglist = np.linspace(Vgmax, Vgmin, (Vgmax-Vgmin)/deltaVg+1)
iBiaslist = np.linspace(i_BiasMax, i_BiasMin, (i_BiasMax-i_BiasMin)/delta_i_bias+1)


Vg_ini = Vglist[0]
print('############# Initialize back-gate to',Vg_ini,'V #############')
ivvi.RampVoltage(vgdac,Vg_ini/vggain*1000.,tt=Vg_ini/gate_ramp_speed) ##ramping to the 
print('Wait {:.0f}s for back-gate satbility at {:.1f}V'.format(5*time_sleep,Vg_ini))
time.sleep(5*time_sleep) 

myfile = stlab.newfile(prefix, idstring, colnames, autoindex=True)
END = False
total_count = Vglist.shape[0]

resistance_array = np.array([])
applied_gate_array = np.array([])
I_leakage_array = np.array([])
V_array = np.array([])

plt.rcParams["figure.figsize"] = [16,9] 
plt.xlabel('gate voltage [V]')
plt.ylabel('resistance [$\Omega$]') 
if M1b_mode == 'Low-Noise':
    R_exp = 2000 + M1b_gain * 1e-3

if M1b_mode == 'Low-Rin':
    R_exp = 2000 + M1b_gain * 1e-4

if calibrate:
    I_cal = []
    print('Calibration for internal resistances:')
    input(
        'Please short the S3b output and M1b input, press ENTER to continue ...'
    )

    for V_bias in V_bias_list:
        ivvi.RampVoltage(S3b_dac, V_bias / S3b_range * 1e3, tt=0.1, steps=5)
        i_cal = 0
        for cnt in range(measure_average):
            Iread = float(Imeas.query('READ?'))
            i_cal += Iread / M1b_total_gain
            time.sleep(time_sleep_measure)
        I_cal = np.append(I_cal, i_cal / measure_average)

    R_int = np.average(np.diff(V_bias_list) / np.diff(I_cal))
    print('Calibration Finished: total internal resistance is {:.1f}kOhms.'.
          format(1e-3 * R_int))
    print('Expected internal resistance is {:.2f}kOhm'.format(1e-3 * R_exp))

    h = input('Connect to the device, press Enter to continue or "e" to exit.')

    if h == "e":
##########################################################
''' Initializing the devices '''

# initial configuration of the Lock-in
apilevel_example = 6  # The API level supported by this example.
(daq, device, props) = zhinst.utils.create_api_session('dev352', apilevel_example, required_devtype='.*LI|.*IA|.*IS')
zhinst.utils.api_server_version_check(daq)
zhinst.utils.disable_everything(daq, device)
out_mixer_channel = zhinst.utils.default_output_mixer_channel(props)

# resetting the IVVI
dev = IVVI_DAC('COM4') # IVVI
dev.RampAllZero()

ramp_time = np.abs(np.floor(shift_voltage/ramp_speed))
dev.RampVoltage(DAC,1000*shift_voltage/s1h_gain,tt=ramp_time, steps = 20) # the factor 1000 is applied as the unit reads in mV.


# initializing the Keithley for gate current measurement
vmeasure = stlab.adi('TCPIP::192.168.1.105::INSTR',read_termination='\n') # with Keithley DMM6500
vmeasure.write('SENS:VOLT:DC:RANG:AUTO 0')
vmeasure.write('SENS:VOLT:DC:RANGE 2')
vmeasure.write(':INIT:CONT 0')
vmeasure.write('VOLT:NPLC 1')
vmeasure.write('TRIG:SOUR IMM')
vmeasure.write(":SYST:AZER:STAT OFF")
vmeasure.write(":TRIG:COUN 1")
gate_leakage_v_I_conversion = 1e-6 # conversion factor of the measured voltage on S1h 'Current monitor' to leakage current


##Inititalizing the devices
ivvi = IVVI_DAC(addr='COM5', verb=True)
ivvi.RampAllZero(tt=2., steps=20)

Imeas = stlab.adi(
    addr='TCPIP::192.168.1.105::INSTR'
)  #for measuring the current converted to Voltage at M0 output
v_gateleakage = stlab.adi(
    addr='TCPIP::192.168.1.162::INSTR')  #for measuring the leakage current
''' Start the measurement '''

## Ramping up the gate to the first point
if Vg_ini != 0:
    print('############# Initialize back-gate to', Vg_ini, 'V #############')
    ivvi.RampVoltage(S1h_dac,
                     Vg_ini / S1h_gain * 1000.,
                     tt=Vg_ini / gate_ramp_speed)  ##ramping to the
    print('Wait {:.0f}s for back-gate satbility at {:.1f}V'.format(
        time_sleep, Vg_ini))

time.sleep(time_sleep)
last_time = time.time()

## Sweeping the gate
for gate_count, Vg in enumerate(Vglist):

    if Vg != 0:
        ivvi.RampVoltage(S1h_dac,
                         Vg / S1h_gain * 1000.,
                         tt=deltaVg / gate_ramp_speed,
                         steps=3)  ##ramping this gate voltage
Exemple #9
0
vmeas = stlab.adi(addr='TCPIP::192.168.1.105::INSTR'
                  )  #for measuring the voltage accross the sample
v_gateleakage = stlab.adi(
    addr='TCPIP::192.168.1.162::INSTR')  #for measuring the leakage current

idstring = '_at{:.2f}mK'.format(Tini).replace('.', 'p')
colnames = [
    'Iset (A)', 'Vmeas (V)', 'Rmeas (Ohm)', 'Vgate (V)', 'T (mK)', 'Time (s)',
    'Ileakage (nA)'
]
last_time = time.time()

Vglist = np.linspace(Vgmax, Vgmin, (Vgmax - Vgmin) / deltaVg + 1)
Vg_ini = Vglist[0]
print('############# Initialize back-gate to', Vg_ini, 'V #############')
ivvi.RampVoltage(vgdac, Vg_ini / vggain * 1000.,
                 tt=Vg_ini / gate_ramp_speed)  ##ramping to the
print('Wait {:.0f}s for back-gate satbility at {:.1f}V'.format(
    5 * time_sleep, Vg_ini))
time.sleep(5 * time_sleep)

myfile = stlab.newfile(prefix, idstring, colnames, autoindex=True)
END = False
total_count = Vglist.shape[0]

ivvi.RampVoltage(isdac, i / isgain * 1e3, tt=10.)  #biasing current
resistance_array = np.array([])
applied_gate_array = np.array([])
I_leakage_array = np.array([])

for count, Vg in enumerate(Vglist):
    ivvi.RampVoltage(vgdac,
Exemple #10
0
# modulating the gate voltage
ramp_time = np.abs(np.floor(gate_pattern[0] / ramp_spead))
gate_voltage_step = gate_pattern[1] - gate_pattern[0]
ramp_time = np.abs(np.floor(gate_voltage_step / ramp_spead))

count = 0  # couter of step numbers
leakage_current = 0

S21dB = np.array([], [])
S21Ph = np.array([], [])
gate = np.array([])
Leakage_current = np.array([])

t_in = time.time()

dev.RampVoltage(DAC, gate_pattern[0] * 1000 / s1h_gain, tt=90)
time.sleep(10 * time_step)

for count, gate_voltage in enumerate(
        gate_pattern):  # ramping up the gate voltage

    dev.RampVoltage(DAC, gate_voltage * 1000 / s1h_gain)
    time.sleep(time_step)

    leakage_current = gate_leakage_v_I_conversion * float(
        vmeasure.query('READ?'))  # in the units of [nA]
    Leakage_current = np.append(Leakage_current, leakage_current)
    print('\n\n------------------------')

    for j in range(averaging):
        data = VNA.MeasureScreen_pd()
idstring = '_at{:.2f}mK'.format(Tini).replace('.', 'p')
colnames = [
    'Iset (A)', 'Vmeas (V)', 'Rmeas (Ohm)', 'Vgate (V)', 'T (mK)', 'Time (s)'
]
last_time = time.time()

Vglist = np.linspace(Vgmax, Vgmin, (Vgmax - Vgmin) / deltaVg + 1)
if Vglist.size == 0:
    Vglist = [0]
Vg_ini = Vglist[0]

if Vg_ini != 0:
    print('############# Initialize back-gate to', Vg_ini, 'V #############')
    ivvi.RampVoltage(vgdac,
                     Vg_ini / vggain * 1000.,
                     tt=Vg_ini / gate_ramp_speed)  ##ramping to the
    print('Wait 1min for back-gate satbility at', Vg_ini, 'V')
    time.sleep(60.)

myfile = stlab.newfile(prefix, idstring, colnames, autoindex=True)
END = False
total_count = Vglist.shape[0]

plt.rcParams["figure.figsize"] = [16, 9]
plt.xlabel('current [nA]')
plt.ylabel('voltage [V]')
palette = plt.get_cmap('Set1')  # create a color palette

for i, Vg in enumerate(Vglist):
    if Vg != 0: