/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: HP6624AChannel.java * Written by Tom O'Neill, Sun Microsystems. * * Copyright (c) 2005 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */ package com.sun.electric.tool.simulation.test; /** * Class for setting a voltage level supplied by a single channel of an HP 6624A * programmable DC power supply, using the device-independent interface * {@link PowerChannel}. * <P> * This class should now be instantiated from a {@link Model#createPowerChannel(String, String, int, int, String)} */ public class HP6624AChannel extends PowerChannel { /** * The HP 6624A programmable DC power supply that provides the voltage level * in question */ private final HP6624A supply; /** Channel of power supply that supplies the voltage */ private final int channel; /** * Creates an object to control a HP 6624A power supply using the methods of * the device-independent PowerChannel abstract class. * <P> * Instead of this, you should use * {@link Model#createPowerChannel(String, String, int, int, String)}. * I have left it public for backwards compatability. * * @param channelName * name of signal on this channel of the power supply * @param supplyName * <code>gpibconf</code> identifier for the power supply * @param channel * Channel of the supply to control */ public HP6624AChannel(String channelName, String supplyName, int channel) { HP6624A.checkChannel(channel); this.name = channelName + " (" + supplyName + " channel " + channel + ")"; supply = new HP6624A(supplyName); this.channel = channel; logInit("Initialized HP6624AChannel " + this.name); } /** @return Returns the name of the HP6624A */ public String getSupplyName() { return supply.getName(); } /** * @return Returns the channel number within the HP6624A device. */ public int getChannel() { return channel; } /** * Returns string indicating state of the channels */ public String getState() { return supply.getState(channel); } /** * Reads back the voltage provided by this channel of the power supply. * * @return voltage drawn over this channel, in Volts */ public float readVoltage() { logOther("Reading voltage on " + getName()); return this.supply.readVoltage(this.channel); } /** * Set the channel's voltage to the value provided * * @param volts * new voltage for the channel, in Volts */ public void setVoltageNoWait(float volts) { logSet("HP6624AChannel setting voltage on " + getName() + " to " + volts + " V"); supply.setVoltage(this.channel, volts); } public void waitForVoltage(float setVolts) { if (supply.isDisabled()) return; super.waitForVoltage(setVolts); } /** * Get the channel's voltage setpoint * * @return voltage setpoint for the channel, in Volts */ public float getVoltageSetpoint() { logOther("Reading voltage setpoint on " + getName()); return this.supply.getVoltageSetpoint(this.channel); } /** * Returns voltage resolution of power supply. * * @return voltage resolution of power supply */ public float getVoltageResolution() { logOther("Getting voltage resolution on " + getName()); return HP6624A.getVoltageResolution(this.channel); } /** * Reads back the current provided by this channel of the power supply. * * @return current drawn over this channel, in Amps */ public float readCurrent() { logOther("Reading current on " + getName()); return this.supply.readCurrent(this.channel); } /** * Set the channel's current limit to the value provided * * @param amps * new current limit for the channel, in Amps */ public void setCurrent(float amps) { logSet("Setting current limit on " + getName() + " to " + amps); supply.setCurrent(channel, amps); } /** * Get the channel's current setpoint * * @return current setpoint for the channel, in Amps */ public float getCurrentSetpoint() { logOther("Reading current setpoint on " + getName()); return supply.getCurrentSetpoint(this.channel); } /** * Changes the voltage for the over voltage protection to * <code>setVolts</code> Volts. * * @param setVolts the new over-voltage limit * @throws IllegalArgumentException * if channel not in range 1..4 */ public void setOverVoltageProtection(float setVolts) { logSet("Setting over voltage protection limit on " + getName() + " to " + setVolts); supply.setOverVoltageProtection(this.channel, setVolts); } /** * Changes the current for the over current protection to * <code>setAmps</code> Amps. * * @param setAmps the new over-current limit * @throws IllegalArgumentException * if channel not in range 1..4 */ public void setOverCurrentProtection(float setAmps) { logSet("Setting over current protection limit on " + getName() + " to " + setAmps); supply.setOverCurrentProtection(this.channel, setAmps); } /** * Unit tests, prints current as function of voltage for channel 1. Should * disconnect supply from any chips before waiting. * * @param args * Ignored */ public static void main(String[] args) { Infrastructure.gpibControllers = new int[] { 1 }; HP6624AChannel[] channels = new HP6624AChannel[HP6624A.NUM_CHANNELS]; for (int chan = 1; chan <= HP6624A.NUM_CHANNELS; chan++) { int ichan = chan - 1; channels[ichan] = new HP6624AChannel("chan" + chan, "hHP6624A", chan); System.out.println(chan + ": " + channels[ichan].getState()); System.out.println("res " + channels[ichan].getVoltageResolution() + "\n"); } } }