Source code for instruments.hp.hp6652a

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Driver for the HP6652a single output power supply

Originally contributed by Wil Langford (wil.langford+instrumentkit@gmail.com)
"""

# IMPORTS #####################################################################

from __future__ import absolute_import
from __future__ import division

import quantities as pq

from instruments.abstract_instruments import (PowerSupply, PowerSupplyChannel)
from instruments.util_fns import unitful_property, bool_property


# CLASSES #####################################################################


[docs]class HP6652a(PowerSupply, PowerSupplyChannel): """ The HP6652a is a single output power supply. Because it is a single channel output, this object inherits from both PowerSupply and PowerSupplyChannel. According to the manual, this class MIGHT be usable for any HP power supply with a model number HP66XYA, where X is in {4,5,7,8,9} and Y is a digit(?). (e.g. HP6652A and HP6671A) HOWEVER, it has only been tested by the author with an HP6652A power supply. Example usage: >>> import time >>> import instruments as ik >>> psu = ik.hp.HP6652a.open_serial('/dev/ttyUSB0', 57600) >>> psu.voltage = 3 # Sets output voltage to 3V. >>> psu.output = True >>> psu.voltage array(3.0) * V >>> psu.voltage_sense < 5 True >>> psu.output = False >>> psu.voltage_sense < 1 True >>> psu.display_textmode=True >>> psu.display_text("test GOOD") 'TEST GOOD' >>> time.sleep(5) >>> psu.display_textmode=False """ # ENUMS ## # I don't know of any possible enumerations supported # by this instrument. # PROPERTIES ## voltage = unitful_property( "VOLT", pq.volt, doc=""" Gets/sets the output voltage. Note there is no bounds checking on the value specified. :units: As specified, or assumed to be :math:`\\text{V}` otherwise. :type: `float` or `~quantities.Quantity` """ ) current = unitful_property( "CURR", pq.amp, doc=""" Gets/sets the output current. Note there is no bounds checking on the value specified. :units: As specified, or assumed to be :math:`\\text{A}` otherwise. :type: `float` or `~quantities.Quantity` """ ) voltage_sense = unitful_property( "MEAS:VOLT", pq.volt, readonly=True, doc=""" Gets the actual output voltage as measured by the sense wires. :units: :math:`\\text{V}` (volts) :rtype: `~quantities.Quantity` """ ) current_sense = unitful_property( "MEAS:CURR", pq.amp, readonly=True, doc=""" Gets the actual output current as measured by the sense wires. :units: :math:`\\text{A}` (amps) :rtype: `~quantities.Quantity` """ ) overvoltage = unitful_property( "VOLT:PROT", pq.volt, doc=""" Gets/sets the overvoltage protection setting in volts. Note there is no bounds checking on the value specified. :units: As specified, or assumed to be :math:`\\text{V}` otherwise. :type: `float` or `~quantities.Quantity` """ ) overcurrent = bool_property( "CURR:PROT:STAT", inst_true="1", inst_false="0", doc=""" Gets/sets the overcurrent protection setting. This is a toggle setting. It is either on or off. :type: `bool` """ ) output = bool_property( "OUTP", inst_true="1", inst_false="0", doc=""" Gets/sets the output status. This is a toggle setting. True will turn on the instrument output while False will turn it off. :type: `bool` """ ) display_textmode = bool_property( "DISP:MODE", inst_true="TEXT", inst_false="NORM", doc=""" Gets/sets the display mode. This is a toggle setting. True will allow text to be sent to the front-panel LCD with the display_text() method. False returns to the normal display mode. .. seealso:: `~HP6652a.display_text()` :type: `bool` """ ) @property def name(self): """ The name of the connected instrument, as reported by the standard SCPI command ``*IDN?``. :rtype: `str` """ idn_string = self.query("*IDN?") idn_list = idn_string.split(',') return ' '.join(idn_list[:2]) @property def mode(self): """ Unimplemented. """ raise NotImplementedError("Setting the mode is not implemented.") @mode.setter def mode(self, newval): """ Unimplemented. """ raise NotImplementedError("Setting the mode is not implemented.") # METHODS ##
[docs] def reset(self): """ Reset overvoltage and overcurrent errors to resume operation. """ self.sendcmd('OUTP:PROT:CLE')
[docs] def display_text(self, text_to_display): """ Sends up to 12 (uppercase) alphanumerics to be sent to the front-panel LCD display. Some punctuation is allowed, and can affect the number of characters allowed. See the programming manual for the HP6652A for more details. Because the maximum valid number of possible characters is 15 (counting the possible use of punctuation), the text will be truncated to 15 characters before the command is sent to the instrument. If an invalid string is sent, the command will fail silently. Any lowercase letters in the text_to_display will be converted to uppercase before the command is sent to the instrument. No attempt to validate punctuation is currently made. Because the string cannot be read back from the instrument, this method returns the actual string value sent. :param text_to_display: The text that you wish to have displayed on the front-panel LCD :type text_to_display: 'str' :return: Returns the version of the provided string that will be send to the instrument. This means it will be truncated to a maximum of 15 characters and changed to all upper case. :rtype: `str` """ if len(text_to_display) > 15: text_to_display = text_to_display[:15] text_to_display = text_to_display.upper() self.sendcmd('DISP:TEXT "{}"'.format(text_to_display)) return text_to_display
@property def channel(self): """ Return the channel (which in this case is the entire instrument, since there is only 1 channel on the HP6652a.) :rtype: 'tuple' of length 1 containing a reference back to the parent HP6652a object. """ return self,