Keysight E3610XA series power supply

This repository contains the driver code and "default" Midas frontends for the Keysight E3610xa series power supplies (x being a single-digit number).

The manual can be found under the following link: https://www.mouser.com/pdfdocs/opE36100-90001.pdf?srsltid=AfmBOoo1jqPs9qAnzkzC6t1lxlCvEyfjqTvl86HeYw0yZWTqTLqtix3F A copy of the manual has been placed in this repository.

Requirements

Requires a Midas installation with the environment variable MIDASSYS pointing to the built Midas artifacts and headers.

Code architecture

Compilation flags

The driver code needs to be "configured" for different operation modes used in different frontends via compile-time flags. For example, if flow support is needed, the compilation flag FLOW_SUPPORT needs to be given to the compiler. It is recommended to specify the flag in the CMakeLists.txt of the frontend (see the CMakeLists.txt in this repository for an example).

These flags specify a string KEYSIGHT_E3610XA_SETTINGS_STR which is used to parametrize the power supply.

The following flags / parametrizations are available:

  • FLOW_SUPPORT: Use the device in "Flow" mode
  • VOLT_SUPPORT: Use the device in "Voltage mode" mode
  • VOLTAMPERE_SUPPORT: Use the device in "Voltage / ampere mode" mode
  • AMPERE_SUPPORT: Use the device in "Ampere mode" mode

Only one of these configurations can be activated at anytime (if more than one flag is defined, the first one in the list above is used and the rest is ignored). If none of the flags is given, a default fallback configuration is used.

In addition, there is also the special flag XI11_SUPPORT, which enables the usage of the LAN XVI-11 bus driver. See section LAN XVI-11.

Different frontends expect different driver configurations, so make sure that the right flag is specified in the CMakeLists.txt of the frontend. The directory frontend contains all frontends currently used in the SuS to serve as examples. CMakeLists.txt contains corresponding targets (see sections Build and Run).

In the long run, this confusing approach should be replaced by more generic code as part of a rewrite and the configuration should be done within the frontend.

LAN XVI-11

Some frontends use the Keysight E3610XA device via the VXI-11 protocol, which is basically an emulation of the GPIB protocol over LAN / Ethernet. For these devices, the bus driver ./lan_gpib_vxi11 is used (its documentation can be found here: https://gitea.psi.ch/lin-midas-drivers/lan_gpib_vxi11). This driver is completely independet from MIDAS.

The files bus/midas_vxi11.cxx / bus/midas_vxi11.h integrate ./lan_gpib_vxi11 into MIDAS. Since those two files are exclusively used within the Keysight E3610XA driver, they are packaged directly in this repository.

To enable VXI-11 support, use the flag VXI11_SUPPORT.

Build

Clone this repository, enter the cloned directory, and then build via CMake. The commands below build a couple of different frontends which use the aforementioned "mode" flags.

cmake -S "$(pwd)" -B <build-directory> -DBUILD_FRONTENDS=ON
cmake --build <build-directory> --clean-first -- -j8

Run

# Uses flag FLOW_SUPPORT
<build-directory>/driver/keysight_e3610xa_heflowks0_scfe -e flame

# Uses flags AMPERE_SUPPORT and VXI11_SUPPORT
<build-directory>/driver/keysight_e3610xa_ksamp0_scfe -e flame

# Uses flag VOLTAMPERE_SUPPORT
<build-directory>/driver/keysight_e3610xa_ksva0_fe -e flame

# Uses flag VXI11_SUPPORT
<build-directory>/driver/keysight_e3610xa_ksva1_fe -e flame

# Uses flag VOLT_SUPPORT
<build-directory>/driver/keysight_e3610xa_ksvolt0_fe -e flame

# Uses flag VXI11_SUPPORT
<build-directory>/driver/keysight_e3610xa_ksvolt1_fe -e flame

# Uses flag VXI11_SUPPORT
<build-directory>/driver/keysight_e3610xa_tubehks_fe -e flame

Including in Custom Frontend

To include this driver in a custom frontend, you should ensure the environment variable MIDASSYS points to your system install. The compilation flags can be selected by including the desired flag in target_compile_definitions and linking to the corresponding support target in target_link_libraries:

  • FLOW_SUPPORT: keysight_e3610xa_flow
  • AMPERE_SUPPORT: keysight_e3610xa_amp
  • VOLTAMPERE_SUPPORT: keysight_e3610xa_voltamp
  • VOLT_SUPPORT: keysight_e3610xa_volt
  • VXI11_SUPPORT: keysight_e3610xa_vxi11

In the example below, the flags FLOW_SUPPORT and VXI11_SUPPORT are enabled. Modify as needed.

# If the path to the keysight_e3610xa repository is outside of the frontend
# repository, you also need to provide a location for the keysight_e3610xa
# artifacts as a second argument to `add_subdirectory`
# e.g. `./device/keysight_e3610xa`
add_subdirectory(
    <path-to-keysight_e3610xa-repository>
)

add_executable(
  <frontend-name>
  <frontend-code-path-1>
  <frontend-code-path-2>
  :
)

target_compile_definitions(<frontend-name> PRIVATE FLOW_SUPPORT VXI11_SUPPORT)

set_property(
  TARGET
    <frontend-name>
  PROPERTY
    CXX_STANDARD 11
)

target_include_directories(
  <frontend-name>
  PRIVATE
    $ENV{MIDASSYS}/drivers
    $ENV{MIDASSYS}/include
)

target_link_libraries(
  <frontend-name>
  keysight_e3610xa
  keysight_e3610xa_flow # Support target for FLOW_SUPPORT flag
  keysight_e3610xa_vxi11 # Support target for VXI11_SUPPORT flag
  <additional-library-1>
  <additional-library-2>
  :
)

Device setup

The text below contains instructions on how to prepare the Keysight E3610XA device for this driver. These instructions are copied verbatim from device/keysight_e3610xa.c and are partially invalid for the "new" MIDAS. They should be corrected over time.

Keysight E3610xA/B Device Set-up and Midas 2.1 installation

  1. Initial configuration of the LAN interface
  • Use front panel menu to enable dhcp . Press the Menu button . Select I/O Config Menu turning the Adjust knob and pressing to select . Select LAN submenu . Select LAN Config submenu Set DHCP: Enable Set AutoDNS: Enable Set mDNS: Enable Select Return . Plug in the RJ45 cable connecting the network . Select LAN Info . Read the IP Address . Select Exit Menu

  • Use a web browser to connect to the device's home page . http:// . Check if Firmware revision is 1.0.6-1.01 or higher else update the firmware as described in \LMU(\FS01)\Keysight\E3610xA\E3610XAFWUpdateLMU.txt . Select the "Configure LAN" tab Press the Edit button default password is keysight define a new Hostname e.g. pspsXXX Apply changes . Press the Advanced options button In the "Reset network configuration" section press the Reset button to restart the network.

  • Use the front panel menu to configure OVP (over voltage protection) . Set the voltage protection limit and . Turn the voltage protection on the OVP limit must also be set in Settings/DD

    NOTE: when tripped OVP will be reset by fe-program when internal sense is set

  • Use the front panel menu to configure OCP (over current protection)

    Only turn the current protection on for constant voltage operation and make sure the currently set current setpoint may never be reached by normal regulation else OCP will trip! OCP may be necessary when using External (= 4-wire) sensing . Set the OCP delay and . Turn the current protection on

    NOTE: when tripped OCP will be reset by fe-program when internal sense is set

  • Use the front panel menu to configure the Sensing . Internal (2-wire) or External (4-wire) Sensing may be selected

    WARNING when external sense wires are not connected or shortcut, the power supply may increase voltage and/or current until the OVP limit or the set values are reached!

    Therefore be careful to only set a sufficent current setpoint for constant voltage operation or a sufficient voltage setpoint and OVP for constant current operation.

  1. Start the front-end program __scfe -h localhost -e td_musr2n -v for Midas 2.1N located in directory /usr/local/midas2n_32 or midas2n_64 and immediately stop it.

    of equipment KEYSIGHT_E3610XA

    ksamp0 184 Only set current. Voltage is set in /Equipment/ksamp0/Settings/Devices/KEYSIGHT_E3610XA/DD/Vlim. Output ON/OFF is automatically set when > 0 (ON) or = 0 (OFF).

    ksva0 182 Set voltage, current and output 1=ON/0=OFF. ksva1 183 " tubehks0 186 "

    ksvolt0 180 Only set voltage. Current is set in /Equipment/ksvolt0/Settings/Devices/KEYSIGHT_E3610XA/DD/Clim. OCP may be turned on. Output ON/OFF is automatically set when > 0 (ON) or = 0 (OFF).

    ksvolt1 181 Only set voltage. Current is set in /Equipment/ksvolt1/Settings/Devices/KEYSIGHT_E3610XA/DD/Clim. OCP may be turned on. Output ON/OFF is automatically set when > 0 (ON) or = 0 (OFF).

    heflowks0 185 Only set Flow [liter/Min]. Current is set in /Equipment/heflowks0/Settings/Devices/KEYSIGHT_E3610XA/DD/Clim. OCP may be turned on. Output ON/OFF is automatically set when flow-offset > 0 (ON) or flow-offset = 0 (OFF).

  2. Use a web browser to set DD and BD settings in . /Equipment//Settings/Devices/KEYSIGHT_E3610XA/DD Vlim [V], Clim[A], OVPlim [V] and HndlePowerOnbit (Y/N) NOTE: Handling PowerOn bit is implemented - however bit is not set after power cycling! for heflowks0 set Scale [V/(liter/Min)], Offset [liter/Min] and Flim [lit/Min]

    . /Equipment//Settings/Devices/KEYSIGHT_E3610XA/BD Server pspsXXX.psi.ch e.g.: psps001.psi.ch Interface inst0 as specified for "VXI-11 LAN protocol" VISA instrument address in the device's homepage after changing the device's hostname. e.g. for psps001: TCPIP::psps001.psi.ch::inst0::INSTR inst0 is sufficient LockTMO 30000 Debug 0

    . /Equipment//Settings/Names Make sure Names (U and/or I and OUTPUT) are unique, especially when Agilent E364xA devices are also used as equipment: e.g.: adding the equipment name U -> ksva0_U or U_ksva0 or adding information about functionality AUX_U

  3. Start the front-end program __scfe -h localhost -e td_musr2n for Midas 2.1 again.

  4. In the web browser select the instrument's home page and press the Programs button in the Programs click on "KEYSIGHT_E3610XA " on the left side of the row . Set Required y
    . and as Start command e.g.: for equipment ksva0 on SL6 i686 specify /usr/local/midas2n_32/KEYSIGHT_E3610XA_ksva0_scfe -h localhost -e td_musr2n -D or for SL6 x86_64 specify /usr/local/midas2n_64/KEYSIGHT_E3610XA_ksva0_scfe -h localhost -e td_musr2n -D

  5. To create the default history panel press the History button and in the now appearing history web page press the New button. When already present select KEYSIGHT_E3610XA else enter it as new group name. As panel name enter and press the Submit button. Use the "List all variables" to select and configure the equipment's channels.

Old Makefile frontend setup

The following Makefile configuration is taken verbatim from /afs/psi/project/project/lmubdaq/midas2n/musr-2n_checkout/midas/MakefileB. It is meant to be used as a guidance to understand which compile flags are needed for which frontend (see also CMakeLists.txt, which is derived from this Makefile).

# -- Keysight E36100 Series DC Power Supplies
#
$(BIN_DIR)/midas_vxi11.o: $(DRV_DIR)/bus/midas_vxi11.c $(midas_vxi11_H) $(VXI11_MUSR_H) $(MAKEFILE)
	$(CC) $(CFLAGS) -I$(DRV_DIR)/class -I$(DRV_DIR)/device -I$(VXI11_DIR) \
          -I$(VXI11_DIR)/rpcl $(TIRPC_INC) $(OSFLAGS) -c -o $@ $<

# ksvolt0
E3610XAksv0lan_OBJS = $(LIB_DIR)/mfe_nt.o $(BIN_DIR)/KEYSIGHT_E3610XA_ksvolt0lan.o \
                    $(BIN_DIR)/generic_new.o $(BIN_DIR)/keysight_e3610xavoltlan.o $(BIN_DIR)/midas_vxi11.o \
                    $(BIN_DIR)/vxi11_musr.o $(BIN_DIR)/vxi11core_xdr.o \
                    $(BIN_DIR)/vxi11core_clnt.o

$(BIN_DIR)/KEYSIGHT_E3610XA_ksvolt0lan.o: $(E3610XA_DIR)/KEYSIGHT_E3610XA_ksvolt0.c \
                           $(MIDAS_H) $(GENERIC_H) $(E3610XA_H) $(midas_vxi11_H) $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/keysight_e3610xavoltlan.o: $(DRV_DIR)/device/keysight_e3610xa.c $(MIDAS_H) $(E3610XA_H) \
                             $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -DVOLT_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device \
          $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/KEYSIGHT_E3610XA_ksvolt0_scfe: $(E3610XAksv0lan_OBJS) $(MAKEFILE)
	$(CC) $(CFLAGS) $(OSFLAGS) -o $@ $(E3610XAksv0lan_OBJS) $(OFORTC) $(LIB) $(LIBS) -lm $(TIRPC_LIB)

#ksvolt1
E3610XAksv1lan_OBJS = $(LIB_DIR)/mfe_nt.o $(BIN_DIR)/KEYSIGHT_E3610XA_ksvolt1lan.o \
                    $(BIN_DIR)/generic_new.o $(BIN_DIR)/keysight_e3610xavoltlan.o $(BIN_DIR)/midas_vxi11.o \
                    $(BIN_DIR)/vxi11_musr.o $(BIN_DIR)/vxi11core_xdr.o \
                    $(BIN_DIR)/vxi11core_clnt.o

$(BIN_DIR)/KEYSIGHT_E3610XA_ksvolt1lan.o: $(E3610XA_DIR)/KEYSIGHT_E3610XA_ksvolt1.c \
                           $(MIDAS_H) $(GENERIC_H) $(E3610XA_H) $(midas_vxi11_H) $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/KEYSIGHT_E3610XA_ksvolt1_scfe: $(E3610XAksv1lan_OBJS) $(MAKEFILE)
	$(CC) $(CFLAGS) $(OSFLAGS) -o $@ $(E3610XAksv1lan_OBJS) $(OFORTC) $(LIB) $(LIBS) -lm $(TIRPC_LIB)

#ksamp0
E3610XAksa0lan_OBJS = $(LIB_DIR)/mfe_nt.o $(BIN_DIR)/KEYSIGHT_E3610XA_ksamp0lan.o \
                    $(BIN_DIR)/generic_new.o $(BIN_DIR)/keysight_e3610xaamplan.o $(BIN_DIR)/midas_vxi11.o \
                    $(BIN_DIR)/vxi11_musr.o $(BIN_DIR)/vxi11core_xdr.o \
                    $(BIN_DIR)/vxi11core_clnt.o

$(BIN_DIR)/KEYSIGHT_E3610XA_ksamp0lan.o: $(E3610XA_DIR)/KEYSIGHT_E3610XA_ksamp0.c \
                           $(MIDAS_H) $(GENERIC_H) $(E3610XA_H) $(midas_vxi11_H) $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/keysight_e3610xaamplan.o: $(DRV_DIR)/device/keysight_e3610xa.c $(MIDAS_H) $(E3610XA_H) \
                             $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -DAMPERE_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device \
          $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/KEYSIGHT_E3610XA_ksamp0_scfe: $(E3610XAksa0lan_OBJS) $(MAKEFILE)
	$(CC) $(CFLAGS) $(OSFLAGS) -o $@ $(E3610XAksa0lan_OBJS) $(OFORTC) $(LIB) $(LIBS) -lm $(TIRPC_LIB)

#ksva0
E3610XAksva0lan_OBJS = $(LIB_DIR)/mfe_nt.o $(BIN_DIR)/KEYSIGHT_E3610XA_ksva0lan.o \
                       $(BIN_DIR)/generic_new.o $(BIN_DIR)/keysight_e3610xavalan.o $(BIN_DIR)/midas_vxi11.o \
                       $(BIN_DIR)/vxi11_musr.o $(BIN_DIR)/vxi11core_xdr.o \
                       $(BIN_DIR)/vxi11core_clnt.o

$(BIN_DIR)/KEYSIGHT_E3610XA_ksva0lan.o: $(E3610XA_DIR)/KEYSIGHT_E3610XA_ksva0.c \
                           $(MIDAS_H) $(GENERIC_H) $(E3610XA_H) $(midas_vxi11_H) $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/keysight_e3610xavalan.o: $(DRV_DIR)/device/keysight_e3610xa.c $(MIDAS_H) $(E3610XA_H) \
                             $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -DVOLTAMPERE_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device \
          $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/KEYSIGHT_E3610XA_ksva0_scfe: $(E3610XAksva0lan_OBJS) $(MAKEFILE)
	$(CC) $(CFLAGS) $(OSFLAGS) -o $@ $(E3610XAksva0lan_OBJS) $(OFORTC) $(LIB) $(LIBS) -lm $(TIRPC_LIB)

#ksva1
E3610XAksva1lan_OBJS = $(LIB_DIR)/mfe_nt.o $(BIN_DIR)/KEYSIGHT_E3610XA_ksva1lan.o \
                       $(BIN_DIR)/generic_new.o $(BIN_DIR)/keysight_e3610xavalan.o $(BIN_DIR)/midas_vxi11.o \
                       $(BIN_DIR)/vxi11_musr.o $(BIN_DIR)/vxi11core_xdr.o \
                       $(BIN_DIR)/vxi11core_clnt.o

$(BIN_DIR)/KEYSIGHT_E3610XA_ksva1lan.o: $(E3610XA_DIR)/KEYSIGHT_E3610XA_ksva1.c \
                           $(MIDAS_H) $(GENERIC_H) $(E3610XA_H) $(midas_vxi11_H) $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/KEYSIGHT_E3610XA_ksva1_scfe: $(E3610XAksva1lan_OBJS) $(MAKEFILE)
	$(CC) $(CFLAGS) $(OSFLAGS) -o $@ $(E3610XAksva1lan_OBJS) $(OFORTC) $(LIB) $(LIBS) -lm $(TIRPC_LIB)

#tubehks  another using VOLTAMPERE_SUPPORT
E3610XAkstubehlan_OBJS = $(LIB_DIR)/mfe_nt.o $(BIN_DIR)/KEYSIGHT_E3610XA_tubehkslan.o \
                       $(BIN_DIR)/generic_new.o $(BIN_DIR)/keysight_e3610xavalan.o $(BIN_DIR)/midas_vxi11.o \
                       $(BIN_DIR)/vxi11_musr.o $(BIN_DIR)/vxi11core_xdr.o \
                       $(BIN_DIR)/vxi11core_clnt.o

$(BIN_DIR)/KEYSIGHT_E3610XA_tubehkslan.o: $(E3610XA_DIR)/KEYSIGHT_E3610XA_tubehks.c \
                           $(MIDAS_H) $(GENERIC_H) $(E3610XA_H) $(midas_vxi11_H) $(MAKEFILE)
	$(CC) $(CFLAGS) -DVXI11_SUPPORT -I$(DRV_DIR)/class -I$(DRV_DIR)/device $(OSFLAGS) -c -o $@ $<

$(BIN_DIR)/KEYSIGHT_E3610XA_tubehks_scfe: $(E3610XAkstubehlan_OBJS) $(MAKEFILE)
	$(CC) $(CFLAGS) $(OSFLAGS) -o $@ $(E3610XAkstubehlan_OBJS) $(OFORTC) $(LIB) $(LIBS) -lm $(TIRPC_LIB)
S
Description
Driver for the Keysight E3610xa series power supplies
Readme 3.8 MiB
Languages
C++ 95.6%
CMake 3.4%
C 1%