Набор инструментов DAQ Matlab: как подсчитывать триггерные события без канала счетчика фронтов и как выводить разные значения при каждом последующем триггере

Мне нужна ваша помощь с интерфейсом на основе сеанса для набора инструментов Matlab DAQ. Мне не удалось найти много помощи в учебниках или примерах MathWorks. В настоящее время я использую DAQ USB-6003 от NI.

Таким образом, в моей системе у меня есть 2 аналоговых выходных канала (ch1 и ch2) и 1 аналоговый входной канал (ch3), и я пытаюсь управлять выходным напряжением в ch1 от 0 В до 10 В с шагом 1 В, с ch2 постоянным, а затем повторите цикл в ch1 для другого напряжения в ch2. Что касается аналогового входа ch3, я запускаю его через некоторое время после запуска ch1. Мои триггеры генерируются внешним генератором функций.

То, с чем я боролся, это:

1) Как при каждом последующем событии триггера выводить другое значение в файле ch1.

2) И как после 11 срабатываний изменить выход ch2.

3) Как сохранить ввод в другом месте между триггерными событиями, чтобы он не был перезаписан следующим событием.

Мои основные ограничения:

1) Я не могу использовать канал счетчика фронтов для подсчета триггеров, потому что у меня есть только два канала PFI, и мне нужны оба, один для запуска ch1, а другой ch3 (я не могу использовать только один).

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

3) Мне нужно, чтобы у двух было как минимум 2 параллельных сеанса, потому что мой DAQ не позволяет выполнять одновременные задачи в одном сеансе.

Я приложил временную диаграмму канала того, что я пытаюсь сделать. Диаграмма каналов


person user44756    schedule 17.01.2016    source источник


Ответы (1)


Осторожность

"Мне нужна высокоскоростная система сбора данных"

USB не может быть правильным вариантом. Использование USB в качестве механизма управления/передачи данных является медленным по сравнению с другими компьютерными операциями ввода/вывода, такими как PCIe или EtherCAT< /а>. Если после того, как вы заработаете, вы решите, что вам нужно уменьшить задержку и дрожание, я рекомендую попробовать CompactRIO и LabVIEW Real-Time.

Усугубляет производительность USB-6003 по требованию. В то время как аналоговый вход и аналоговый выход управляются электрическими сигналами (стартовый триггер и часы выборки) и их данные автоматически передаются драйвером, цифровой вход и счетчик синхронизируются только программно, что означает, что считывание данных не происходит автоматически. и должен запрашиваться вами, пользователем, с помощью команды чтения.

Поскольку вы можете получить цифровые данные с USB-6003 только по запросу, вам остается только ждать; нет способа получить уведомление о появлении нового края. Другие устройства (например, устройства PCIe-63xx серии X или устройства cDAQ-940x) поддерживают цифровой ввод. обнаружение изменений, которое вызывает отправку программного события в программа. Если бы у вас было одно из этих устройств, вам не пришлось бы ждать.

Предложение

Однако, если вы немного измените свои стратегии запуска и обработки данных, я все еще думаю, что вы сможете добиться желаемого типа ввода-вывода. Затем вы сможете оценить его скорость и надежность, чтобы решить, нужно ли вам обновлять оборудование для сбора данных.

Новая стратегия триггеров и данных

введите здесь описание изображения

Основная идея заключается в следующем: вместо того, чтобы хранить каналы в своей собственной «базе времени», объедините их в единую базу времени и используйте ее для координации обновлений напряжения. При удвоении частоты внешнего триггера все три канала могут использовать одинаковую синхронизацию. Другими словами, и задача аналогового ввода, и задача аналогового вывода используют один и тот же внешний сигнал в качестве тактовой частоты дискретизации.

  1. Удвойте частоту триггерного сигнала FGEN.
  2. Повторите выборку аналогового выхода, если уровень не нужно изменять.
  3. Отбросьте аналоговый входной образец, если он совпадает с изменением выходного уровня.

Аналоговые выходные образцы будут:

ch1  ch2

0.0  0.0
0.0  0.0
1.0  0.0
1.0  0.0
2.0  0.0
2.0  0.0
0.0  1.0
0.0  1.0

Новая стратегия программы

Теперь, когда и аналоговый вход, и аналоговый выход используют FGEN в качестве тактового генератора выборки, подпрограмме MATLAB нужно только подготовить операцию, а затем контролировать/подать ее. Аппаратное обеспечение сможет генерировать и получать данные без какого-либо вмешательства со стороны ПК, но ПК должен будет периодически считывать аналоговые входные данные и записывать больше аналоговых выходных данных, чтобы драйвер был удовлетворен.

Я не знаю, сколько DAQmx API выставляет MATLAB, но вы можете спросить у драйвера, сколько отсчетов осталось в буфере устройства.

  • Аналоговый вход: DAQmxGetReadAvailSampPerChan (doc)
  • Аналоговый выход: DAQmxGetWriteSpaceAvail (doc)

Ссылка

Технические характеристики NI USB-6003 http://digital.ni.com/manuals.nsf/websearch/666A752FCC177B0186257CD8006C24C8

person Joe Friedrichsen    schedule 18.01.2016
comment
Спасибо @Joe, ваше предложение удвоить частоту FGEN действительно полезно и разумно. Хотя об этом я не знал... Так что, даже внедрив это изменение, мне все равно нужно менять ch1 каждые 2 триггера. У вас есть идея, как реализовать это в Matlab (на основе сеанса), чтобы выходной массив был похож на тот, который вы предложили для ch1? Я знаю только, как вывести весь массив после события триггера. - person user44756; 19.01.2016
comment
Я не использовал MATLAB в течение 15 лет, поэтому я не очень знаком с ним. Однако похоже, что вы хотите использовать queueOutputData в сочетании со значением сеанса ScansQueueds.Rate. См. www.mathworks.com/help/daq/generate-analog-output-signals.html для получения дополнительной информации. Я добавил еще один абзац, чтобы подчеркнуть природу этого подхода, основанного на принципе «забыть и контролировать». - person Joe Friedrichsen; 19.01.2016