Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Действительно. Смотрел только линуксовый архив.
Данные сошлись. Спасибо. При работе использовал SRC драйвера и инструкцию из архива http://www.lcard.ru/download/lcomp_linux.tgz. Ни слова о "приведенной разрядности" в указанных источниках не нашел. Большая просьба держать инфу актуальной.
Добрый день.
Проблема - расхождение измеряемых данных в 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 заполняю заранее на этапе инициализации в соответствии с усилениями на каналах.
В чем может быть проблема?
Действительно обнуляет. Вопрос по размеру FIFO. manual Замечания для модуля E14-440/E14-140M. Цитата "Для E440 IrqStep должен быть равен FIFO и ограничен соответственно максимальным размером FIFO модуля (те максимальным значением для половины циклического буфера в плате), у E140M это параметр просто не настраивается поэтому всегда 2048". А если необходимо собирать данные 3, 5, 7 каналов - как выбрать IrqStep и FIFO для плат E440, Е140, Е154?
Плата E440 Rev C. SerNum: 6C582. Периодически приходится вызывать функции Stop/Start. Остановка происходит в любом месте буфера. Как обеспечить старт сбора в 0 позиции? Добавить функции CloseLDevice при стопе и OpenLDevice при старте? Насколько при этом увеличится задержка старта? Спасибо.
Плата используется в "конце" тракта преобразования. Возникла мысль корректирующие коэффициенты переписать с учетом дополнительных цепей на входе АЦП.
1. Правильно я понимаю, эту задачу можно решить используя функцию WritePlataDescr? И с помощью EnableCorrection() сигнальный процессор обеспечит автокоррекцию всего измерительного тракта?.
2. Если желание оставить как есть заводские калибровки победит, можно ли использовать пару функций WriteFlashWord/ReadFlashWord? Какие при этом допустимы значения USHORT FlashAddress? Понимаю, что автокоррекции уже не будет.
Спасибо за содержательный ответ. Перегрузка входа будет исключена. Рассматривается как вспомогательный режим для калибровки тракта в целом.
В структуре ADC_PAR_0 Chn[128] - массив с номерами каналов и усилением на них, описывает порядок опроса каналов. В e14-440 32 коммутируемых канала.
Можно ли задать в таблице опрос одного из каналов несколько раз подряд, но с разным коэффициентом усиления? Переходной процесс устаканится на максимальной частоте 400 Кгц?
Еще вопрос. Как получить, используя lcomp параметры АЦП: разрядность, диапазон входных напряжений для выбранного усиления... Лучше если это будет ссылка на источник, т.к. в процессе вопросы будут появляться.
Указанное Руководство программиста ссылается на библиотеку Lusbapi. Для работы в linux используется библиотека lcomp. Для данной библиотеки нет подобного руководства?
Я правильно понял, после вызова EnableCorrection в буфере по ссылке (адрес с учетом синк), полученной от SetParametersStream будут лежать уже скорректированные данные формата USHORT?
Вчитался, Y = (смещение + Х)*масштаб. Но это еще страшнее.
Добрый день. Не ясно, как использовать заводскую калибровку.
Использую структуру
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 в буфере будут лежать уже скорректированные данные?
Спасибо.
Так оно и есть, достаточно заменить asm... Клиенты которые запускали на RP уже были.
использую найденное в исходниках ядра
#define atomic_inc(v) atomic_add(1, v)
#define atomic_dec(v) atomic_sub(1, v)
Страницы 1