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


Ошибка в модуле lusbapi для E140

Вы не вошли.

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

d-e-n
02.12.2005 17:34:45
#1

Гость

Ошибка в модуле lusbapi для E140

Доброго времени суток.
Я нашел ошибку в модуле. Функция bool WINAPI TLE140::FILL_ADC_PARS(ADC_PARS_E140 *am)

там - сохранение межкадровой задержки:
    // межкадровая задержка (мсек)                                            //
    k=am->AdcRate*am->InterKadrDelay+0.5;                                     //
    if(k==0) k=1; else if(k>256) k=256;                                       //
    buf[131]=k-1;                                                             //
На сколько я могу понять, должно быть
    buf[131]=k-1;

Вот так я заполняю параметры
adc_pars.ChannelRate = 0.1; // частота одного канала
adc_pars.AdcRate = 0.1 * (4 + 1); // 4 канала и межкадровая задержка длиной в 1 такт АЦП
    adc_pars.InterKadrDelay = 1 / adc_pars.AdcRate; // Частота в АЦП

Если использовать Ваш алгоритм запонения, в результате частота устанавливается в 125Гц и при расчёте спектра не верно получается частота

Вот мой код заполнения параметров устройства (взял за основу Ваши исходники, lusbapi.lib не использовал):

// межкадровая задержка (мсек)
dRes = (DWORD)(adc_pars.AdcRate * adc_pars.InterKadrDelay + 0.5);
if (dRes == 0) dRes = 1; else if (dRes > 256) dRes = 256;
adc_pars.InterKadrDelay = dRes / adc_pars.AdcRate;
buf[131] = (BYTE)dRes;

При этом в спектральном анализе показывается верная проверочная частота, частота оцифровки для каждого канала остаётся равна 100Гц

d-e-n
02.12.2005 17:35:36
#2

Гость

Re: Ошибка в модуле lusbapi для E140

>На сколько я могу понять, должно быть
>buf[131]=k-1;
опечатка:
"На сколько я могу понять, должно быть
buf[131]=k-1;" - так верно

d-e-n
02.12.2005 17:35:59
#3

Гость

Re: Ошибка в модуле lusbapi для E140

smile
На сколько я могу понять, должно быть
buf[131]=k;

alexander
02.12.2005 19:30:20
#4

Гость

Re: Ошибка в модуле lusbapi для E140

1. buf[131]=k-1; - это правильно.
значение межкадровой задержки, передаваемое в сам модуль, может принимать значение [0, 255].

2. поле ChannelRate является ВЫХОДНЫМ параметром. оно заполняется автоматически при вызове функций FILL_ADC_PARS() и GET_CUR_ADC_PARS() на основе полей AdcRate и InterKadrDelay.

отсюда и появляется частота кадров 125Гц.

d-e-n
17.12.2005 09:55:59
#5

Гость

Re: Ошибка в модуле lusbapi для E140

Извиняюсь за долгое молчание..

Хм. Не совсем понял. Каким образом мне в таком случае правильно выставить скорость 100Гц на канал?

Получается такая ситуация. При установке частоты АЦП 500Гц (AdcRate=0.5) и межкадровой задержки в 1 такт (InterKadrDelay = 0), я жду частоты оцифровки 1 канала равной 100Гц. Однако, модуль пишет мне, что она равна 125Гц...

В чём я ошибаюсь?

>> отсюда и появляется частота кадров 125Гц.
Так вот об этом я и говорю. Частота должна быть 100Гц.

alexander
19.12.2005 09:59:42
#6

Гость

Re: Ошибка в модуле lusbapi для E140

1. сделайте вот так:
ChannelsQuantity=4
AdcRate=0.4
InterKadrDelay=0

посмотрите пункт "1.3.2.4 Формат кадра отсчетов" в "Руководство программиста"

2. повторяю, поле ChannelRate является ВЫХОДНЫМ параметром. оно заполняется автоматически при вызове функций FILL_ADC_PARS() и GET_CUR_ADC_PARS() на основе полей AdcRate и InterKadrDelay.

Наблюдатель
19.12.2005 10:18:54
#7

Гость

Re: Ошибка в модуле lusbapi для E140

Угу.
Формальное объяснение:

Tk = 1/ChannelRate = (ControlTableLength–1)*tАЦП + tмкз. С учетом того, что в данном случае tмкз=tАЦП получаем ChannelRate = 1/(ControlTableLength*tАЦП). Для AdcRate=0.5 кГц и 4 каналов ChannelRate = 1/(4*tАЦП) = 125 Гц.

По сути:
Межкадровая задержка не складывается вместЕ с межканальной, а используется вместО нее. Именно поэтому в формуле "...-1..."