Генерация низкочастотных прямоугольных импульсов через ЦАП
-
- user
- Сообщения: 81
- Зарегистрирован: 17 ноя 2015, 11:57
- Версия LabVIEW: 12
- Благодарил (а): 4 раза
- Контактная информация:
Генерация низкочастотных прямоугольных импульсов через ЦАП
Добрый день!
Встала задачка генерить N прямоугольных импульсов 0-5В для шагового двигателя на различной частоте.
Использую ЦАП NI PCI-6221 с подключенной коробкой BNC-2120. К коробке на ao1 подцепил аналоговый осциллограф.
На 1000Гц всё работает нормально, на 100 хуже, на 10Гц какой-то бардак творится.
Причём при генерации синуса или любого другого сигнала c изменением амплитуды не скачком проблем нет!
Что же не так? Должна быть какая-то очень простая ошибка...
Спасибо большое за помощь!
Фотки с осциллографа и программу прикладываю.
Встала задачка генерить N прямоугольных импульсов 0-5В для шагового двигателя на различной частоте.
Использую ЦАП NI PCI-6221 с подключенной коробкой BNC-2120. К коробке на ao1 подцепил аналоговый осциллограф.
На 1000Гц всё работает нормально, на 100 хуже, на 10Гц какой-то бардак творится.
Причём при генерации синуса или любого другого сигнала c изменением амплитуды не скачком проблем нет!
Что же не так? Должна быть какая-то очень простая ошибка...
Спасибо большое за помощь!
Фотки с осциллографа и программу прикладываю.
- Вложения
-
- analog_generator.vi
- (16.81 КБ) 226 скачиваний
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Вы уверены, что проблема в генерации, а не в осциллографе? Может он на таком режиме развертки какие-то параметры не держит? Ему лет то уже...
Заведите выход на AI вход той же платы и проверьте запись, сравните с результатом не осциллографе.
Заведите выход на AI вход той же платы и проверьте запись, сравните с результатом не осциллографе.
-
- user
- Сообщения: 81
- Зарегистрирован: 17 ноя 2015, 11:57
- Версия LabVIEW: 12
- Благодарил (а): 4 раза
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Не то чтобы уверен, но этим осциллографом пользуемся часто (например 50Гц помехи от 220V сети на нём очень хорошо видны)... да, попробую снять сигнал на входе через АЦП. Спасибо.
-
- user
- Сообщения: 81
- Зарегистрирован: 17 ноя 2015, 11:57
- Версия LabVIEW: 12
- Благодарил (а): 4 раза
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Упс... первая прикидка дала что походу всё нормально работает... правда что-ли? Закоротил ao1 на ai5... Вот бы никогда не подумал, что осциллограф может не давать измерить корректно 10-100Гц...
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Генерация низкочастотных прямоугольных импульсов через Ц
На всех трех картинках видно, что сигнал затухает по экспоненте. Просто на малых периодах видны только очень малые части экспоненты и поэтому создается впечатление, что полки сигнала прямые, но все имеют наклон и чем период развертки больше, тем больше это заметно. Явно неисправность развертки осциллографа, чинить его надо...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Проверьте тип входа. Должен быть открытый (DC+AC).
-
- user
- Сообщения: 81
- Зарегистрирован: 17 ноя 2015, 11:57
- Версия LabVIEW: 12
- Благодарил (а): 4 раза
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Blackman, так и есть, причём я тыкал такую же кнопочку левее (там где времена ставишь), а эту у Y1 не заметил... позор мне:(
Да, решил тут для генерации использовать не ЦАП, а счётчик, ибо это вроде логичнее. Накидал программку, но что-то она сильно жрёт процессор, когда долго измеряешь (~10 минут) на 1000Гц сигнал и пишешь его на график. Кому не лень, гляньте пожалуйста. Думаю какие-то тайминги надо выставить, или например слишком много точек на график кидаю... а может вообще лучше потоково писать в файл, а не потом его сохранять? А так вроде стабильно генерится, кому интересно характерный кусочек графика прикладываю.
Спасибо за внимание и за помощь!
Да, решил тут для генерации использовать не ЦАП, а счётчик, ибо это вроде логичнее. Накидал программку, но что-то она сильно жрёт процессор, когда долго измеряешь (~10 минут) на 1000Гц сигнал и пишешь его на график. Кому не лень, гляньте пожалуйста. Думаю какие-то тайминги надо выставить, или например слишком много точек на график кидаю... а может вообще лучше потоково писать в файл, а не потом его сохранять? А так вроде стабильно генерится, кому интересно характерный кусочек графика прикладываю.
Спасибо за внимание и за помощь!
- Вложения
-
- impulses.vi
- (30.88 КБ) 155 скачиваний
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Для анализа графиков с миллионом отсчетов лучше использовать отдельную программу. Так же, Ваша программа будет замедляться по мере забивания сдвигового регистра. Вы же в нём данные копите, верно? И каждый раз LabVIEW приходится раздувать этот регистр и заниматься копированием + добавкой новой порции данных. Если на десятках тысяч отчетов это будет незаметно, то на сотнях тысяч это будет заметно. Вот и прикидывайте: фунция вам
Разделите Вашу программу на:
а)цикл генерации данных
б)цикл накопления данных
в)цикл записи данных
г)цикл визуализации данных(показывайте не каждую входящую выборку, а каждую десятую например. Если данные поступают
динамично, то пользователь не успеет на глаз ничего оценить).
д)цикл анализа данных(в этот цикл добавите логику принятия решений при тех или иных зафиксированных параметрах, какие-то измерения и прочее).
Передачу данных между циклами делайте с помощью очередей. Вот тут пример посмотрите, почти всё что нужно, осталось запись организовать:
http://labviewportal.org/viewtopic.php? ... =75#p62401
По поводу записи данных: посмотрите еще возможности записи в бинарный файл или в tdms.
Разделите Вашу программу на:
а)цикл генерации данных
б)цикл накопления данных
в)цикл записи данных
г)цикл визуализации данных(показывайте не каждую входящую выборку, а каждую десятую например. Если данные поступают
динамично, то пользователь не успеет на глаз ничего оценить).
д)цикл анализа данных(в этот цикл добавите логику принятия решений при тех или иных зафиксированных параметрах, какие-то измерения и прочее).
Передачу данных между циклами делайте с помощью очередей. Вот тут пример посмотрите, почти всё что нужно, осталось запись организовать:
http://labviewportal.org/viewtopic.php? ... =75#p62401
По поводу записи данных: посмотрите еще возможности записи в бинарный файл или в tdms.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- user
- Сообщения: 81
- Зарегистрирован: 17 ноя 2015, 11:57
- Версия LabVIEW: 12
- Благодарил (а): 4 раза
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Всем привет!
Оттестировал программку (основу которой я выкладывал выше) на USB-6218: вроде всё хорошо.
Но это дорогая плата, временно взятая для экспериментов из другой установки.
Прочитал что в принципе можно использовать и дешевую USB-6001 для моих целей, и заказал её.
Сегодня её получил, но почему-то не могу настроить PFI... мне кажется какая-то глупость, ибо по мануалю всё должно работать.
Кто знает, подскажите пожалуйста что можно сделать чтобы в выборе каунтера появился PFI0.
В мануале "Using PFI as a Counter Source You can configure PFI 0 or PFI 1 as a source for counting digital edges. In this mode, either rising- or falling-edges are counted using a 32-bit counter." Мануаль, стр. 23: http://www.ni.com/pdf/manuals/374259a.pdf
Как же мне отконфигить PFI0 на counter source? В NI MAX такой опции не нашел.
Labview 12 x64
NI DAQmx 15-11f3
Спасибо большое!
Оттестировал программку (основу которой я выкладывал выше) на USB-6218: вроде всё хорошо.
Но это дорогая плата, временно взятая для экспериментов из другой установки.
Прочитал что в принципе можно использовать и дешевую USB-6001 для моих целей, и заказал её.
Сегодня её получил, но почему-то не могу настроить PFI... мне кажется какая-то глупость, ибо по мануалю всё должно работать.
Кто знает, подскажите пожалуйста что можно сделать чтобы в выборе каунтера появился PFI0.
В мануале "Using PFI as a Counter Source You can configure PFI 0 or PFI 1 as a source for counting digital edges. In this mode, either rising- or falling-edges are counted using a 32-bit counter." Мануаль, стр. 23: http://www.ni.com/pdf/manuals/374259a.pdf
Как же мне отконфигить PFI0 на counter source? В NI MAX такой опции не нашел.
Labview 12 x64
NI DAQmx 15-11f3
Спасибо большое!
-
- user
- Сообщения: 81
- Зарегистрирован: 17 ноя 2015, 11:57
- Версия LabVIEW: 12
- Благодарил (а): 4 раза
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
В NI Max изменение частоты не активно, при нажатии кнопки старт вроде как ничего не происходит (но осциллограф пока не цеплял на выход порта). Да, Daqmx 15.1.1 совместим как с Labview 12, так и с платой usb-6001. Не думаю что проблема тут. Неужели правда не поддерживается счётчик? Через DAQ Assistant выдать импульсы также не удаётся...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Генерация низкочастотных прямоугольных импульсов через Ц
У этого устройства нет выходов для счетчиков Counter Output - CO. Только два входа для счетчиков Counter Input - CI.
"Using PFI as a Counter Source You can configure PFI 0 or PFI 1 as a source for counting digital edges...."
Используя PFI как Источник сигналов Счетчика Вы можете задавать PFI 0 или PFI 1 как источник (сигнала) для счета количества фронтов входных цифровых сигналов.
"Using PFI as a Counter Source You can configure PFI 0 or PFI 1 as a source for counting digital edges...."
Используя PFI как Источник сигналов Счетчика Вы можете задавать PFI 0 или PFI 1 как источник (сигнала) для счета количества фронтов входных цифровых сигналов.
-
- user
- Сообщения: 81
- Зарегистрирован: 17 ноя 2015, 11:57
- Версия LabVIEW: 12
- Благодарил (а): 4 раза
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Ага, ещё раз перечитал, так и есть... буду тогда как в начале темы буферизированный аналог генерить...
-
- user
- Сообщения: 81
- Зарегистрирован: 17 ноя 2015, 11:57
- Версия LabVIEW: 12
- Благодарил (а): 4 раза
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Уважаемая общественность, а вот ещё хотелось бы вопросик задать...
Читаю данные с тензодатчика, а он выдаёт значения в районе единиц мВ, которые даже крутая 16-битная плата NI USB-6218 читает на пределе погрешности. Поэтому полученные данные нужно усреднять: скажем в секунду читаем 10000 точек, и оставляем из них 50 усреднённых.
Сейчас у меня данные забираются из буфера платы раз в секунду, и как взять среднее за секунду - понятно. Для этого есть "Mean". Но таким усреднением можно замыть какой-то всплеск натяга... Как бы разбить массив данных, полученных за 1с, на 50 частей, и из каждой части взять среднее? Вроде алгоритм должен быть не сложный, но никак не соображу... подскажите кому не лень пожалуйста. Важно именно выбрасывать лишние данные (слишком большой массив будет), а не просто усреднять по стольки-то точкам как я когда-то делал для сглаживания производной ВАХ.
P.S. Оффтоп: А знает кто есть какие-нить платы от National Instruments, заточенные под считывание не +-10В сигнала АЦП, а скажем +-100мВ? Например L-Card платы вроде как имеют переключатели диапазонов... или ещё какие аналоги бывают? Это так, на будущее хотел бы знать...
Читаю данные с тензодатчика, а он выдаёт значения в районе единиц мВ, которые даже крутая 16-битная плата NI USB-6218 читает на пределе погрешности. Поэтому полученные данные нужно усреднять: скажем в секунду читаем 10000 точек, и оставляем из них 50 усреднённых.
Сейчас у меня данные забираются из буфера платы раз в секунду, и как взять среднее за секунду - понятно. Для этого есть "Mean". Но таким усреднением можно замыть какой-то всплеск натяга... Как бы разбить массив данных, полученных за 1с, на 50 частей, и из каждой части взять среднее? Вроде алгоритм должен быть не сложный, но никак не соображу... подскажите кому не лень пожалуйста. Важно именно выбрасывать лишние данные (слишком большой массив будет), а не просто усреднять по стольки-то точкам как я когда-то делал для сглаживания производной ВАХ.
P.S. Оффтоп: А знает кто есть какие-нить платы от National Instruments, заточенные под считывание не +-10В сигнала АЦП, а скажем +-100мВ? Например L-Card платы вроде как имеют переключатели диапазонов... или ещё какие аналоги бывают? Это так, на будущее хотел бы знать...
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Плата NI USB-6218 имеет настраиваемый диапазон входного сигнала. Варианты: ±0.2 V, ±1 V, ±5 V, ±10 V. Есть другие платы с диапазоном от ±0.1 V и разрядностью 18 бит, это если USB рассматривать. Для других вариантов подключения есть и 24 битные платы.
Для тензодатчиков, если хотите получать нормальные точные измерения, то лучше использовать специализированные модули, у них требуемый диапазон, разрядность 24 бита, запитка датчика, и что очень важно - автоматическая компенсация изменения напряжения питания тензомоста.
Не понимаю, зачем вычитывать данные раз в секунду и потом возиться с разбиением? Не проще просто настроить вычитывание 50 раз в секунду и делать осреднение по всем принятым измерениям? Получите те же 50 усредненных измерений за секунду. Отбрасывать измерения глупо, лишних измерений не бывает, всегда дополнительные измерения можно использовать для улучшения точности. Если есть желание, то по этим усредненным 50 точкам можно еще и скользящим средним пройтись...
Для тензодатчиков, если хотите получать нормальные точные измерения, то лучше использовать специализированные модули, у них требуемый диапазон, разрядность 24 бита, запитка датчика, и что очень важно - автоматическая компенсация изменения напряжения питания тензомоста.
Не понимаю, зачем вычитывать данные раз в секунду и потом возиться с разбиением? Не проще просто настроить вычитывание 50 раз в секунду и делать осреднение по всем принятым измерениям? Получите те же 50 усредненных измерений за секунду. Отбрасывать измерения глупо, лишних измерений не бывает, всегда дополнительные измерения можно использовать для улучшения точности. Если есть желание, то по этим усредненным 50 точкам можно еще и скользящим средним пройтись...
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Генерация низкочастотных прямоугольных импульсов через Ц
Полностью согласен с Andrew Lunev. Если вы явно не указали входной диапазон, то он подстраивается автоматически, согласно параметрам созданной вами задачи, посмотрите на скриншот, который я сделал при симуляции NI 6218 и посмотрел min/max range кстати она совсем уж не такая крутая, так средненькая Как можно видеть, я "запрашивал" 0.02 Вольт, а получил минимально возможный для NI 6218 +/-0.2V
Для этого используются, Strain Gage Input Signal Conditioner, типа таких Тут вам и запитка датчика и фильтрация и компенсация...
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!