Source code for fluidlab.instruments.funcgen.hp_33120a
"""Hewlett Packard 33120A
=========================
.. autoclass:: HP33120a
:members:
:private-members:
"""
__all__ = ["HP33120a"]
from fluidlab.instruments.iec60488 import IEC60488, Trigger
from fluidlab.instruments.features import SuperValue, FloatValue
[docs]class HP33120a(IEC60488, Trigger):
"""
Driver for the function generator Hewlett-Packard 33120A
"""
[docs] def configure_burst(self, freq, ncycles):
"""Configure a TTL burst with a given number of cycles
Send ``*TRG`` or ``gbf.trigger()`` to start a burst.
Conditions: ncyles must be <= 50000 and if freq <= 100 Hz, we
must have:
burst count / carrier frequency <= 500 seconds
"""
if freq <= 100.0 and ncycles / freq > 500.0:
raise ValueError(
"For freq <= 100 Hz, ncycles/freq must be <= 500 seconds"
)
if ncycles > 50000:
raise ValueError("Maximum count number is 50000")
self.interface.write("OUTP:LOAD INF")
self.interface.write(f"APPL:SQU {freq} HZ, 5 VPP, +2.5 V")
self.interface.write(f"BM:NCYC {ncycles}")
self.interface.write("BM:PHAS -20")
self.interface.write("TRIG:SOUR BUS")
self.interface.write("BM:STAT ON")
[docs] def configure_square(self, vmin, vmax=None, freq=None):
"""
Set the device in Square function
"""
if vmax and freq:
vpp = vmax - vmin
voffset = (vmin + vmax) / 2
self.interface.write("OUTP:LOAD INF")
self.interface.write(
"APPL:SQU {freq:} HZ, {ampl:} VPP, {offset:} V".format(
freq=freq, ampl=vpp, offset=voffset
)
)
class HP33120a_ShapeValue(SuperValue):
shapes = {
"sine": "SIN",
"square": "SQU",
"triangle": "TRI",
"ramp": "RAMP",
"noise": "NOIS",
"dc": "DC",
}
def __init__(self):
super().__init__("shape", doc="Shape of the output signal")
def set(self, value):
if value not in self.shapes.keys():
raise ValueError(
"Bad shape name. Possible values are sine, square, triangle, ramp, noise or dc"
)
self._interface.write("SOUR:FUNC:SHAP " + self.shapes[value])
def get(self):
rvalue = self._interface.query("SOUR:FUNC:SHAP?")
if rvalue.endswith("\n"):
rvalue = rvalue[:-1]
rkey = None
for key, value in self.shapes.iteritems():
if value == rvalue:
rkey = key
return rkey
features = [
FloatValue(
"freq",
doc="Frequency of output signal",
command_get="SOUR:FREQ?",
command_set="SOUR:FREQ",
check_instrument_value=False,
),
FloatValue(
"vrms",
doc="Set/get output amplitude (default to INF load)",
command_get="SOUR:VOLT:UNIT VRMS\nSOUR:VOLT?",
command_set="SOUR:VOLT:UNIT VRMS\nOUTP:LOAD INF\nSOUR:VOLT",
check_instrument_value=False,
),
FloatValue(
"vdc",
doc="Set/get output offset voltage (default is 0)",
command_get="VOLT:OFFS?",
command_set="OUTP:LOAD INF\nVOLT:OFFS",
check_instrument_value=False,
),
FloatValue(
"load",
doc="Get/Select the output termination",
command_get="OUTP:LOAD?",
command_set="OUTP:LOAD",
check_instrument_value=False,
),
HP33120a_ShapeValue(),
]
HP33120a._build_class_with_features(features)