Чтение аналогового сигнала напряжения с помощью программируемого осциллографа

Я пытаюсь автоматизировать использование цифрового осциллографа Tektronix TBS 1052B, чтобы получить форму волны аналогового сигнала напряжения. Или, другими словами, получить несколько выборок измерения напряжения с течением времени.

Кажется, есть по крайней мере два режима измерения для настройки осциллографа для выполнения измерения: MEASurement и WAVFrm . Вот тут у меня проблемы. Основываясь на том, как работает WAVFrm , кажется, что он используется только для интерпретации двоичных данных (здесь я могу ошибаться), поэтому мне кажется, что эту конфигурацию мне не следует использовать . С другой стороны, документация для MEASurement не описывает способ взятия определенного количества выборок (именно это мне нужно сделать, чтобы получить форму аналогового сигнала), поэтому такая конфигурация также не кажется разумной.

Похоже, какую бы конфигурацию я ни выбрал, она не даст мне желаемого результата! Должно быть, меня смущает их документация [здесь] .

Может ли кто-нибудь помочь пролить свет на то, какую конфигурацию я должен использовать, MEASurement или WAVFrm ?

Обычно форма сигнала на осциллографах относится к образцам времени/значения, а измерение относится к «постобработанной» информации, такой как размах напряжения, выброс, период и т. д. Я не знаком с интерфейсом программирования для этого осциллографа, но я не удивлюсь, если он будет следовать этой терминологии.
Мне кажется, что вы захотите использовать команды Waveform (начиная со стр. 2-37) для захвата сигнала. Команды Measure (2-23) больше подходят для получения чисел, которые оцениваются из сигнала (как говорит @helloworld922, «постобработанная» информация).
Я действительно пытаюсь сделать очень простую вещь. Документация о том, как работают сигналы и функции измерения, оставляет желать лучшего. Вместо описания общего процесса документация больше похожа на словарь для каждой возможной команды.
Будут ли команды измерения давать мне все точки данных? Что я указал с помощью DATA:STAR через DATA:STOP? Поскольку во всех примерах показано, что возвращается только одна точка данных.
В конце концов, мне бы очень хотелось просто иметь массив значений напряжения.

Ответы (2)

Я никогда не использовал этот конкретный осциллограф, но попробую. Обратите внимание, что вам нужно выяснить, как включить последовательность команд, которую я рекомендовал ниже, в любой пакет программного обеспечения для сбора данных, который вы используете (LabVIEW, MATLAB, VEE и т. д.).

Начните со сброса элементов управления и настроек осциллографа к их «заводским настройкам по умолчанию» (см. также приложение B «Заводские настройки» в руководстве программиста TBS1000 [подсказка: найдите «руководство программиста tbs1000» на tek.com]). Это делается с помощью команды SCPI «*RST»:

*RST

Отобразить канал 1 И ВЫКЛЮЧИТЬ канал 2:

SELECT:CH1 ON;CH2 OFF

Настройте элементы управления запуском по горизонтали, вертикали и т. д. по желанию, например, время по горизонтали/дел = 1 мс/дел; канал 1 Вольт/дел = 1В/дел:

HORIZONTAL:MAIN:SCALE 1E-3
CH1:SCALE 1

Настройте осциллограф на захват одиночной волны, когда осциллограф обнаруживает выполнение условий запуска:

ACQUIRE:STATE STOP
ACQUIRE:STOPAFTER SEQUENCE

Получите один сигнал («выполнить один раз»):

ACQUIRE:STATE RUN

Дождитесь завершения сбора данных. Это делается путем выдачи запроса SCPI "*OPC?" (операция завершена?). Как указано в руководстве программиста осциллографа, «[т] ответ *OPC? недоступен для чтения, пока не будут завершены все ожидающие операции», что означает *OPC? вызов блокируется до тех пор, пока осциллограф не завершит задачу сбора данных.

*OPC?

В группе команд WAVEFORM используйте команду CURVE? запрос для передачи данных формы сигнала канала 1 с осциллографа на компьютер:

DATA:SOURCE CH1
CURVE?

Обратите внимание, что "КРИВАЯ?" query возвращает поток байтов, которые обычно хранятся в буфере, созданном вашей программой для этой цели (например, в массиве символов или массиве байтов). Затем ваша программа анализирует нужную информацию из сохраненных данных в буфере. То, как именно это делается, полностью зависит от языка программирования и используемых библиотек ввода-вывода, например, LabVIEW, MATLAB, VEE и т. д., и предлагается читателю в качестве упражнения.

PS Если вам нужна помощь в написании кода для определенного языка программирования, я рекомендую вам найти/использовать форумы, посвященные конкретному языку программирования, с которым вы работаете, например, форумы по программированию ввода/вывода приборов LabVIEW; Форумы программирования ввода-вывода приборов MATLAB и т. д. Эти люди гораздо лучше подходят для ответов на вопросы, связанные с языком программирования, чем люди на форуме электроники. (<- Не жалуюсь/ныть, просто говорю...)

Я разговаривал с представителем Tek и получил на этот вопрос очень похожий ответ. Я попробую и вернусь к вам.

Просто решил добавить сюда свой ответ (который сработал для меня) на случай, если кому-то понадобится помощь в будущем.

Получение сигнала

Хотя это и не требуется, первое, что я делаю, это очищаю регистр статуса события следующим образом:

*ESR?

Затем я даю осциллографу команду начать сбор сигнала:

ACQUIRE:STATE ON

Затем я жду завершения сбора данных, наблюдая за состоянием операции.

*OPC?

Затем, чтобы понять данные, которые возвращаются из сигнала, я переключаюсь на формат ASCII следующим образом:

DATA:ENC ASCI

Теперь я готов получить сигнал:

CURVE?

Сбор образцов напряжения

Теперь начинается сложная часть, которая заняла у меня некоторое время. Следующая формула ( взято из справочного руководства программиста ) требуется для преобразования значений дигитайзера в значения напряжения:

Преобразование дигитайзера в стоимость

Итак, в этом уравнении yn символизирует наши значения дигитайзера (точки на осциллограмме), и я не буду вдаваться в подробности о том, что представляют собой другие переменные, потому что они есть в руководстве. Переменные можно получить следующим образом, и обратите внимание, что проще всего сохранить область в режиме ASCII, потому что тогда мы можем подставить значения непосредственно в формулу.

Для YZero:

WFMPre:YZEro?

Для YMUlty:

WFMPre:YMUlty?

Для YOFF:

WFMPre:YOFf?

Теперь подставьте все эти значения в формулу, а затем вычислите напряжение (Yn) для каждого из значений дигитайзера (yn).