Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Awg70k odmr #644

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open

Awg70k odmr #644

wants to merge 5 commits into from

Conversation

Geegee
Copy link
Contributor

@Geegee Geegee commented Feb 5, 2021

Use the Tektronix AWG70k as a microwave source that works in the ODMR toolchain.

Description

@Neverhorst made the AWG70k comply with the microwave interface.
I made the get_status functions use overloading. Introduced a new function that
gets the sampling rate of the simple waveform compiler and additionally a small change
that ensures that the number of samples is even.

Motivation and Context

How Has This Been Tested?

Could only test with some changes as the way I run ODMR differs somewhat
due to different hardware (mainly I need an additional sequence step that is only run once).

Screenshots (only if appropriate, delete if not):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • [ x] New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist:

  • [x ] My code follows the code style of this project.
  • I have documented my changes in the changelog (documentation/changelog.md)
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added/updated for the module the config example in the docstring of the class accordingly.
  • I have checked that the change does not contain obvious errors (syntax, indentation, mutable default values).
  • I have tested my changes using 'Load all modules' on the default dummy configuration with my changes included.
  • All changed Jupyter notebooks have been stripped of their output cells.

Neverhorst and others added 3 commits February 5, 2021 14:06
…icrowave source.

For this additional functions were added so the 'tektronix_awg70k.py' hardware file complies
with the microwave_interface.

Now Resolved merge conflict resulting from cherry-picking commit ec77b93 from
branch awg70k_microwave_interface.
Some diffs between master and awg70k_microwave_interface remain unclear:

__max_seq_steps = 0 <-> __max_seq_steps = -1 (changed for several parameters, sticking with the master
branch)
Comment in commit ec77b93 "THIS FEATURE IS NOT SUPPORTED BY AWG70K" but is apparently used in
the current master branch.
One command self.query(*OPC) that is not used in the master branch.
….py" file

in the last commit. Added function to get the sampling rate used by the waveform compiler plugin and ensuring that the number of samples is a multiple of 2.
Copy link
Member

@Neverhorst Neverhorst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested it on my setup and unfortunately it still gives me the same instabilities and extremely long waiting times as back when I tried to implement that.
First time I started an ODMR scan it took about 2 min before it actually started measuring. Then I stopped and changed the power and started again. Boom, waited for 10 min before I gave up because ODMR and the AWG did not respond anymore. Checking the socket server on the AWG itself revealed an ongoing read operation from client. This is exactly the kind of problem what makes those Tektronix AWG so bad. The server running on the AWG just deadlocks randomly on queries and the commands *WAI and *OPC? do not behave as specified in the standard.

Long story short, in my opinion this scheme of using the Tektronix AWG70k is completely unuseable. Very long waiting times during experiments, extremely volatile device communication and missing sync between this functionality and other modules using the AWG (like pulsed).

The additional cost for a cheap CW microwave device (~2k EUR) and a simple (slow) microwave switch (~100 EUR) makes a setup so much more productive and stable compared to using this integrated solution. And if you can afford a multi-100k AWG, these additional parts should be in the budget.

It's a shame that Tektronix is so extremely incompetent when it comes to their Software but it currently limits the usefulness for applications. (Analog hardware is great though)

@Neverhorst
Copy link
Member

@Geegee Do you encounter an entirely different user experience?

@Geegee
Copy link
Contributor Author

Geegee commented Mar 2, 2021

What I can say is that it is slower compared to the setup with e.g. the SMIQ, but besides that it is running fine. As far as I remember also @anjusha-vs was using it for some time. Maybe it is a problem with the 2 channel AWG? It could also
be the number of points. I usually use around 50 - 150 points, which is quiet fast (maybe 20 seconds). I just checked for 300 points it maybe takes a minute.

Copy link
Contributor

@ksenkalla ksenkalla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request was tested on a setup with Windows 8.1 Enterprise and with an one channel Tektronix AWG 70001A. The output was checked with an Antritsu Spectrum Analyzer.
The first loading of the ODMR module after starting qudi causes the AWG "Compiling basic waveforms" taking actually a long time.
image

As long as the ODMR GUI is not loaded yet loading other modules causes the whole qudi to crash. After some while the ODMR GUI appears with a timeout error notification.
image

I am not sure if this only happens to me or was also observed in other setups.

Another severe error is that the actual sampling rate of the hardware is not checked but assumed to be 50GS/s, even if in the config already something differnt is defined.
Loading and playing a waveform with not the proper sampling rate causes a wrong output (checked with the spectrum analyzer).

The test of the bounderies in the GUI was successful, no wrong parameter could be set.
With configuring the sampling rate to 50GS/s the output was correct for a single frequency as well as for ODMR runs.

I tested ODMR runs up to 4k points. These runs were successful but took a lot of time to upload. For 1k points it was about 5 min, however, double the points took more than double the time.
For a common use of the ODMR, finding some unknown resonance frequency this is very unconvenient way of working.
During the upload it is not possible to change the parameters (which is basically good) or interrupt the upload. Especially considering an accidentally set input parameter, it can be useful to interrupt a maybe very long uploading process.
It is not possible to load also other modules relying on the AWG when it is still busy.
image
This will cause an severe error in the communication, so that both, the AWG and qudi has to be restarted to again communicate properly.

Maybe this pull request could be an option when the bugs are fixed for only small ranges (~100 points), but for the common use of ODMR it is currently not stable enough.

- First the sampling rate of the waveform compiler is set to the sampling rate of the AWG.
- Second the user is notified with an error message in case the sampling rate is
  too low for the given frequency (around 6 points per period are necessary).
@Geegee
Copy link
Contributor Author

Geegee commented Apr 13, 2021

Thanks a lot for the rigorous testing, especially the sampling rate issue. It turns out that there are a couple more
intricacies with the Tektronix AWG. First the sampling rate in the waveform compiler can not be set below a
certain value. This value seems to be 200 / 33 (6.06...) samples per period given the selected frequency.
The second point is that when making the waveform compiler active in the software it automatically selects
50 GS/s as you observed.
The second is easily fixed by setting the sampling frequency in the waveform compiler to the sampling frequency
of the AWG after making the waveform compiler plugin active. For the first one I made a check so that the highest
frequency given the sampling rate of the AWG is not violating this condition.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants