Finite acquisition+continuous generation

Захват, обработка и генерирование сигнала
Privetvsem
beginner
beginner
Сообщения: 24
Зарегистрирован: 22 янв 2013, 17:14
Версия LabVIEW: 2009, 2015
Контактная информация:

Finite acquisition+continuous generation

Сообщение Privetvsem »

Здравствуйте. Мне нужно было сделать так,чтобы гармонический сигнал с платы NI PCI 6251 проходил через нейкий четырехполюсник и оцифровывался этой же платой для определения амплитуды и фазы сигнала. То есть, это должно было быть чтото вроде исследования АЧХ и ФЧХ цепи. Как я это хотел сделать показано на рисунке. Таким образом, я так понял, что сигнал на время сбора данных должен генерироваться не прерываясь, а сам бор данных у меня будет конечный. Все это должно происходить циклически для каждой новой частоты синусоиды. Я сделал остановку генерации с помощью Is task done? в цепочке сбора данных. Запуск сбора данных происходит по тактовому генератору ЦАП с задержкой.

Проблема возникла в том, что у меня остановка генерации происходит почему то раньше, чем заканчивается сбор данных. Это видно на втором рисунке.
Так вот у меня вопрос как проследить за тем чтоб все выборки собраны и только тогда остановить работу ЦАП? Или я вообще неправильно это реализовал?
Заранее спсибо и извините, если криво объяснил проблему.
Вложения
123.JPG
345.JPG
ESeid

Автор
advanced
advanced
Сообщения: 150
Зарегистрирован: 30 мар 2011, 22:41
Награды: 1
Версия LabVIEW: 8.2-2013
Контактная информация:

Re: Finite acquisition+continuous generation

Сообщение ESeid »

Privetvsem, извини, дорогой, но ты ВСЕ сделал неправильно. У тебя идет непрерывная инициализация и останов генерации. Найди в examples->hardware input and output -> DAQmx->Analog Generation-> Voltage -> Cont Gen Voltage Wfm-Ext Clk.vi, скопируй к себе и возьми за основу. Аналоговый прием найдешь рядом сам. Тоже скопируй. И не обьединяй ты их в единый цикл - им вполне достаточно своих!
Privetvsem
beginner
beginner
Сообщения: 24
Зарегистрирован: 22 янв 2013, 17:14
Версия LabVIEW: 2009, 2015
Контактная информация:

Re: Finite acquisition+continuous generation

Сообщение Privetvsem »

Спасибо, буду разбираться.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Finite acquisition+continuous generation

Сообщение Borjomy_1 »

Цикл здесь, похоже, на опрос разных частот, так что рано его удалять.
Privetvsem, в принципе ваша программа имеет право на существование. Проблема у вас возникает из-за того, что запуск задач вывода и опроса происходит в разное время. Их необходимо синхронизировать.
Вложения
Синхронизация вывода.png
Privetvsem
beginner
beginner
Сообщения: 24
Зарегистрирован: 22 янв 2013, 17:14
Версия LabVIEW: 2009, 2015
Контактная информация:

Re: Finite acquisition+continuous generation

Сообщение Privetvsem »

А это не тоже самое если просто подвести к функции DAQmx Trigger название источника, по которому срабатывает опрос, как это сделано у меня?
Я ща поробую расписать как я для себя понимаю то, что я наваял. У меня начинается генерироваться сигнал заданной частоты, причем пока не закончится опрос генерация не должна остановиться. Опрос начинается как только срабатывает тактовый генератор ЦАП, причем начало опроса задержанно на какоето время для того, чтобы закончились переходные процессы в исследуемой цепи, если такие возникнут. Опрос начинается, заканчивается, проверяется выполнено ли задание и отправляется остановка цикла в continuous generation, чтобы можно было перейти дальше по циклу на новую частоту сигнала и продолжать измерение. Я сделал так, чтобы при каждом новом сборе данных перерасчитывалось количество выборок, чтобы оцифровывалось 4 периода сигнала известной частоты.
На высоких частотах все работает. То есть АЦП успевает оцифровать 4 периода и расчет идет правильный. Но почему то на низких частотах, типа 10 Гц, генерация обрывается, не успев сгенерировать и пол периода. И, соответственно, как на том рисунке, у меня получается кусок синусоиды и прямая линия за ней.
Я далеко не мастер, но мот дело в Is Task Done? То есть он возращает, что задание выполнено, а на самом деле оно было отправлено на плату и только выполняться начало?
Еще раз простите за некомпетентность, я эти daqюшные фишки по примерам из книги разбирал.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Finite acquisition+continuous generation

Сообщение Borjomy_1 »

Не увидел... Да это тоже самое.
Еще один нюанс - у вас запускается задача АЦП независимо по времени, правильнее гарантированно запускать ее ДО запуска задачи ЦАП. Есть два случая - когда АЦП позже начинает или когда ЦАП раньше заканчивает. Опять-же, закрывать задачу выдачи следует после завершения задачи чтения. И цикл ожидания завершения выдачи не будет нужен. Т.е закрываться задачи будут только после чтения заданного количества отсчетов.
И непонятно, зачем вы ставите задержку в старте АЦП, она, кстати, тоже может портить вам работу.
Privetvsem
beginner
beginner
Сообщения: 24
Зарегистрирован: 22 янв 2013, 17:14
Версия LabVIEW: 2009, 2015
Контактная информация:

Re: Finite acquisition+continuous generation

Сообщение Privetvsem »

Задержку я поставил, чтобы закончились переходные процессы в исследуемой цепи от резких скачов уровня сигнала, кодга презапускается генерация
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Finite acquisition+continuous generation

Сообщение Borjomy_1 »

В таком случае вам в генерацию надо заводить не чистый синус, а пропущенный через "окно Хамминга" (либо Ханнига). Никаких резких скачков тогда не будет. А результат вычисления амплитуды нужно будет просто умножить на 2. И вы хорошо будете видеть в результате - а насколько точно попадаете в нужные периоды. Если все таки хотите задержку, то организуйте ее таймером.
Насколько я понимаю, вы ведь выдаете заданные 4 периода, которые потом снимаете? И всё? Или число периодов у вас с запасом на переходные процессы?
Privetvsem
beginner
beginner
Сообщения: 24
Зарегистрирован: 22 янв 2013, 17:14
Версия LabVIEW: 2009, 2015
Контактная информация:

Re: Finite acquisition+continuous generation

Сообщение Privetvsem »

Генерируется у меня по плану не 4 периода, генерация у меня идет ровно столько сколько нужно чтобы оцифровать 4 периода + задержка+ прочие вещи торомзящие процесс измерения. То есть у меня Continuous generation, которая прекращается когда от ЦАПа на данной частоте уже ничего не нужно. Я так понимаю это называется continuous generation with regeneration.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Finite acquisition+continuous generation

Сообщение Borjomy_1 »

В таком случае лучше резать уже результат, а не играться с запуском. Это проще контролировать.
Privetvsem
beginner
beginner
Сообщения: 24
Зарегистрирован: 22 янв 2013, 17:14
Версия LabVIEW: 2009, 2015
Контактная информация:

Re: Finite acquisition+continuous generation

Сообщение Privetvsem »

Да, тогда, я так понимаю мне просто сделать запуск АЦП раньше чем ЦАП, и просто вырезать то что оцифровано было в начале?
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Finite acquisition+continuous generation

Сообщение Borjomy_1 »

Ну да, причем тогда можно будет вырезать нужное число периодов (ведь число точек на период наперед известно) и таким образом убрать ошибку по вычислению фазы.
Privetvsem
beginner
beginner
Сообщения: 24
Зарегистрирован: 22 янв 2013, 17:14
Версия LabVIEW: 2009, 2015
Контактная информация:

Re: Finite acquisition+continuous generation

Сообщение Privetvsem »

Нашел решение проблемы. Все оказалось очень глупо. Я просто забыл заносить в глобальную переменную, которая сигнализировала о завершении сбора данных, состояние false в начале каждой новой итерации цикла. Внизу прикрепил рисунок.
Вложения
123.JPG
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Finite acquisition+continuous generation

Сообщение Borjomy_1 »

Вы всерьез думаете, что расположенная таким образом инициализация переменной будет выполняться в начале цикла потому, что находится левее и ниже? Возможно, сейчас оно будет так выполняться, но в общем случае - нет.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Finite acquisition+continuous generation

Сообщение dadreamer »

Да и установка значения task done? и параллельно останов цикла по условию task done?=true тоже не есть хорошо.
Ответить

Вернуться в «Обработка сигнала»