PyVISA
PyVISADocs

Power Supply Control Example

Control a GW Instek GPD-4303S power supply using PyVISA to set voltage, current, and monitor operating modes.

This Python script uses PyVISA to control a GW Instek GPD-4303S power supply. It sets a voltage and current limits for two channels, reads their output values, and determines their operating modes (CV or CC). The interface here is Serial over USB.

import pyvisa
import time

# Create a resource manager
rm = pyvisa.ResourceManager()

# Connect to the power supply (update the VISA address as needed)
ps = rm.open_resource("ASRL/dev/ttyUSB0::INSTR",
                      baud_rate=115200,
                      write_termination="\\n",
                      read_termination="\\r\\n")
        
try:
    # Print the power supply model
    model = ps.query("*IDN?")
    print(f"PSU model: {model}")

    # Set voltage and current limits for channels 1 and 2
    ps.write("VSET1:10.0")    # Set CH1 voltage to 10V
    ps.write("ISET1:0.5")     # Set CH1 current to 0.5A
    ps.write("VSET2:19.0")    # Set CH2 voltage to 19V
    ps.write("ISET2:0.1")     # Set CH2 current to 0.1A

    # Turn output on
    ps.write("OUT1")

    # Wait 2 seconds
    time.sleep(2)

    # Read voltage and current values
    voltage1 = ps.query("VOUT1?")
    voltage2 = ps.query("VOUT2?")
    current1 = ps.query("IOUT1?")
    current2 = ps.query("IOUT2?")

    # Print voltage and current values
    print(f"Channel 1: {voltage1} V, {current1} A")
    print(f"Channel 2: {voltage2} V, {current2} A")

    # Check if CH1 is in CC or CV mode
    status = ps.query("STATUS?")
    
    # Remember that all commands return strings
    ch1_mode = "CV" if status[0] == '1' else "CC"
    ch2_mode = "CV" if status[1] == '1' else "CC"

    # Print channel modes
    print(f"Channel 1 is in {ch1_mode} mode")
    print(f"Channel 2 is in {ch2_mode} mode")

    # Turn output off
    ps.write("OUT0")

finally:
    # Close connection
    ps.close()
    rm.close()

How is this guide?