Unipolar Operation
Unipolar Firmware
Please make sure you are running the unipolar version of the firmware on your power supply when using these commands. To upload the unipolar firmware, follow the instructions in the firmware flashing guide.
To verify that you are running the correct firmware, you can run the following command in the ARDI console:
psu.ask('hardware')
Which should return something like:
'PS2-08-A (UNIPOLAR)'
# or
'A1x8 (UNIPOLAR)'
Connecting Actuators
When operating in unipolar mode, the negative side of loads must ALWAYS be connected to the high voltage return terminal (11), and NEVER to a common ground connection.
It should be noted that the high voltage return terminal (11) is NOT equivalent to ground. There is a 10 kOhm surge resistor between the HV return pin and ground, to limit the current in the event of a short or arcing.
In unipolar operation, the high voltage return terminal may swing as high as 350V relative to ground, depending on the load and operating conditions.
Automatic Calibration
Upon switching HV on, the power supply calibrates to the connected load and and selects control parameters accordingly. Incorrect control parameters may damage actuators or the power supply itself.
NEVER CONNECT LOADS WHILE HV IS ON.
To change connected loads, always turn off HV, disconnect the load, and then turn HV back on. The power supply will re-calibrate to the new load and select appropriate control parameters for driving it.
Please note that during calibration, all channels will output up to 1kV.
Unipolar Waveforms
zero
chX.zero()
Zero the output of the channel. This is equivalent to specifying a setpoint voltage of 0V.
Example:
import ardi
psu = ardi.autoconnect()
ch1 = psu.channels['ch1']
ch1.zero()
voltage
chX.voltage(amp)
Output a constant amp
volts on channel chX
. This value should be positive.
Example:
import ardi
psu = ardi.autoconnect()
ch1 = psu.channels['ch1']
ch1.voltage(5000) # set ch1 to 5kV
waveform
chX.waveform(xs, dt=1000)
Program channel chX
to output a waveform defined by xs
, an iterable list of integer voltage values. The waveform is played at a fixed sample rate dt
, which is an optional argument that defaults to 1000 microseconds per sample. All waveforms are played repeatedly in a loop. Unipolar waveforms should be defined using integers ranging from 0 to the rail voltage.
Please note that at the moment, only 5000 points can be stored in the waveform memory. If the waveform is longer than 5000 points, it will be truncated. This number is expected to increase with future firmware updates.
Example:
import ardi
import numpy as np
from numpy import pi
# goal: superimpose two 2.5kV sinusoids with different frequencies
# to make a more complex 5kV waveform
dt = 1000 # sample rate, 1000 microseconds/sample is a good default
f1 = 1 # Hz
f2 = 5 # Hz
# create a time vector (in seconds) long enough to hold a full period
ts = np.arange(0, 1, (f2*dt)/1e6)
# sample the waveform
xs = [1250*( 2 + np.sin(2*pi*t*f1) + np.sin(2*pi*t*f2) ) for t in ts]
# connect to and program the device
psu = ardi.autoconnect()
ch1 = psu.channels['ch1'] # unipolar
ch1.waveform(xs, dt)
Which will output the following waveform:
sin
chX.sin(freq, amp, phase=0)
Output a sinusoid with a frequency of freq
Hz and an amplitude of amp
V on channel chX
.
Phase is optional, defaults to zero, and takes values in degrees. Unipolar channels only output positive voltages. For example, a unipolar sinusoid with an amplitude of 1000V will oscillate between 0 and 1000V.
Example:
import ardi
psu = ardi.autoconnect()
ch1 = psu.channels['ch1'] # unipolar
ch1.sin(1, 5000) # 1 Hz, 5kV
square
chX.square(freq, amp, duty=0.5, phase=0, slew_limit=None)
Output a square wave with frequency freq
Hz, amplitude amp
V, and duty cycle duty
on channel chX
. The optional duty cycle argument defaults to 0.5, and takes values between 0 and 1. 0 corresponds to a 0% duty cycle, and 1 corresponds to a 100% duty cycle. Unipolar channels only output positive voltages, so the square wave will oscillate between 0 and amp
V. The slew_limit
argument is an optional argument that defaults to None
. If specified, it will limit the slew rate of the square wave to the specified value in V/µs.
Example:
import ardi
psu = ardi.autoconnect()
ch1 = psu.channels['ch1'] # unipolar
ch1.square(1, 5000, 0.2) # 1 Hz, 5kV, 20% duty cycle
chirp
chX.chirp(f0, f1, T, amp, bounce=True)
Output a chirp signal, or in other words, a sinusoid with a variable frequency sweeping between f0
and f1
Hz over a period of T
seconds. The amplitude of the chirp is amp
V. Unipolar channels only output positive voltages. In other words, a unipolar chirp with an amplitude of 1000V will oscillate between 0 and 1000V.
Bounce is an optional argument that defaults to True
. When bounce
is True
, the chirp will sweep back and forth between f0
and f1
Hz. When bounce
is False
, the chirp will sweep from f0
to f1
Hz and then immediately jump back to f0
Hz. If bounce is True
, T
must be less than 2.5 seconds. Otherwise, T
must be less than 5 seconds.
Example:
import ardi
psu = ardi.autoconnect()
ch1 = psu.channels['ch1'] # unipolar
ch2 = psu.channels['ch2'] # unipolar
ch1.chirp(1, 50, 2, 5000) # 1->50, 50->1, 1->50... Hz, 5kV
ch2.chirp(1, 50, 2, 5000, bounce=False) # 1->50, 1->50,... Hz, 5kV
The second chirp will output the following waveform: