labscript-suite / labscript-devices

A modular and extensible plugin architecture to control experiment hardware using the 𝘭𝘒𝘣𝘴𝘀𝘳π˜ͺ𝘱𝘡 𝘴𝘢π˜ͺ𝘡𝘦.
http://labscriptsuite.org
Other
5 stars 60 forks source link

Pulseblaster DDS cannot be ramped #13

Open philipstarkey opened 9 years ago

philipstarkey commented 9 years ago

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.