Генерация синуса

Захват, обработка и генерирование сигнала
Ответить
Аватара пользователя
ProBoDiS
beginner
beginner
Сообщения: 42
Зарегистрирован: 20 мар 2012, 01:57
Версия LabVIEW: 2012
Откуда: Москва
Контактная информация:

Генерация синуса

Сообщение ProBoDiS »

Добрый вечер!
Пытаюсь непрерывно генерировать синус с помощью NI DAQCard 6036.
Генерация начинается, все как положено, но потом в какой-то момент времени цикл останавливается по приходу флага завершения задачи..при чем один раз запускаю :vi:, а генерация практически сразу останавливается, а иной раз может и минуту генерировать..т.е. время каждый раз разное и не понятно от чего зависит.. в чем проблема?что я не так делаю? Блок диаграмму прилагаю. Очень рассчитываю на вашу помощь!
Блок- диаграмма VI
Блок- диаграмма VI
Делай хорошо- плохо само получится!
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Генерация синуса

Сообщение Andrew Lunev »

Небольшие замечания по коду:
1. Если сигнал у вас типа Waveform, то используйте в DAQmx Timing (Use Waveform), тогда настройки сигнала передадутся в генерацию и частота генерации будет меняться в одном месте в программе.
2. Проверять выполнена ли задача с максимально возможной частотой не имеет смысла. Поставьте задержку в цикле. Каждая проверка нагружает карту и возможно приводит к ошибкам генерации.

По поводу ошибки. Укажите какие настройки частоты и буфера сигнала используете. Скорее всего генерация прерывается по ошибке, которую вы не проверяете и не обрабатываете. У этой платы отсутствует буфер FIFO для ЦАП, поэтому возможно данные не успевают поступать в плату. Уменьшите частоту генерации сигнала и кол-во точек генерации. Это делается в Sine Waveform (sampling info).

Ко всему прочему ваша карта не работает через DMA, а только через прерывания, для режима через прерывание максимальная частота генерации 1кГц, так что даже не пытайтесь получить больше. Да и стабильный килогерц получить сложно.
Аватара пользователя
ProBoDiS
beginner
beginner
Сообщения: 42
Зарегистрирован: 20 мар 2012, 01:57
Версия LabVIEW: 2012
Откуда: Москва
Контактная информация:

Re: Генерация синуса

Сообщение ProBoDiS »

1)Мне частота не больше 10 Гц нужна, так что проблем с этим не должно быть.
2)DAQmx Timing (Use Waveform) тоже пробовал, такая же ерунда получается.
3) Задержку в цикл действительно что то забыл поставить, спасибо. Но я больше чем уверен что причина не в этом, но исправлю, посмотрим что получится.
Не могли бы вы показать как правильно сформировать сигнал и запустить его на DAQmx? был бы премного благодарен:)
Делай хорошо- плохо само получится!
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Генерация синуса

Сообщение Andrew Lunev »

У вас вполне работоспособная программа. На других платах NI она должна работать, но именно NI DAQCard 6036 имеет некоторые ограничения и особенности из-за PCMCIA интерфейса . Так что дело не в коде, а в параметрах настройки вашей программы.
Реальная частота генерации синуса в вашей программе определяется двумя параметрами: frequency и rate. Какой из них 10 Гц?

Поставьте frequency=1 Гц, а rate=10 Гц и попробуйте программу в работе. Так же не забудьте в цикл добавить задержку например в 500 мс. Если и в таком варианте будет вылетать, то будем думать дальше. Так же посмотрите, что передается в кластере ошибок во время остановки программы.
Если в таком варианте перестанет вылетать, то увеличивайте rate пока не начнет вылетать. Максимальное теоретическое значение rate=1 кГц.
Аватара пользователя
ProBoDiS
beginner
beginner
Сообщения: 42
Зарегистрирован: 20 мар 2012, 01:57
Версия LabVIEW: 2012
Откуда: Москва
Контактная информация:

Re: Генерация синуса

Сообщение ProBoDiS »

В принципе если поиграться значениями этими то оно вроде перестает вылетать, или я так и не дождался.
Ошибка возникает -200016 "Property Node DAQmx Task (arg 1) in DAQmx Is Task Done.vi:1->Untitled 1.vi <append>
<B>Task Name: </B>_unnamedTask<16>
". Возник новый вопрос: как высчитать реальную частоту? Какая связь между rate и frequency?
Спасибо!
Делай хорошо- плохо само получится!
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Генерация синуса

Сообщение Andrew Lunev »

Все правильно, ошибка возникает из-за того, что данные не успевают поступать в ЦАП из LabView. О причинах я писал выше.
Rate это частота обновления данных на ЦАП. Frequency - частота синусоидального сигнала. Один и тот же сигнал если выдавать с разной частотой (rate) на выходе будет давать синусоиду разной частоты.
Чтобы этого не происходило и используется DAQmx Timing (Use Waveform), тогда задача аналогового вывода использует настройки генератора сигнала (берет их из Waveform).
Не забудьте только подключить Sine Waveform (sampling info) и поиграться значениями в нем. Там по умолчанию стоит 1000,1000. Я бы поставил 100,100 для вашей задачи.
Аватара пользователя
ProBoDiS
beginner
beginner
Сообщения: 42
Зарегистрирован: 20 мар 2012, 01:57
Версия LabVIEW: 2012
Откуда: Москва
Контактная информация:

Re: Генерация синуса

Сообщение ProBoDiS »

Спасибо большое, Andrew Lunev!
Теперь все хорошо работает! :drink:
Делай хорошо- плохо само получится!
Ответить

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