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


Форум

Вы не вошли.

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

#2 Re: Техническая поддержка » Корректировка данных АЦП Е-140 » 30.10.2017 15:19:34

laf

Данные сошлись. Спасибо. При работе использовал SRC драйвера и инструкцию из архива http://www.lcard.ru/download/lcomp_linux.tgz. Ни слова о "приведенной разрядности" в указанных источниках не нашел. Большая просьба держать инфу актуальной.

#3 Техническая поддержка » Корректировка данных АЦП Е-140 » 30.10.2017 13:50:37

laf
Ответов: 4

Добрый день.
Проблема - расхождение измеряемых данных в LGraph и в разрабатываемом ПО.
Используется Е-140М SerNum: 1T315990 под linux raspbian. Устройство raspberry pi II ARMv7 Processor rev 4 (v7l), библиотека lcomp. 
Режим - одноканальный, дифференциальный. Диапазон +-10V. Источник тестового напряжения - батарея. напряжение стабильное.
Показания:
4.108 мультиметр
4.1115 Лграф
4.01574 по моим расчетам
Считанные из платы корректировки:
adc_table:
0: 3.16449
1: 3.24536
2: 5.02264
3: 12.0979
4: 1.01201
5: 1.00623
6: 1.00218
7: 1.00091
Используемые мной корректировки и чувствительность:
offset: 3.16449
scale: 1.01201
sens: 10 В / 8191.5 = 0.00122078
Функция преобразования кода АЦП в Вольт с корректировкой:
data(i) = ((float)(((short)adc_data(i)) + offset(idxNCh)) * scale(idxNCh) * sens(idxNCh))
(вид индексных скобок совпал с тегом - поправил)

Массивы offset и range заполняю заранее на этапе инициализации в соответствии с усилениями на каналах.

В чем может быть проблема?

#4 Re: Техническая поддержка » Restart E440 » 01.02.2017 10:27:33

laf

Действительно обнуляет. Вопрос по размеру FIFO. manual Замечания для модуля E14-440/E14-140M. Цитата "Для E440 IrqStep должен быть равен FIFO и ограничен соответственно максимальным размером FIFO модуля (те максимальным значением для половины циклического буфера в плате), у E140M это параметр просто не настраивается поэтому всегда 2048". А если необходимо собирать данные 3, 5, 7 каналов - как выбрать IrqStep и FIFO для плат E440, Е140, Е154?

#5 Техническая поддержка » Restart E440 » 31.01.2017 12:01:22

laf
Ответов: 3

Плата E440 Rev C. SerNum: 6C582. Периодически приходится вызывать функции Stop/Start. Остановка происходит в любом месте буфера. Как обеспечить старт сбора в 0 позиции? Добавить функции CloseLDevice при стопе и OpenLDevice  при старте? Насколько при этом увеличится задержка старта? Спасибо.

#6 Re: Техническая поддержка » Калибровочные коэффициенты E14-440 » 28.11.2016 13:23:18

laf

Плата используется в "конце" тракта преобразования. Возникла мысль корректирующие коэффициенты переписать с учетом дополнительных цепей на входе АЦП.
1. Правильно я понимаю, эту задачу можно решить используя функцию WritePlataDescr? И с помощью EnableCorrection() сигнальный процессор обеспечит автокоррекцию всего измерительного тракта?. 
2. Если желание оставить как есть заводские калибровки победит, можно ли использовать пару функций WriteFlashWord/ReadFlashWord? Какие при этом допустимы значения USHORT FlashAddress? Понимаю, что автокоррекции уже не будет.

#7 Re: Техническая поддержка » Калибровочные коэффициенты E14-440 » 24.11.2016 10:27:56

laf

Спасибо за содержательный ответ. Перегрузка входа будет исключена. Рассматривается как вспомогательный режим для калибровки тракта в целом.

#8 Re: Техническая поддержка » Калибровочные коэффициенты E14-440 » 23.11.2016 13:42:32

laf

В структуре ADC_PAR_0 Chn[128] - массив с номерами каналов и усилением на них, описывает порядок опроса каналов. В e14-440 32 коммутируемых канала.
Можно ли задать в таблице опрос одного из каналов несколько раз подряд, но с разным коэффициентом усиления? Переходной процесс устаканится на максимальной частоте 400 Кгц?

#9 Re: Техническая поддержка » Калибровочные коэффициенты E14-440 » 28.10.2016 13:42:04

laf

Еще вопрос. Как получить, используя lcomp параметры АЦП: разрядность, диапазон входных напряжений для выбранного усиления... Лучше если это будет ссылка на источник, т.к.  в процессе вопросы будут появляться.

#10 Re: Техническая поддержка » Калибровочные коэффициенты E14-440 » 26.10.2016 10:06:05

laf

Указанное Руководство программиста ссылается на библиотеку Lusbapi. Для работы в linux используется библиотека lcomp. Для данной библиотеки нет подобного руководства?
Я правильно понял, после вызова EnableCorrection в  буфере по ссылке (адрес с учетом синк), полученной от SetParametersStream будут лежать уже скорректированные данные формата USHORT?

#12 Техническая поддержка » Калибровочные коэффициенты E14-440 » 20.10.2016 17:10:54

laf
Ответов: 11

Добрый день. Не ясно, как использовать заводскую калибровку.

Использую структуру

typedef struct __PLATA_DESCR_440
{
char SerNum[9];
char BrdName[7];
char Rev;
char DspType[5];
char IsDacPresent;
long Quartz;
char Reserv2[13];
USHORT KoefADC[8];
USHORT KoefDAC[4];
USHORT Custom[32];
} PLATA_DESCR_E440 , *PPLATA_DESCR_E440;

ReadPlataDescr возвращает значения KoefADC[8] соответственно
2
3
7
22
33040
32817
32738
32780
судя по описанию, 1, 2, 3, 4  - смещение. 5,6,7,8 коэффициенты суть множители.

инвентарный лог платы
Oct 20 16:47:21 raspberrypi ./adc_server: SerNum: 6C582
Oct 20 16:47:21 raspberrypi ./adc_server: BrdName: E440 Rev C
Oct 20 16:47:21 raspberrypi ./adc_server: Buffer size: 72000
Oct 20 16:47:21 raspberrypi ./adc_server: Quartz : 24000000
Oct 20 16:47:21 raspberrypi ./adc_server: FIFO : 2496
Oct 20 16:47:21 raspberrypi ./adc_server: Pages : 30
Oct 20 16:47:21 raspberrypi ./adc_server: IrqStep : 2400

Т.е. скорректированный результат будет
Y = смещение + масштаб*Х ?
в итоге при значении АЦП 8300 на максимальном усилении я получу в результате 22 + 32780 * 8300 = 272074022  ?
Явно не USHORT.
В чем ошибка?

еще вопрос, если использовать EnableCorrection в буфере будут лежать уже скорректированные данные?

Спасибо.

#13 Re: Техническая поддержка » Драйвера для E14-440 под Raspbian » 18.10.2016 13:22:38

laf
Poul пишет:

Так оно и есть, достаточно заменить  asm... Клиенты которые запускали на RP уже были.

использую найденное в исходниках ядра

#define atomic_inc(v)           atomic_add(1, v)
#define atomic_dec(v)           atomic_sub(1, v)