Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Переключение циклической выдачи сигнала E-502 и считывание.

Вы не вошли.

 Поиск | Регистрация | Вход 

03.02.2026 13:52:44
#1

Участник
Здесь с 30.01.2026
Сообщений: 5

Переключение циклической выдачи сигнала E-502 и считывание.

Добрый день, Уважаемым участникам форума!
Не получается переключать циклически выдаваемые сигнал. Использую E-502 на максимальной частоте ЦАП и АЦП. Задача состоит в генерации сигналов на ЦАП заданной формы с последующим разбором измерений АЦП. При этом необходимо точно понимать каждый сэмпл АЦП соответствует которому выдаваемому сигналу ЦАП.
Для этого реализую следующий способ работы с ЦАП и АЦП:
1) Настраиваю работу АЦП:
1.1) X502_SetLChannelCount настраиваю на1 или 2 канала
1.2) X502_SetLChannel Настраиваю каждый из каналов для работы с общей землёй.
1.3) X502_SetAdcFreq и X502_SetDinFreq устанавливаю частоты (максимальные, то есть 2 МГц для цифровых входов и 2МГц на все аналоговые входы)
1.4) X502_SetSyncMode(hnd,X502_SYNC_INTERNAL); устанавливаю работу от внутреннего генератора
1.5) X502_Configure(hnd, 0); записываю настройки в модуль
1.6) X502_StreamsEnable(hnd, X502_STREAM_ADC | X502_STREAM_DAC1 | X502_STREAM_DAC2); разрешаю АЦП и 2 канала ЦАП
2) Записываю сигнала ЦАП
   Запись происходит с помощью модифицированных функций из примера. Записывается пилообразный сигнал повторенный такое количество раз чтобы считываться примерно за 400 мс. То есть в моем случае 100 кусочков по 512 точек (пила с частатой примерно 1953,13 Гц).
2.1) жду 400 мс
3) X502_StreamsStart(hnd) Запускаю потоки на ввод и вывод
   При этом наблюдаю достаточно разумную картинку. "пила" стоит как вкопанная и её первая точка находится в начале.
   pila.png
   АЦП при этом считывает за раз 819200 байт, что соответствует 102400 отсчётам для 2 каналов, то есть 51200 на канал. Считывание происходит с помощью функции Recv.

Дальше я произвожу переключение на какую либо ещё частоту. Делаю это следующим образом.
Пилообразный сигнал повторяется столько раз чтобы результат его чтения поместился в 819200 байт при чтении.
Например: изначальная частота пилы была 1953,13 Гц и один период пилы состоял из 512 точек ЦАП. Пила в одном циклическом сигнале повторялась 100 раз, всего 51200 точек. Считывал за раз с АЦП 102400 точек с АЦП. Выглядит следующим образом собранный сигнал:
   pila2.png
Переключаю частоту ЦАП, например на 2976,17 Гц, теперь один период пилы 336 точек, я её повторяю такое количество раз чтобы в одном циклическом сигнале было 51116 точек. И считываю я теперь за раз 51116*2 точек с АЦП. Сигнал выглядит так: https://www.lcard.ru/forums/img/members/888/pila2.png.
Смотря на осцилографф, понимаю, что частота действительно переключилась.
Переключаю ЦАП на генерацию другой частоты, например 1992,03 Гц, теперь в одном периоде 502 точки, я её повторяю такое количество раз чтобы в одном циклическом сигнале было 51078 точек. И считываю я теперь за раз 51078*2 точек с АЦП. Однако теперь характерная картина изменилась: pilaSDrugojjFazojj.png.
В итоге я не могу гарантировать, что первый отсчёт порции данных с АЦП будет соответствовать первому отсчёту циклического вывода ЦАП.
Замену того сколько считывать и как переключать сигнал, как мне кажется я сделал правильно.

03.02.2026 19:53:00
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,377

Re: Переключение циклической выдачи сигнала E-502 и считывание.

Здравствуйте.
Для начала просьба уточнить, правильно ли я понял, что:
1. Используется именно циклический режим вывода (функции X502_OutCycleLoadStart/X502_OutCycleSetup)
2. Смена сигнала у Вас идет без остановки сбора/генерации (т.е. StreamsStart выполняется только один раз, а смена идет на лету через какое-то время через те же X502_OutCycleLoadStart/X502_OutCycleSetup)
3. На последней картинке сама частота сменилась корректно и Вас не устраивает именно фаза (соответствие первой точки сигнала и начала собранного блока АЦП). При этом этот сдвиг фазы фиксированный, т.е. сигнал до следующей смены сигнала сигнал не дергается, просто начало некорректно.

Также уточните, какой интерфейс используется (USB или Ethernet) и модификацию модуля.

"АЦП при этом считывает за раз 819200 байт, что соответствует 102400 отсчётам для 2 каналов" - тут наверное все же опечатка, размер отсчета АЦП 1 слово = 4 байта, т.е. с учетом что DIN не включен, то 102400 отчета это 409600 байт.

04.02.2026 11:25:28
#3

Участник
Здесь с 30.01.2026
Сообщений: 5

Re: Переключение циклической выдачи сигнала E-502 и считывание.

Алексей L Card пишет:

Здравствуйте.
1. Используется именно циклический режим вывода (функции X502_OutCycleLoadStart/X502_OutCycleSetup)

Да, я использую циклический вывод. А именно функции X502_OutCycleLoadStart X502_PrepareData X502_Send X502_OutCycleSetup. Где есть возможность я устанавливаю флаг X502_OUT_CYCLE_FLAGS_WAIT_DONE.

Алексей L Card пишет:

2. Смена сигнала у Вас идет без остановки сбора/генерации (т.е. StreamsStart выполняется только один раз, а смена идет на лету через какое-то время через те же X502_OutCycleLoadStart/X502_OutCycleSetup)

Да.

Алексей L Card пишет:

Здравствуйте.
3. На последней картинке сама частота сменилась корректно и Вас не устраивает именно фаза (соответствие первой точки сигнала и начала собранного блока АЦП). При этом этот сдвиг фазы фиксированный, т.е. сигнал до следующей смены сигнала сигнал не дергается, просто начало некорректно.

Да, не устраивает фаза. Но при этом фаза постоянна. Сигнал другими словами "стоит как вкопанный". При этом первое переключение происходит нормально и первоначальная фаза сигнала сохраняется.

Алексей L Card пишет:

Также уточните, какой интерфейс используется (USB или Ethernet) и модификацию модуля.

USB

Алексей L Card пишет:

"АЦП при этом считывает за раз 819200 байт, что соответствует 102400 отсчётам для 2 каналов" - тут наверное все же опечатка, размер отсчета АЦП 1 слово = 4 байта, т.е. с учетом что DIN не включен, то 102400 отчета это 409600 байт.

Да. Тут я неясно немного описал. Считывается 819200 байт, это 204800 отсчётов всего, 102400 отсчёта на канал, если канала 2.

05.02.2026 14:21:54
#4

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,377

Re: Переключение циклической выдачи сигнала E-502 и считывание.

Какое полное название модификации модуля у Вас?

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

При повторном запуске с одинаковой сменой размера сигнала, нарушения фазы идет всегда на вторую смену и всегда на одно и то же число точек? Если поменять размеры в первой смене и второй, то ошибка фазы все равно останется только во второй?

Как именно идет синхронизацию смены сигнала и смены размер чтения? Загрузка сигнала идет в том же потоке после приема блока или из другого? Загрузка и переключение идут подряд? Потом блок считываете со старым размером?

11.02.2026 16:59:32
#5

Участник
Здесь с 30.01.2026
Сообщений: 5

Re: Переключение циклической выдачи сигнала E-502 и считывание.

Алексей L Card пишет:

Какое полное название модификации модуля у Вас?

L-CARD-E-502-P-EU-D

Установлена связь со следующим модулем:
Серийный номер          : 5T778425
Наличие ЦАП             : Да
Наличие BlackFin        : Да
Наличие гальваноразвязки: Да
Индустриальное исп.     : Нет
Наличие интерф. PCI/PCIe: Нет
Наличие интерф. USB     : Да
Наличие интерф. Ethernet: Да
Версия ПЛИС             : 0.15
Версия PLDA             : 2
Версия прошивки ARM     : 1.0.23.0

Алексей L Card пишет:

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

При повторном запуске с одинаковой сменой размера сигнала, нарушения фазы идет всегда на вторую смену и всегда на одно и то же число точек? Если поменять размеры в первой смене и второй, то ошибка фазы все равно останется только во второй?

На вторую смену всегда теряется фаза, но остается постоянной от прочтения к прочтению.

Алексей L Card пишет:

Как именно идет синхронизацию смены сигнала и смены размер чтения? Загрузка сигнала идет в том же потоке после приема блока или из другого? Загрузка и переключение идут подряд? Потом блок считываете со старым размером?

Всё происходит в одном Thread.
Если необходимо поменять сигнал, то:
1) После прочтения функцией Recv загружается новый сигнал.
2) Перед прочтением примерно за 40 мс даётся команда на старт ЦАПа с флагом "дождаться окончания сигнала"
3) Читается ещё старый сигнал с прошедшей длинной
4) Меняется длина чтения в следующем чтении

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4

Многоканальный телефон:+7 (495) 785-95-25

Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск