Draft for the Keythley Pulse System driver

Change-Id: Idd6f86acbaac178ab8031625b36ded1351de6a34
This commit is contained in:
Oksana Shliakhtun 2024-08-26 16:49:07 +02:00 committed by Markus Zolliker
parent 96412cb480
commit 6c01a1e48a

74
frappy_psi/pulse.py Normal file
View File

@ -0,0 +1,74 @@
# *****************************************************************************
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Module authors: Oksana Shliakhtun <oksana.shliakhtun@psi.ch>
# *****************************************************************************
"""Keithley Instruments 2601B-PULSE System (not finished)"""
from frappy.core import StringIO, HasIO, Readable, Writable, \
Parameter, FloatRange, EnumType
class PulseIO(StringIO):
end_of_line = '\n'
identification = [('*IDN?', 'Keithley Instruments, Model 2601B-PULSE,.*')]
class Base(HasIO):
def set_source(self):
"""
Set the source -always current
:return:
"""
return self.communicate(f'smua.source.func = smua.OUTPUT_DCAMPS')
def get_par(self, cmd):
return self.communicate(f'reading = smua.measure.{cmd}()')
def auto_onof(self, val):
if val == 1:
return f'smua.AUTORANGE_ON'
if val == 0:
return f'smua.AUTORANGE_OFF'
def set_measure(self, cmd, val):
return self.communicate(f'smua.measure.{cmd} = {val}')
class Create_Pulse(Base, Readable, Writable):
target = Parameter('source target', FloatRange, unit='A', readonly=False)
width = Parameter('pulse width', FloatRange, unit="s", readonly=False)
resistance = Parameter('resistance', FloatRange)
SOURCE_RANGE = ['100nA', '1uA', '10uA', '100uA', '1mA', '10mA', '100mA', '1A', '3A']
range = Parameter('source range', EnumType('source range',
{name: idx for idx, name in enumerate(SOURCE_RANGE)}), readonly=False)
def read_range(self):
return self.range
def write_range(self, range):
self.communicate(f'smua.source.rangei = {range}')
return self.range
def write_target(self, target):
return self.communicate(f'smua.source.leveli = {target}')
def read_resistance(self):
return self.communicate('reading = smua.measure.r()')
class Script(Create_Pulse):