0
\$\begingroup\$

Does anyone know if there is a setting on the Tektronix TDS 2014 oscilloscope that I can set that will individually, auto scale each of the different waveforms so that none of their peaks will ever go out of the scope range? (Example picture of waveforms out of frame below.)

I tried looking in the user manual for such a setting but could not locate one.

Currently, I have to constantly watch the oscilloscope I have hooked up to an experiment I am working with. Since each experimental run can take up to 4 hours I would rather not have to stay in the lab just to keep an eye on this. Even when I do, I sometimes am not fast enough to manually change the scaling and lose out on some data collection.

If there is any other way say via programming with LabView, please let me know. I just want to see if there are any automation options.

PS - I can only work with this single oscilloscope, so I don't have the option to read each signal on a different scope. Moreover, the amplitudes of the signals will always vary between each experimental run and change during a single run in an unpredictable manner.

enter image description here

\$\endgroup\$
5
  • 1
    \$\begingroup\$ Does it have an Ethernet port? We have written python scripts to interface with Tek TDS 3000 scopes. Works fine (the protocol is pretty easy to understand). Write a python script to monitor the waveforms, and initiate an uberscale when needed. \$\endgroup\$ Commented Jul 9, 2021 at 21:09
  • 1
    \$\begingroup\$ I think Tex TDS2104B has USB control on the rear panel, and can be controlled through standard VISA libraries with SCPI. \$\endgroup\$
    – MarkU
    Commented Jul 9, 2021 at 21:33
  • \$\begingroup\$ If you’re only interested in capturing the shape of the waveforms over a large dynamic range, this sounds like a job for an audio compander or compressor/expander. Not sure how that affects measurement accuracy though. Sounds like you’re in more of an exploratory/ investigative phase right now though, so maybe some inherent distortion is ok if it helps adapt the dynamic range. \$\endgroup\$
    – MarkU
    Commented Jul 9, 2021 at 21:37
  • 1
    \$\begingroup\$ @ChrisKnudsen Unfortunately, it doesn't have an Ethernet port. However, I did see another oscilloscope that is newer and has that. If I can convince the right people to make this switch, I can try this. Do you have a specific, online resource that would help me get started on learning about the Ethernet protocol if I can use this new scope? Otherwise, I'll just Google around about it. \$\endgroup\$
    – Tom
    Commented Jul 9, 2021 at 22:39
  • \$\begingroup\$ @MarkU I may have to use this method over the Ethernet since the experiment is not allowed to connect to the internet in any way. The scope does not have a usb port but I might be able to get another scope if the right people agree to it. This is a physics experiment, but the electrical and mechanical systems are well in place and these are some vert sensitive measurements. Accuracy does matter since their shapes are used for integration in the data analysis. Would this be something I could program in Matlab, LabView or Python if I am able to get the usb scope? \$\endgroup\$
    – Tom
    Commented Jul 9, 2021 at 22:44

1 Answer 1

0
\$\begingroup\$

Traditionally, if the Tek3000 scope has an Ethernet interface, then the commands are just like good old GPIB, which Tek has documented (https://www.tek.com/oscilloscope/tds3014b-manual/tds3000-tds3000b-tds3000c-series).

There's no need for your scope network to connect to anything internetty.

The benefit for using the Ethernet interface, is that it is simple, and there is no need for involving additional layers, like VISA.

The USB interface requires more tools, like VISA. Visa works great, once you get it all setup, and provides reliable communication, but it is more to learn, and likely unnecessary for a project like this.

A sample Python transaction for a Tek3000 over Ethernet:

(I can't indicate the original writer of this code - it's been too long. Parts of it are likely me, parts from co-workers, parts from internet. If you recognize this as your work, then please indicate so in the comments.)

Intro comments:

"""
tds3014b.py - Script to provide control and data acquisition from the
Tektronix TDS3014B oscilloscope via Ethernet.

Example Usage:
>>> import tds3014b
>>> t = tds3014b.tds3014b(ip_addr='192.168.0.106')

Send a GPIB command to the scope - the return value is the response from the scope.
>>> t.gpib_cmd('*IDN?')
'TEKTRONIX,TDS 3014B,0,CF:91.1CT FV:v3.27 TDS3GV:v1.00 TDS3FFT:v1.00 TDS3TRG:v1.00\n'

>>> t.beep() # Make a sound

Fetch the current scope screen as an image:
>>> screen = t.get_screen() # PNG image data in a variable
>>> screen = t.get_screen('tds_screen.png') # PNG data in var and written to disk

Fetch the current data for a waveform on the specified channel using
get_waveform.  get_waveform returns a header, containing metadata
about the waveform, and the data as a list of points.

>>> header, data = t.get_waveform(channel=1, format='eng') # returns header (dict) and converted data points (array)
>>> header, data = t.get_waveform(channel=1, format='counts') # same as above but data points are in ADC counts instead of volts
>>> header, data = t.get_waveform(channel=1, format='csv') # data format is csv string
>>> header, data = t.get_waveform(channel=1, plot=True) # Will display plot on screen

The data can also be plotted afterwards using plot():
>>> t.plot(header, data)

Requirements:
For plotting, Numpy and Matplotlib are required. If you do not intend to plot,
only Python is required.
"""
import httplib2 # for Http
import urllib # for urlencode
import os
import struct
import datetime

Sample GPIB support:

def gpib_cmd(self, cmd):
        """
        Send a command to the scope and gets the response, if any.
        Commands are anything from the programming menu that you would
        typically send over GPIB, such as 'BUSY?' or 'FPANEL:PRESS
        clearmenu'.  The commands are sent by encoding them into a URL
        like this: http://192.168.0.106/?COMMAND=:BUSY?
        """
        # Commands that start with '*' (like *IDN?) shouldn't get a
        # ':' prefix.  Not exactly sure what the spec is, but this
        # works.
        if(cmd.startswith('*')):
            prefix = ''
        else:
            prefix = ':'

        cmd_url = "?COMMAND=%s%s" % (prefix, urllib.quote_plus(cmd))
        url = '/'.join([self.base_url, cmd_url])
        f = urllib.urlopen(url)
        content = f.read()
        f.close()
        return content

Sample Command:

def force_trig(self):
        """ If the scope is in a state where the force trig button
        would trigger it, this would do the same thing.
        """
        self.gpib_cmd('FPANEL:PRESS FORCETRIG')

Good luck!

\$\endgroup\$
1
  • \$\begingroup\$ Thank you for sharing this. We are building a new experiment that will hopefully incorporate the new oscilloscope with the Ethernet port. If it does I will certainly reference this when coding! \$\endgroup\$
    – Tom
    Commented Nov 28, 2021 at 0:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.