Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
Проблема с программированием (плата l791)Здравствуйте. Мы приобрели устройство l791 (серийный номер, программно читаемый с карты 3r386407). Я пытаюсь разобраться с тем, как можно программно работать с l791 использованием библиотеки lcomp.dll (версии 6.0.0.6). Для экспериментов я подключаю батарейку на 1,5 В к выходу X7, При этом используется однофазная схема подключения сигналов с общей землей. При использовании программы l-graph I осциллоскоп (в этой программе) показывает «нормальную» прямую линию сигнала (около 1,4 В). Я пытался переделать один из примеров (l791.tst) под свои нужды. Далее я приведу некоторые части исходного кода, в которых из-за непонимания, как мне кажется, я мог допустить ошибки · установка параметров сбора данных ap.t2.dRate = 100.0;//с такими параметрами собираются данные с l-graph ap.t2.dKadr = 0.010;//с такими параметрами собираются данные с l-graph ap.t2.NCh = 1;//у нас подключена только батерейка на 1,5В к Х7 (тип подключения - с общей землей) ap.t2.Chn[0] = getLogicalChannelNumber(6, 1, 2, 0);//коэффициент усиления х4 (от -2,5 до 2,5 В), то есть логический номер канала в нашем случае получается 0x36 (54) ap.t2.FIFO = 1;//плата должна каждый отсчет сбрасывать в большой кольцевой буфер (data) · непосредственно сбор данных fstream file("file.txt", ios_base::out); fstream cfile("file.txt", ios_base::out); stringstream ss; ULONG j = 0; for (int i = 0; i < 2000; i++) { if (j != sync[I_ADC_PCI_COUNT_L791]) { j = sync[I_ADC_PCI_COUNT_L791];//сохраняем указатель, так как sync[I_ADC_PCI_COUNT_L791] между нашими действиями if ((j > 1) && (j < tm)) { stringstream ss; ULONG newidata = data[j-1];//так как мне кажется, что sync[I_ADC_PCI_COUNT_L791] указывают на позицию буфера куда будут записываться данные, а последние записанные данные у нас находятся 4 слова (32 бита) назад. ss << j << " : //t" << hex << newidata << dec << " //t" << getVoltage(newidata, pd.KoefADC); if (0 == (i % 10)) { cout << ss.str() << endl; cfile << ss.str() << endl; } file << ss.str() << endl; Sleep(10); } } else Sleep(1000); } file.close(); cfile.close(); · функция расшифровки данных с АЦП double getVoltage(ULONG slovo, float *koefADC)//частный случай функции, в которой считается что данные считываются с канала с усилением x4 { ULONG value = (slovo & 0x00001fff);//маскируем необходимые нам биты, в которых должны находиться значения АЦП. младшие 13 бит, так как знак нас не интересует double voltage = (static_cast<double>(value) + koefADC[2]) * koefADC[10];//выполняем корректировку значения return voltage * (5.0 / 16384.0);//преобразуем значение в модуль напряжения } В начале выводятся следующие считанные программно параметры и настройки платы: Параметры платы SerNum 3R386407 BrdName L791 Rev A DspType NODSP IsDacPresent 0 Quartz 20000000
Параметры виртуального слота Slot parameters Base 0 BaseL 0 Mem cfdff000 MemL 1000 Type 13 DSPType 0 Irq 3
Настройки сбора данных с АЦП Allocated memory size(word): 524288 Buffer size(points): 131072 ap.t2.AutoInit = 1 ap.t2.dRate = 100 ap.t2.dKadr = 0.01 ap.t2.SynchroType = 0 ap.t2.SynchroSrc = 0 ap.t2.NCh = 1 ap.t2.Chn[0] = 54 ap.t2.FIFO = 1 ap.t2.IrqStep = 1024 ap.t2.Pages = 128 ap.t2.IrqEna = 0 ap.t2.AdcEna = 1 adc_master_en = 1 adc_buf_depth = 0 Но далее, к сожалению, получаются довольно странные данные (они полностью приведены в файлах file.txt и cfile.txt). Суть такова, что пока не подключена батарейка получаются следующие значения (примерно такие же и с таким же поведением как и в l-graph): Используется такой формат sync[I_ADC_PCI_COUNT_L791]: data[sync[I_ADC_PCI_COUNT_L791]-1] Напряжение 118 : 1500e000 -0.000917482 14378 : 900e000 -0.000917482 30006 : 1500e000 -0.000917482 45632 : 1f00e000 -0.000917482 61258 : 900e000 -0.000917482 76886 : 1500e000 -0.000917482 92513 : e000 -0.000917482 108139 : a00e000 -0.000917482 123766 : 1500e000 -0.000917482 <…………………….> 55203 : 2001fff 2.652 70828 : b001fff 2.652 86455 : 16001fff 2.652 После подключения батарейки происходит что-то странное — напряжение начинает постепенно расти, и при достижении 2,652 В сбрасывается в ноль и снова начинает расти и так далее. Выглядит это так: 44049 : 10001fff 2.652 59676 : 1b001fff 2.652 75302 : 5001fff 2.652 90929 : 1000e000 -0.000917482 106556 : 1b00e000 -0.000917482 <тут подключаю батарейку, сначала происходят скачки напряжения (наверное, из-за помех вносимых мной руками), а затем напряжение начинает плавно расти> 122190 : d00e4c3 0.393895 6738 : 1100ea9e 0.879395 22365 : 1c00e97c 0.785469 37991 : 600e630 0.512112 53618 : 1100e323 0.25916 69246 : 1d00e488 0.374786 84871 : 600e9fa 0.826278 100501 : 1400ebea 0.986923 116125 : 1c00e821 0.673082 681 : 800e859 0.691219 16306 : 1100e88a 0.707089 31934 : 1d00e8c3 0.72555 47561 : 800e902 0.745955 63187 : 1200e940 0.766036 78815 : 1e00e95d 0.775428 94440 : 700e982 0.787412 110067 : 1200e9b1 0.802634 125694 : 1d00e9f2 0.823687 10249 : 800ea2c 0.842472 25876 : 1300ea46 0.850893 41502 : 1d00ea68 0.861905 <……………………..> 85836 : b00ee4a 1.18384 101465 : 1800ee71 1.19648 117090 : 100ee8c 1.20522 1644 : b00eea0 1.2117 17271 : 1600eeb8 1.21947 32898 : 100eee1 1.23275 48524 : b00ef07 1.24506 Помогите, пожалуйста, разобраться, в чем дело, что я неправильно делаю и каким образом необходимо в таком случае организовывать сбор данных. У меня есть несколько предположений относительно причин:
Заранее вам спасибо. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Программист по L-791 в отпуске. Должен появиться в понедельник. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Сергей, а программист этот должен появиться в понедельник 03-08-2009? |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Да. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Спасибо, Сергей. Буду ждать понедельника. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)ап теме в надежде на скорейшую помощь отдохнувшего программиста по l-791. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Маску надо накладывать 0xFFFF на данные. и потом приводитьих к типу
В примере L791.TST это все расписано в конце файла после строчки: printf("//n Converting ..."); |
|||
|
||||
|
Re: Проблема с программированием (плата l791)эм... я попробую вечером (плата у меня дома)
|
|||
|
||||
|
Re: Проблема с программированием (плата l791)значение всегда будет в диапазоне... преобразовывать x*2.5/8192 |
|||
|
||||
|
Re: Проблема с программированием (плата l791)К сожалению не получаются нормальные значения и при маскировании 0xffff и последующем преобразовании к short. Получаемые таким образом значения действительно лежат в диапазоне [-8192; 8191], но даже при подключенной батарейке в 1,5В (реально 1,35В) не получается постоянное значение, читаемые с АЦП данные имеют примерно такие поведение и значения
|
|||
|
||||
|
Re: Проблема с программированием (плата l791)1. Опишите, пожалуйста, как именно Вы подключаете батарейку (конкретно, к каким контактам разъема что подключено).
|
|||
|
||||
|
Re: Проблема с программированием (плата l791)Для 32-канального режима к "-" нужно присоединить AGND, GND32, а к "+" присоединить X1 (для 1-го канала). Для 16-канального режима к "-" нужно присоединить AGND, Y1, а к "+" присоенить X1 (для 1-го канала). Можно также проверить исправность в режиме "собственно нуля" - должны быть коды, близкие к нулю. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)to Владислав
Для подключения я использую входящий в комплект "клеммник" INTER-DB37Fv2.
>>> 2. А в LGraph все работает хорошо? Да, осциллоскоп в L-Graph I при подключенной батарейке показывает, примерно, верное значение (прямую линию на уровне около 1,3В). При разомкнутых сигнала какое-то максимальное значение (наверное, около 2,56В). При перемкнутых напрямую 16 и 17 выходах показывается прямая линия на уровне 0В. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)to Гарманов Александр
Да, так и подключаю. Следую рисунку 6 руководства (пункт 4.6 на странице 22). Но при экспериментировании подключал также и /'-/' батарейки к 17 выходу, /'+/' к 16, надеюсь это не могло вывести из строя плату. >>>Можно также проверить исправность в режиме /"собственно нуля/" - должны быть коды, близкие к нулю. При перемкнутых 16 и 17 выходе (режим "собственно нуля") получаются такие данные
|
|||
|
||||
|
Re: Проблема с программированием (плата l791)Вывести из строя это не могло.
|
|||
|
||||
|
Re: Проблема с программированием (плата l791)"Да, так и подключаю. Следую рисунку 6 руководства (пункт 4.6 на странице 22)"
|
|||
|
||||
|
Re: Проблема с программированием (плата l791)Или опрашиваете не тот номер канала, к которому фактически подключили... |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Вы правы. Действительно, я допустил глупейшую ошибку в функции формирования номера логического канала (запутался в битах) из-за этого выбирался не тот канал с неправильным коэффициентом усиления. Сейчас всё работает прекрасно.
|
|||
|
||||
|
Re: Проблема с программированием (плата l791)Здравствуйте.
При сборе данных с платы я выбираю уровень усилений 128 (от -0.078В до 0.078В). При этом
Поэтому возникли вопросы. Какие минимальные колебания напряжений можно заметить при использовании платы.? Какие действия при подключении сигналов нужно предпринять при измерении малых напряжений? Какие параметры сбора данных использовать в таких случаях и как можно преобразовывать получаемые значения с АПЦ для увеличения точности? Кстати значения с платы сильно колеблются и при использовании L-Graph I. Заранее спасибо. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Вопрос требует подробного ответа. Смогу ответить на него 7-8 августа. Уточните пожалуйста: Вам требуется 1-канальный или многоканальный режим? Дайте ссылку на характеристики датчика (или на его документацию). В Вашей задаче как далеко датчик отдалён от L-791? |
|||
|
||||
|
Re: Проблема с программированием (плата l791)У нас будет конструкция, состоящая из 5 платформ. Под каждой платформой (по углам) будут расположены тензодатчики. Всего получается 20 датчиков (16 из них с пределом измерений в 3 тонны, 4 - в 2 тонны). Датчики будут расположены на расстоянии от 3 до 10 метров от компьютера. Документацию к датчикам (в ней указаны и его характеристики) я смогу только к вечеру отсканировать и выслать вам на почту. |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Вышлите документацию на support@lcard.ru c пометкой "для Гарманова" |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Отправил вам письмо с паспортом к тензодатчику на support@lcard.ru (в нем указаны характеристики датчика). |
|||
|
||||
|
Re: Проблема с программированием (плата l791)Из руководства на датчик следует, что для вычисления максимального выходного напряжения при максимальном воздействии (оно равно наибольшему пределу измерения веса НПИ – это 3, или 4, или 5 тонн) рабочий коэффициент передачи датчика (РКП = 2,0001мВ/В) нужно умножить на напряжение питания датчика (допустим, 10 В). Получим 20 мВ. При нулевом воздействии выходное напряжение датчика будет 0 В. Значит, выходной диапазон напряжений Вашего датчика равен 0 – 20 мВ.
Полезные статьи:
|
|||
|
||||
|
Re: Проблема с программированием (плата l791)Благодарю за столь подробный ответ. Буду разбираться. |