Bipolar Operation
Bipolar Firmware
Please make sure you are running the bipolar 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 (BIPOLAR)'
# or
'A1x8 (BIPOLAR)'
Connecting Actuators
When operating in bipolar mode, the loads must ALWAYS be connected to an adjacent pair of output channels (7), and NEVER to a common ground connection. In other words, an individual actuator should be connected to channels 1&2, 3&4, 5&6, or 7&8. In this configuration, the actuator can be controlled as ch12
, ch34
, ch56
, or ch78
, respectively.
In bipolar operation, if possible, please connect the the high voltage return terminal (11) to an earth ground for best results. Do NOT connect the high voltage return terminal to the common ground of the HDMI port or input power.
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.
Bipolar Waveforms
zero
chXY.zero()
Zero the output of the channel.
voltage
chXY.voltage(amp)
Output a constant amp
volts on channel chXY
. This value can be positive or negative.
Example:
import ardi
psu = ardi.autoconnect()
ch12 = psu.channels['ch12'] # bipolar
ch12.voltage(5000) # set ch12 to 5kV
ch12.voltage(-5000) # set ch12 to -5kV
waveform
chXY.waveform(xs, dt=1000)
Output a waveform defined by xs
on channel chXY
. The waveform is defined as an iterable list of integer voltage values in V, and is played at a rate of dt
microseconds per point. All waveforms are played repeatedly in a loop. Bipolar waveforms can take values from -v_rail to +v_rail.
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 (-2.5kV to 2.5kV)
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 = [2500*(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()
ch12 = psu.channels['ch12'] # bipolar
ch12.waveform(xs, dt)
sin
chXY.sin(freq, amp, phase=0)
Output a sinusoid with a frequency of freq
Hz and an amplitude of amp
V on channel chXY
.
Phase is optional, defaults to zero, and takes values in degrees. Bipolar channels output positive or negative voltages. For example, a bipolar sinusoid with an amplitude of 1000V will oscillate between +/- 500V.
Example:
import ardi
psu = ardi.autoconnect()
ch12 = psu.channels['ch12'] # bipolar
ch12.sin(1, 5000) # 1 Hz, -2.5kV to 2.5kV
square
chXY.square(freq, amp, duty=0.5)
Output a square wave with frequency freq
Hz, amplitude amp
V, and duty cycle duty
on channel chXY
. 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. Although bipolar channels can output negative voltages, this function only generates unipolar voltage patterns. In other words, the square wave will oscillate between 0 and amp
V. Please note that amp
may be positive or negative.
square (alternating polarity)
chXY.square_alt(freq, amp, duty=0.5)
Output a square wave with alternating polarity on each high state. In other words, the square wave will step through the pattern [0, amp, 0, -amp] V. Otherwise, this function behaves identically to chXY.square
.
chirp
chXY.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. Bipolar channels output positive or negative voltages. For example, a bipolar chirp with an amplitude of 1000V will oscillate between +/- 500V.
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.