Module containing labscript suite hardware compatibility, separate from the main programs. Device compatibility is implemented with a plugin architecture, for modularity and extensibility. Each file in this module contains a labscript device class, a BLACS tab class, a BLACS worker class and a runviewer parser class for a particular device. These implement functionality for the device which the programs in question call on when they encounter each device in user labscript code, hdf5 files, or connection tables.
In the current implementation, it seems as though the DDS outputs on a pulseblaster (DDS-II-300-AWG in this case) cannot be ramped.
There is a flag in pulseblaster.py which sets the internal pseudoclock to be non-rampable. Simply changing this to allow ramping does not work.
The resulting ramp appears to have the wrong timescale.
In my test case, I had the pulseblaster DDS amplitude ramp from 0 to 1 over a second, and then at the end of that ramp, a device clocked by flag 0 of the pulseblaster was supposed to have a 2s long ramp.
Instead, based on the traces shown in runviewer, the pulseblaster DDS amplitude slowly increased, but with quite long time intervals between jumps in amplitude, and only reached ~0.2 by the end of the experiment. Meanwhile, the device which was supposed to ramp at the completion of the pulseblaster ramp started its ramp at the start of the pulseblaster ramp, and completed it in the duration set.
There must be some issues with the internal clocking?
There is, however a relatively easy workaround, so long as you are not doing anything too complex: use a for loop to update the DDS value to "constant" values based on the function which you want it to follow.
The main limitation of this workaround is that it may be hard to implement overlapping ramps or other complex situations like this, which labscript is generally excellent at dealing with.
Original report (archived issue) by Shaun Johnstone (Bitbucket: shjohnst, GitHub: shjohnst).
In the current implementation, it seems as though the DDS outputs on a pulseblaster (DDS-II-300-AWG in this case) cannot be ramped. There is a flag in pulseblaster.py which sets the internal pseudoclock to be non-rampable. Simply changing this to allow ramping does not work. The resulting ramp appears to have the wrong timescale.
In my test case, I had the pulseblaster DDS amplitude ramp from 0 to 1 over a second, and then at the end of that ramp, a device clocked by flag 0 of the pulseblaster was supposed to have a 2s long ramp. Instead, based on the traces shown in runviewer, the pulseblaster DDS amplitude slowly increased, but with quite long time intervals between jumps in amplitude, and only reached ~0.2 by the end of the experiment. Meanwhile, the device which was supposed to ramp at the completion of the pulseblaster ramp started its ramp at the start of the pulseblaster ramp, and completed it in the duration set.
There must be some issues with the internal clocking?
There is, however a relatively easy workaround, so long as you are not doing anything too complex: use a for loop to update the DDS value to "constant" values based on the function which you want it to follow. The main limitation of this workaround is that it may be hard to implement overlapping ramps or other complex situations like this, which labscript is generally excellent at dealing with.