Draft for the Keythley Pulse System driver
Change-Id: Idd6f86acbaac178ab8031625b36ded1351de6a34
This commit is contained in:
parent
96412cb480
commit
6c01a1e48a
74
frappy_psi/pulse.py
Normal file
74
frappy_psi/pulse.py
Normal 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):
|
Loading…
x
Reference in New Issue
Block a user