Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
|
||||
|
E14-140 синхронизация с АЦПЗдравствуйте. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПЗдравствуйте. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПВ данном случае речь идет о физическом эксперименте, где каналы ЦАП задают внешнее воздействие на исследуемый объект (двигают электронный пучок по двум координатам), а АЦП измеряет полезные сигналы с нескольких каналов в каждой точке. Соответственно, в результате необходимо получить массив измеренных данных для каждой пары значений, выставляемых на каналы ЦАП. Работать предполагалось на минимальных частотах платы (этого вроде должно быть достаточно в плане скорости измерений, при этом это не должно влиять за физические процессы, происходящие в образце), правда возникла проблема в том, что минимальная частота работы ЦАП намного больше, чем минимальная частота работы АЦП. Потоковый режим удовлетворяет нашим требованиям, т.к. обработка данных осуществляется уже после завершения измерений. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПЕсли Вы используете библиотеку Lusbapi, то попробуйте воспользоваться функциями не потокового, а однократного ввода и вывода данных: ADC_KADR() и DAC_SAMPLE(). Сначала с помощью DAC_SAMPLE() устанавливаете требуемый уровень сигнала на обоих каналах ЦАП, а затем используйте ADC_KADR() для считывания кадра данных с нужных каналов АЦП. Оценочное время выполнения этого алгоритма будет ~80мс. Если нужно - могу выслать консольный пример реализации данного алгоритма. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПДанная система была ранее нами реализована с помощью функций DAC_SAMPLE() и ADC_SAMPLE(). Время выполнения было 120 мс. Но это слишком медленно в нашем понимании. Т.е. в таком случае на сканирование 100 точек уходило 10 секунд. И это даже без накопления сигнала. А потом пришел человек, который делал подобные измерения 20 лет назад на непойми каком АЦП и сказал, что у него 1000 точек с накоплением раз 200 в каждой точке измерялось за несколько секунд и что мы со своими 10 сек на 100 точек попросту теряем время. Вот мы и решили попробовать за счет потокового ввода/вывода данных ускорить схему. Вопрос, насколько это возможно? И сильно ли изменит ситуацию использование ADC_KADR() вместо ADC_SAMPLE()? |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПАлексей, асинхронные операции - медленные, поскольку они проходят по каналу Control Pipe USB. Синхронные потоковые операции быстрее, поскольку они проходят по каналу Bulk USB, но эти операции сильно буферизированы (с большой задержкой буферизации). Читайте: |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПА потоковый режим АЦП и ЦАП разве не подходит? Мне ведь не нужно каждый отсчет в отдельности обрабатывать. Мне нужно получить все отчеты, когда уже измерения закончены. Чтобы не обращаться к плате через USB за каждым отсчетом. Или запуск ЦАП, синхронизированный с запуском АЦП, означает, что они синхронизированы только в момент запуска, а потом они работают уже независимо друг от друга с теми параметрами, которые в них были заложены? |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПЕсли Ваша задача состоит в том, чтобы выдавать некоторую последовательность точек на ЦАП (заранее известную, т.е. не нужно по данным АЦП принимать решение, какую следующую точку ЦАП выставить) и получить результаты измерения с АЦП, соответствующие выставленным значениям ЦАП, то тогда Вы действительно можете использовать потоковый режим АЦП и ЦАП, так как у E14-140MD есть синхронный запуск АЦП и ЦАП и они работают синхронно. Т.е. можно заранее сформировать массив данных на ЦАП на весь эксперимент, чтобы в течение такого-то времени была выставлена первая точка (т.е. сколько-то отсчетов на ЦАП повторяется первая точка), затем в течение того же времени вторая и тп., и поставить всю последовательность на передачу в модуль (если правда массив данных получится очень большой, то его придется формировать и подкачивать во время эксперимента и тогда нужно следить, чтобы буфер не переполнился). Затем запускается синхронно АЦП и ЦАП и соответственно исходя из частоты АЦП будет столько-то отсчетов соответствовать первой точке и т.п. (только нужно учитывать переходные процессы в Вашей системе, т.е. сколько-то первых отсчетов, соответствующих каждой точке нужно отбрасывать при обработке). Про режимы ЦАП в E14-140MD можете посмотреть в этом документе http://www.lcard.ru/download/e14_140m_addendum_dac.pdf. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПАлексей L Card пишет:
Да, вот именно это и требуется. Изначально в своем вопросе я просто попросил привести пример соответствующего кода для правильной настройки параметров ЦАП и АЦП и получения массива данных с АЦП в таком случае, т.к. мануала немного недостаточно, а примера данного случая нет. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦП1.
Всё зависит от кол-ва используемых каналов АЦП. В первом приближении можно полагать, что время выполнения ADC_KADR() равно 'ChannelsQuantity' * ADC_SAMPLE().
На модуле E-140M АЦП и ЦАП тактируются от одного кварцевого генератора, т.ч. 'разбежки' в работе АЦП и ЦАП не будет. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПТихомиров Сергей пишет:
Вот тут и начинаются проблемы. Можете объяснить по моему коду что я делаю не так? Чтение идет из 1 и 16 каналов АЦП. Весь диапазон ЦАП делится на 100 точек, каждая из которых повторяется 50 раз подряд, при этом в данном случае изменение значений происходит только по одному из каналов ЦАП.
|
|||
|
||||
|
Re: E14-140 синхронизация с АЦП1. Я правильно понимаю, что опрашивать надо два канала АЦП: 1-ый и 16-ый? А почему тогда для сбора данных задаётся всего один канал АЦП: ap.ChannelsQuantity:=1; 2. Кратными должны быть следующие частоты: |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПЕще есть проблема с тем, что ЦАП не успевает пройти весь массив заданных координат. Т.е. он проходит первые несколько точек, а затем всё завершается. При этом, если поставить метку в отладчике на строчку pModule.WriteData(@Req_d);, дойдя до которой программа остановится и будет ждать, пока я не разрешу ей дальнейшее выполнение, ЦАП успеет пройти все точки заданного массива. Не нужно ли в программе в этом месте делать какую-либо задержку? Тихомиров Сергей пишет:
У меня после выполения этих функций ap.KadrRate становится равным 12.5, независимо от значения dp.DacRate. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦП1. Функцию WriteData следует использовать в асинхронном режиме, т.е. полю Req_d.Overlapped должен быть присвоен указатель на структуру типа OVERLAPPED. Тогда эта функция только выставляет системе асинхронный запрос на передачу требуемого кол-ва данных в модуль и на этом завершает своё выполнение. Собственно сам вывод данных на ЦАП начнётся при последующем вызове функции START_DAC() (в общем случае), а в Вашем конкретном случае ещё и после дополнительного вызова функции START_ADC().
2.
Я имел в виду, что частоты работы АЦП и ЦАП необходимо подбирать так, чтобы ap.KadrRate и dp.DacRate были бы кратны (в общем случае), а в Вашем конкретном случае - равны. Например, так:
3.Неплохо бы было проверять на ошибку выполнение каждой функции библиотеки Lusbapi. Это часто позволяет уберечься от многих недоразумений. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПКак определить когда АЦП завершила работу? Т.к. если не вставлять задержку между pModule.START_ADC; и pModule.ReadData(@Req_a);, то при большом количестве точек плата не успевает пройти все точки и завершает работу раньше, чем нужно. А если считать задержку на глаз, то точно вычислить не получается. Еще вопрос. Я правильно понимаю, что в выходном массиве данных АЦП информация идет покадрово, а в каждом кадре отсчеты располагаются соответственно каналам в ControlTable? |
|||
|
||||
|
Re: E14-140 синхронизация с АЦП1.
Модуль физически останавливает работу АЦП только по выполнении функции STOP_ADC(). А что означает фраза "при большом количестве точек плата не успевает пройти все точки"? Следует ли понимать, что при небольшом количестве точек всё работает нормально? 2.
Да, именно так. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПТихомиров Сергей пишет:
Это означает, что ЦАП не проходит весь массив значений, который ему задается, и работа просто прекращается. Тихомиров Сергей пишет:
Да, до какого-то количества задаваемых точек ЦАП успевает пройти весь массив, а потом, с увеличением количества точек, процесс прерывается до его завершения.
Т.е. между командами никаких задержек изначально нет. И, возможно, STOP_ADC и STOP_DAC могут сработать до того, как ЦАП прошел по всему заданному ему массиву. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПКак вариант, чтобы не вставлять задержку, можно увеличить частоту ЦАП и АЦП. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПВ Вашем случае функция ReadData(), работающая в синхронном режиме, должна завершиться только после того, как получит stepsAll+1 отсчётов с АЦП модуля (с обоих каналов). По времени это должно совпасть с завершением вывода на ЦАП NPo отсчётов. Величины stepsAll+1 и NPo должны быть согласованы, а в Вашем случае - равны. |
|||
|
||||
|
Re: E14-140 синхронизация с АЦПТихомиров Сергей пишет:
Не помогло. |
Страницы 1