ケースレー24XXのリモートコントロール/Remote control for Keithley 24XX

Introduction

Keithley 2400 Series SourceMeter is commonly used as a HV supplier for silicon detectors in the HEP community. It has a GPIB (IEEE488) or RS232 interface for remote control. This page introduces an example software for remote control and monitoring output voltage and current.

Ingredients

PC to control

Linux (Developed on CentOS 7 with gcc7 by devtoolset-7 of SCL, see here)

Power supply unit

Keithley 2400 Series SourceMeter (e.g. 2410, 2400 etc.)

USB-GPIB or USB-RS232

Tested with Prologix USB-GPIB, Buffalo BSUSRC06 and UGREEN USB-RS232 Converter with PL2303

Command line interface software

You can find a software with a command line interface at my GitLab repo. here.

Download and compile

git clone https://gitlab.cern.ch/hirose/SerialConsole.git
cd SerialConsole
make
ls bin

Before using the software::

Check the device file of the GPIB, or RS232 interface:

#Check which /dev/ttyUSBXX is your GPIB/RS232 interface

#Option 1:
#plug/unplug and check messages by dmesg.
#You may see one like below...
[1040519.380505] usb 1-1: new full-speed USB device number 19 using xhci_hcd
[1040519.552252] usb 1-1: New USB device found, idVendor=0403, idProduct=6001
[1040519.552262] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[1040519.552269] usb 1-1: Product: Prologix GPIB-USB Controller
[1040519.552276] usb 1-1: Manufacturer: Prologix
[1040519.552281] usb 1-1: SerialNumber: PX1ULNHZ
[1040519.558184] ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
[1040519.558265] usb 1-1: Detected FT232RL
[1040519.559511] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB2
#In this case, ttyUSB2 should be your GPIB interface.
#Warning: this device file might be changed after rebooting your PC!!

#Option 2:
#Making a permanent device file based on a USB port number.
#Create /etc/udev/rules.d/90-usb-aliases.rules
#Add below to the file.
SUBSYSTEM=="tty",KERNELS=="1-1",SUBSYSTEMS=="usb",SYMLINK+="ttyUSB_PORT1-1"
SUBSYSTEM=="tty",KERNELS=="1-2",SUBSYSTEMS=="usb",SYMLINK+="ttyUSB_PORT1-2"
#...until your desired number of ports.
#To check which bus and port number exist, test all existing ports to plug/unplug while checking dmesg. If you see...
usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB2
#the port which you pluged a cable is 1-3.
#The device file of your GPIB/RS232 interface will always have same name like /dev/ttyUSB_PORT1-2.

Check the device file permission:

#If you see no write permissin on /dev/ttyUSBXX, do below to make your life easier.
sudo gpasswd -a $USER dialout
#Then open /lib/udev/rules.d/50-udev-default.rules, and modify the line below
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
#to
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", MODE="0666"

Setting in your SourceMeter:

###For GPIB
Go to MENU->COMMUNICATION->GPIB. Then select a desired GPIB device address.
**NOTE** Address=0 has to be avoided (reserved for the USB-GPIB interface).
**NOTE** The address should be unique if you are daisy chaining your devices on one GPIB interface.

###For RS232
Go to MENU->COMMUNICATION->RS-232. Then select a desired GPIB device address.
**NOTE** Make sure that the RS232 settings in Keithley is set as below.
**NOTE** BAUD=9600, BITS=8, PARITY=NONE, TERMINATOR=<CR>, FLOW-CONTROL=NONE

Preparing a config file:

#Config file in a json format is passed for each executable.
#Example in configs/HV/example_keithley24XX.json
{
    "devicetype": "Keithley 2400",
    "devicefile": "/dev/ttyUSB_PORT1-1",
    "address": 23,
    "interfacetype: "GPIB",
    "channels": [
        {
            "channel": "A",
            "voltage": 20.,
            "current": 40.E-6
        }
    ],
    "sweep_steps": 50
}

Explanation of each entry:
"devicetype"    : Specify your device name (currently meaningless...)
"devicefile"    : Specify the device file checked above.
"address"       : Specify the GPIB address set above.
"interfacetype" : Specify the interface type. "GPIB" or "RS232" are the option.
"channels"      : Voltage and current compliance settings. Units are [V] and [A]. Put "-" for the negative voltage.
"sweep_steps"   : N steps to change an applied voltage to the target value.

How to control Keithley 24XX via the executables.

Interactive session:

#If you just control only one SourceMeter, it may be the best to use ./bin/run_keithley24XX.
./bin/run_keithley24XX. configs/HV/example_keithley24XX.json
#Then it prompts your action like below.
====================================================
Please specify what you want to do...
0: Initializing Keithley2410
1: Reset Keithley2410
2: Configure HV value
3: Sweep HV value to the target
4: Output ON
5: Output OFF
6: Read voltage/current
100: Change #sweep steps
101: Change sweep interval
99: exit
No = (waiting for your type...)

#This prompt repeats until you specify "99" to exit.
Explanation of each operation:
0: Configuring Keithley 2400 to be V source mode with appropriate V range.
1: Reset Keithley 2400 to go back to the state just after main power on.
2: Change the HV value setting.
3: Same as 2, but sweep HV value with specified the number of sweep steps.
4: Make Output ON.
5: Make Output OFF.
6: Read voltage and current. You can return to the prompt by hitting any key. Read values are shown on your terminal and stored in a file named data/IV_KEITHLEY2410_addrXX.dat.
100: You can change the number of sweep steps. Note that the minimul voltage step is 1 V.
101: You can change the interval between sweep steps. The unit is millisecond.
99: Exit the application.
#NOTE: You can exit the application while keeping output ON.

***Typical workflow:***
0(config)->
4(Output ON)->
3(Sweep HV to your desired value)->
6(Monitor IV)->
(Your measurement)->
3(Sweep HV to 0 V)->
1(Reset)->
99(Exit)
#NOTE: OUTPUT ON/OFF won't touch HV setting. It's just emulating the OUTPUT ON/OFF button!!

Command sets with no-interactive session:

#If you control multiple SourceMeters or controling them with combination of other DAQ, executables below might be useful.
bin/output_off_keithley24XX [your config file]
bin/output_on_keithley24XX [your config file]
bin/output_sweep_keithley24XX [your config file]
bin/read_iv_keithley24XX [your config file]
#They are basically having a same function as the operation 3-6 as above.