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


E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Вы не вошли.

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

Никита
01.09.2010 19:55:03
#1

Гость

E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

День добрый.
Программа работает одновременно с ЦАП и АЦП.
ЦАП выдает прямоугольные импульсы, АЦП их собирает и показывает (для контроля).
Для ЦАП и АЦП выделены отдельные потоки, вызов функций модуля происходит через критическую секцию. Частота АЦП минимальная - 0 (0.3кГц вроде бы?), ЦАП - 15кГц (бОльшие значения тоже пробовал); Буферы АЦП 4*64, ЦАП 256*64, в АЦП задействованы лишь два канала в контрольной таблице (для минимизации потока данных).
Все работает ОК, но при длительной работе заметны расхождения во времени теоретических импульсов и полученных на АЦП:
http://i9.fastpic.ru/big/2010/0901/a1/1 … c6a6a1.png
Чем больше время, тем больше расхождение. На больших величинах времени задержка уже критична и ее надо как-то править. Пробовал вводить поправку на ошибку по времени для АЦП (разница текущего времени, замеренного через GetTickCount, и полученных отсчетов, умноженных на соответствующий коэффициент) - спасает лишь отчасти: задержка уменьшилась, но все равно осталась и, причем, существенная для моего случая.
Я так подозреваю, что чтобы ее минимизировать до незначительной погрешности, надо написать аналогичную поправку для ЦАП? Но как? Если с АЦП еще можно ее _приблизительно_ вычислить, то как это сделать для ЦАП//'а с асинхронной подачей данных, я пока не придумал.
Процедуры чтения с АЦП и вывода на ЦАП списаны с примеров, которые шли в комплекте с либой, немного подправлены.
Сырцы моей проблемы (делфи, в 2009ой ide пишу): http://rghost.ru/2506895

Надеюсь на вашу помощь.

02.09.2010 14:13:37
#2

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

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Что имеется в виду под теоретическими импульсами?

Никита
03.09.2010 12:45:06
#3

Гость

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Импульсы, которые должны быть; задание, которое отправляется на ЦАП. Описываются полным набором точек, в которых происходит изменение значения напряжения. Т.е. перед запуском ЦАП и АЦП по этим точкам уже можно построить график того, что должно придти с АЦП, если все будет ок.

Т.е., при задании "импульс 3с, пауза 2с" теоретическая пачка импульсов будет представлять собой именно импульсы длительностью 3с и с паузой между ними 2с. А реальные импульсы, которые были считаны с АЦП, к примеру, имеют длительность (3 - 1e-5)с и паузы (2 - 1e-5). Собственно, эта разница "1e-5" со временем получается равной половине импульса.

Никита
05.09.2010 21:09:28
#4

Гость

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Убрал сейчас свою доморощенную синхронизацию (<...Пробовал вводить поправку на ошибку по времени для АЦП (разница текущего времени, замеренного через GetTickCount, и полученных отсчетов, умноженных на соответствующий коэффициент) - спасает лишь отчасти: задержка уменьшилась, но все равно осталась и, причем, существенная для мое...>)

, потом пошаманил с чем-то, остановился на
    rDataStep : DWORD = 4*64;
    wDataStep : DWORD = 128*64;
    ChannelsQuantity : WORD = 2;
    AdcRate : double  = 1;
        DacRate : double = 15;

задержка стала меньше.
Вопрос все-таки открытым остался: какие есть общие рекомендации, чтобы свести ее (задержку) к минимуму//убрать совсем?
Как правильно использовать флаг SyncWithADC? В описание написано, что "данное поле задает режим синхронного старта цап и ацп". Как запустить их синхронно? Сейчас отдельно выполняю Start_ADC и Start_DAC, но ввод//вывод получается не синхронный, судя по всему (ацп раньше срабаывает, видно по графику).

Никита
05.09.2010 23:13:09
#5

Гость

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Александр,
E14-140-MD rev.B = E20-10 разве?

Я имею ввиду, что если непрерывно кормить ЦАП свежими пачками данных, то через 1024х1024 отсчетов, например, при частоте 15кГц, последний отсчет выведется ровно на 69.905с. Я этого хочу добиться. И аналогично для АЦП. Это же возможно с ним?

06.09.2010 07:17:28
#6

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Я ошибся. Думал, что про E20-10 речь идёт. Удалил своё сообщение от 05.09.2010 23:16:58.

С E14-140-MD будем проверять. Только прошу в цифрах указать, какие необходимы частоты вывода данных на ЦАП и ввода АЦП, какая именно точность синхронизации АЦП-ЦАП по времени Вам необходима? Вам нужен только 1 канал ЦАП и 1 канал АЦП?

06.09.2010 09:30:09
#7

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Никита, уточните пожалуйста:
1) После одного запуска АЦП-ЦАП Вы получаете неизменную относительную задержку АЦП-ЦАП, или она со временем плывёт в одну сторону?
2) При нескольких запусках АЦП-ЦАП на сколько стабильно повторяется поведение этой относительной задержки в начале (после запуска) и с течением времени?

Никита
06.09.2010 12:02:26
#8

Гость

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Александр,
достаточные частоты небольшие в моем случае: ЦАП - 15кГц, АЦП 1кГц

После запуска АЦП-ЦАП в 9 случаев из 10 получается отставание ЦАП на ~0.02с, неприятно, но можно с определенной точностью подвинуть (исходя из того, что известно,  что должно быть сразу после запуска на АЦП):
http://i9.fastpic.ru/big/2010/0906/1a/1 … f9c81a.png

После последних шаманств, "уплывание со временем" у меня ушло (подозреваю, что SyncWithADC повлиял). Раньше уплывало за ~1000с где-то на 1с.

Сейчас ( http://rghost.ru/2546116 ) гонял эту версию - с задержкой (исключая задержку при старте) - все ок, то что я хочу. За 10 000 с вроде бы не уплывала. Как именно я так сделал - не знаю smile Поэтому выше и попросил общие рекомендации//правила, как избежать "уплывания в процессе".

Итого:
- как сделать правильный синхронный запуск АЦП и ЦАП, чтобы вначале не надо было двигать результаты АЦП?
- какие общие правила необходимо соблюдать, чтобы избежать "уплывания в процессе"? (своевременная подкачка данных для АЦП// сбор данных с АЦП в двухпотоковом режиме через критическую секцию + SyncWithADC + ? )

Никита
06.09.2010 12:06:07
#9

Гость

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

*
Нужен 1 канал ЦАП и 2 канала АЦП.
Точность - в пределах дискретности ЦАП и АЦП, т.е. чтобы ошибка в любой момент времени была соизмерима с 1/частота_ацп + 1/частота_цап.

06.09.2010 12:41:31
#10

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

<<После последних шаманств, /"уплывание со временем/" у меня ушло (подозреваю, что SyncWithADC повлиял)>>
-- Никита, при этом, относительная задержка АЦП-ЦАП на сколько гуляет от одного старта к другому?

Никита
06.09.2010 19:37:11
#11

Гость

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Относительная задержка = на сколько цап стартует позже ацп?
Моя процедура для "поиска начала полезного сигнала" (как-то так, двигает, чтобы графики теоретические и полученный совпадали:
http://i9.fastpic.ru/big/2010/0906/50/0 … 526e50.png
) выдает сейчас задержку либо 0.0099с, 0.017с, либо 0.019с (как на картинке, в заголовке формы).
До этого помню был момент, что они просто совпали и ничего двигать не пришлось.

06.09.2010 20:06:24
#12

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

- Да.
- Никита, мы посмотрим у себя  задержки АЦП-ЦАП, когда программист по E14-140-M выйдет из отпуска. Придется подождать. О результатах здесь сообщим.

07.09.2010 11:23:48
#13

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Программист пришел smile
Первое, что бросается в глаза - откуда частота ЦАП 15 кГц, если минимальная 25 ?
Частота ЦАП задается из сетки 200/(N+1) кГц, где N = 0..7
Частота АЦП задается из сетки 8000/(K+1) кГц, где K = 39..65535

Когда источником сигнала АЦП является собственный ЦАП, целесообразно ставить одинаковые или кратные частоты дискретизации.

Долговременного расплыва частот не должно быть в силу того, что ЦАП и АЦП управляются одной и той же ПЛИС, тактируемой от одного источника 40 МГц.

Фиксированная задержка (сдвиг фазы) при раздельном программном пуске ЦАП и АЦП - случайная величина, достаточно большая (десятки миллисекунд?), определяется временем посылки и обработки команд по USB. Но эта задержка не накапливается.
Параметр SyncWithADC позволяет от нее избавиться.

Логика старта ЦАП у прибора такая:
1) По команде START_DAC устанавливается флаг запроса на запуск в программе центрального процессора.
2) Если в буфере достаточно данных (в версии до 3.10 - 8K байт, в 3.10 - задается в параметрах, по умолчанию также 8K), то команда на пуск ЦАП сразу передается в ПЛИС. Если данных недостаточно, то процессор ждет их поступления.
3) Если включен режим SyncWithADC, то ПЛИС начнет выдавать данные на ЦАП не сразу, а одновременно со стартом АЦП.

То есть для синхронной работы надо сначала при остановленном АЦП зарядить ЦАП на вывод (настроить параметры с SyncWithADC = 1, записать первую порцию данных, дать команду пуска), потом запустить АЦП (программно или по любому внешнему условию пуска).

А ВОТ ЧТО ЕЩЕ МОЖЕТ БЫТЬ - это пропущенные блоки (своевременно не вычитан буфер АЦП или не заполнен буфер ЦАП). Будет эффект кажущегося сдвига во времени, причем изменяться он будет не плавно, а ступенчато на величину блока (64 отсчета ЦАП или 32 отсчета АЦП); лечится аккуратной двойной буферизацией в приложении.

Если установить последнюю прошивку 3.10, то в ней можно, помимо прочего, читать на ходу счетчик пропущенных блоков. Либо, если пропуски именно по ЦАП, их можно поймать осциллографом, если в выходных данных поставить постоянное напряжение одного знака (когда пропускается блок, прибор заполняет дырку блоком из 64 нулевых отсчетов, т.е. на выходе 0В).

P.S. Описание новых функций версии 3.10 еще не выложено, потому что они будут полноценно поддержаны в следующей версии lusbapi. Однако с помощью недокументированных функций GetArray и PutArray все новые возможности можно использовать и со старой версией! Спрашивайте, научу. А отдельно часть будущей версии руководства программиста, касающуюся ЦАП, можно забрать вот тут: http://www.lcard.ru/download/e140_dac_v310_draft.pdf

Никита
07.09.2010 12:44:31
#14

Гость

Re: E14-140-MD rev.B: расхождение по времени, ЦАП+АЦП

Александр Е, спасибо, буду пробовать.
15 кГц - просто в память откуда-то врезалось один раз, так и ставил (частоты для расчетов считываю повторно для точности из структуры описания цап//ацп все равно, здесь все ок).
Что не получится - напишу тогда. smile