Skip to content
Snippets Groups Projects
Commit c4fa1c42 authored by Alexandros Asonitis's avatar Alexandros Asonitis
Browse files

ADU for double gate devices part 1

parent ebc547e1
No related branches found
No related tags found
No related merge requests found
......@@ -3,9 +3,9 @@ sys.path.insert(0, './lib')
sys.path.insert(0, '..') #append parent directory
from interface_version_2 import *
from interface import *
from help import *
from measurements_new import *
from measurements import *
import configparser
......@@ -15,24 +15,22 @@ style = {'description_width': 'initial'}
sample = information_box_new()
###end of sampling information#######################################
test_contacts=widgets.Checkbox(description = "Test of the Contacts",value = True,indent = False)
#display(test_contacts)
#print()
# move checkboxes outside of the tabs
transfer_check,integration_transfer = header('Transfer Curve')
output_check,integration_output = header('Output Curve')
gatediode_check,integration_gatediode=header('Gatediode')
checkboxes = widgets.HBox([test_contacts,transfer_check,output_check,gatediode_check])
checkboxes = widgets.HBox([transfer_check,output_check,gatediode_check])
display(checkboxes)
print()
#transfer
Vds_transfer_widgets,Vds_transfer = secondary('Vds',0.1,0.45,1,0.1)
Vgs_transfer_widgets,Vgs_transfer = primary('Vgs',2,-0.05,-8,0.01)
transfer_box = widgets.VBox([integration_transfer,Vds_transfer_widgets,Vgs_transfer_widgets])
Vds_transfer_widgets,Vds_transfer = secondary('Vds',1,0,1,0.1)
Vtg_transfer_widgets,Vtg_transfer = primary('Vtg',-7,0.1,7,0.01)
Vbg_transfer_widgets,Vbg_transfer = primary('Vbg',-50,50/7*0.1,50,0.01)
transfer_box = widgets.VBox([integration_transfer,Vds_transfer_widgets,Vtg_transfer_widgets,Vbg_transfer_widgets])
#output
......@@ -61,11 +59,12 @@ output = widgets.Output()
export_ini_button = widgets.Button(description = 'Export as ini')
import_ini_button = widgets.Button(description='Import from ini')
all_widgets =[button,transfer_check,integration_transfer,output_check,integration_output,gatediode_check,integration_gatediode,test_contacts,export_ini_button,import_ini_button]
all_widgets =[button,transfer_check,integration_transfer,output_check,integration_output,gatediode_check,integration_gatediode,export_ini_button,import_ini_button]
add_widgets_to_list(sample,all_widgets)
add_widgets_to_list(Vds_transfer,all_widgets)
add_widgets_to_list(Vgs_transfer,all_widgets)
add_widgets_to_list(Vtg_transfer,all_widgets)
add_widgets_to_list(Vbg_transfer,all_widgets)
add_widgets_to_list(Vds_output,all_widgets)
add_widgets_to_list(Vgs_output,all_widgets)
add_widgets_to_list(Vgs_gatediode,all_widgets)
......@@ -81,20 +80,11 @@ def on_start_clicked(b):
disable_widgets(all_widgets)
width = sample["width"].value
norm=normalization_factor(width)
norm_unit = sample["normalization"].value
Setup(device) #setup the device
#start measurements
if test_contacts.value == True:
Test(device)
answer = ask_to_continue()
if answer == False:
enable_widgets(all_widgets)
return
if transfer_check.value == True:
#check the values
vgs_ok = check_values(Vgs_transfer['start'],Vgs_transfer['step'],Vgs_transfer['stop'],'primary')
vgs_ok = check_values(Vtg_transfer['start'],Vtg_transfer['step'],Vtg_transfer['stop'],'primary')
vds_ok=check_values(Vds_transfer['start'],Vds_transfer['step'],Vds_transfer['stop'],'secondary')
if vgs_ok == True and vds_ok == True:
......@@ -103,7 +93,7 @@ def on_start_clicked(b):
#configure smus
smu1 = device.smu_dict()
smu1.update(vname ='VS1',iname = 'IS1',mode = 'COMM',func='CONS')
smu1.update(vname ='VTG',iname = 'ITG',mode = 'COMM',func='CONS')
smu2 = device.smu_dict()
smu2.update(vname ='VDS',iname ='ID',mode='V',func='VAR2')
......@@ -118,20 +108,20 @@ def on_start_clicked(b):
smu2.update(VAR2=var2)
smu3 = device.smu_dict()
smu3.update(vname='VGS',iname ='IG',mode='V',func='VAR1')
smu3.update(vname='VBG',iname ='IBG',mode='V',func='VAR1')
var1=device.var1_dict()
var1.update(
mode=Vgs_transfer['hyst'].value,
start=Vgs_transfer['start'].value,
stop=Vgs_transfer['stop'].value,
step=Vgs_transfer['step'].value,
comp =Vgs_transfer['comp'].value,
pcomp=Vgs_transfer['pcomp'].value
mode=Vtg_transfer['hyst'].value,
start=Vtg_transfer['start'].value,
stop=Vtg_transfer['stop'].value,
step=Vtg_transfer['step'].value,
comp =Vtg_transfer['comp'].value,
pcomp=Vtg_transfer['pcomp'].value
)
smu3.update(VAR1=var1)
smu4 = device.smu_dict()
smu4.update(vname ='VS2',iname = 'IS2',mode = 'COMM',func='CONS')
smu4.update(vname ='VS',iname = 'IS',mode = 'COMM',func='CONS')
#execute measurement
values=Transfer(smu1,smu2,smu3,smu4,integration_transfer.value,norm,device)
......
%% Cell type:code id:6defdb49-06c2-469d-beb5-bc2e147e3f79 tags:
``` python
%run ADU_version_2.py
%run double_gate_ADU.py
```
%% Output
%% Cell type:code id:d480980e-f36a-4096-89b0-f65fe874d8a6 tags:
``` python
```
......
hp4155/ADU for double gate devices/lib/ADU_SMU_configuration.png

11 KiB

......@@ -91,7 +91,7 @@ def secondary(name,start,step,stop,comp):
def information_box_new():
width = '90%'
width = '50%'
sample_information=widgets.Label("Sample Information",layout=Layout(height=height, width='50%'))
sample_information.style.font_weight='bold'
information_grid=GridspecLayout(3,2)
......@@ -99,7 +99,7 @@ def information_box_new():
for i in range(3):
for j in range(2):
if i ==2 and j == 1:
information_grid[i,j]=widgets.Dropdown(options=['mA/mm','uA/um'],value='mA/mm',layout=Layout(height=height, width=width))#mind the gap
continue
elif i == 2 and j == 0:
information_grid[i,j]=widgets.BoundedFloatText(
value=100,
......@@ -115,29 +115,15 @@ def information_box_new():
information_grid[2,0].description = "Device Width(um):"
information_grid[0,1].description = "Field(XYY):"
information_grid[1,1].description = "Device:"
information_grid[2,1].description = "Normalization:"
for i in range(3):
for j in range(2):
if i ==2 and j == 1:
continue
information_grid[i,j].style = style
image_title = widgets.Label("SMU Configuration",layout=Layout(height=height, width='50%'))
image_title.style.font_weight='bold'
filename = os.getcwd()+r"\lib\ADU_SMU_configuration.png"
#print(filename)
file = open(filename, "rb")
image = file.read()
image_widget =widgets.Image(
value = image,
format='png',
width='auto',
height='auto',
)
display(widgets.HBox([sample_information,image_title]))
display(widgets.HBox([information_grid,image_widget]))
display(widgets.VBox([sample_information,information_grid]))
print()
information = {
......@@ -145,8 +131,7 @@ def information_box_new():
'sample' : information_grid[1,0],
'field': information_grid[0,1],
'device':information_grid[1,1],
'width': information_grid[2,0],
'normalization': information_grid[2,1]
'width': information_grid[2,0]
}
return information
......@@ -15,62 +15,6 @@ def Setup(device):
#disable all irrelevant units
device.disable_not_smu()
def Test(device):
#here the parameters are default
#setup smu
smu1 = device.smu_dict()
smu1.update(vname ='VS1',iname = 'IS1',mode = 'COMM',func='CONS')
smu2 = device.smu_dict()
smu2.update(vname ='VDS',iname ='ID',mode='V',func='CONS')
smu3 = device.smu_dict()
smu3.update(vname='VGS',iname ='IG',mode='V',func='VAR1')
smu4 = device.smu_dict()
smu4.update(vname ='VS2',iname = 'IS2',mode = 'COMM',func='CONS')
#list all the smus
smus=[smu1,smu2,smu3,smu4]
#send the configurations to the device
for i in range(4):
device.setup_smu(i+1,smus[i])
#setup var1
var1 = device.var1_dict()
var1.update(mode='SING',start=2,stop=-3,step=-0.2,comp = 10e-3,pcomp=0)
device.setup_var1(var1)
#set constant VDS
cons_smu2=device.cons_smu_dict()
cons_smu2.update(value=10,comp=0.1)
device.setup_cons_smu(2,cons_smu2)
device.integration_time('SHOR')
device.user_function('Gm','mS/mm','1E4*DIFF(ID,VGS)')
device.user_function('IDmm','mA/mm','1E4*ID')
device.user_function('IGmm','mA/mm','1E4*IG')
#display
device.display_variable('X','VGS')
device.display_variable('Y1','IDmm')
device.display_variable('Y2','IGmm')
device.display_variable_min_max('X','MIN',-3)
device.display_variable_min_max('X','MAX',2)
device.display_variable_min_max('Y1','MIN',0)
device.display_variable_min_max('Y1','MAX',1000)
device.display_variable_min_max('Y2','MIN',0)
device.display_variable_min_max('Y2','MAX',10)
device.single_measurement()
while device.operation_completed()==False:
pass
device.autoscaling()
def Transfer(smu1,smu2,smu3,smu4,integration,norm,device):
device.del_user_functions()
#set all the smus
......@@ -83,39 +27,15 @@ def Transfer(smu1,smu2,smu3,smu4,integration,norm,device):
device.setup_var2(smu2['VAR2'])
device.integration_time(integration)
#device.user_function('Gm','S','DIFF(ID,VGS)')
device.user_function('Gm','S',f'DIFF(ID,VGS)')
device.user_function('Gmmm','mS/mm',f'Gm*{norm}')
device.user_function('IDmm','mA/mm',f'ID*{norm}')
device.user_function('IGmm','mA/mm',f'IG*{norm}')
device.display_mode("LIST")
#display
device.display_variable('X','VGS')
device.display_variable('Y1','IDmm')
device.display_variable('Y2','Gmmm')
if smu3['VAR1']['start']<smu3['VAR1']['stop']:
device.display_variable_min_max('X','MIN',smu3['VAR1']['start'])
device.display_variable_min_max('X','MAX',smu3['VAR1']['stop'])
else:
device.display_variable_min_max('X','MAX',smu3['VAR1']['start'])
device.display_variable_min_max('X','MIN',smu3['VAR1']['stop'])
if smu2['VAR2']['comp']!=0:
device.display_variable_min_max('Y1','MIN',-abs(smu2['VAR2']['comp'])*norm)
device.display_variable_min_max('Y1','MAX',abs(smu2['VAR2']['comp'])*norm)
variables_list = ["VGS","VDS","ID","IG","Gm","IDmm","IGmm","Gmmm"]
variables_list = ["VTG","VDS","ID"]
device.variables_to_save(variables_list)
device.single_measurement()
while device.operation_completed()==False:
pass
device.autoscaling()
values = dict([(variable,device.return_values(variable)) for variable in variables_list])
return values
......@@ -133,10 +53,6 @@ def Output(smu1,smu2,smu3,smu4,integration,norm,device):
device.setup_var1(smu2['VAR1'])
device.integration_time(integration)
device.user_function('IDmm','mA/mm',f'ID*{norm}')
device.user_function('IGmm','mA/mm',f'IG*{norm}')
#display
device.display_variable('X','VDS')
device.display_variable('Y1','IDmm')
......
......@@ -85,7 +85,7 @@ class HP4155a(object):
self.inst.write(command)
def setup_vard(self,vard:dict):
command = f":PAGE:MEAS:VARD:OFFSET {vard['offset']};RAT {vard['ratio']};COMP: {vard["comp"]};PCOMP {vard["pcomp"]}"
command = f":PAGE:MEAS:VARD:OFFSET {vard['offset']};RAT {vard['ratio']};COMP: {vard['comp']};PCOMP {vard['pcomp']}"
self.inst.write(command)
#----------------------------------------------------------------------sampling measure functions part2 first goal----------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment