Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Тема закрыта
|
||||
|
E-154 Диапазоны напряженияКак задать в Е-154 диапазон напряжения, как я понял существует несколько способов? с помощью констант, через ControlTable, через калибров.коэфф. |
|||
|
||||
|
Re: E-154 Диапазоны напряженияЕсли в Е14-440 коды АЦП от -8000 до +8000, а в Е-154 от -2000 до +2000, то можно в программе своей просто добавить множитель 4? А какой по умолчанию стоит диапазон напряжения в Е-154? |
|||
|
||||
|
Re: E-154 Диапазоны напряженияДиапазон напряжения (иначе говоря, коэффициент усиления) задается через ControlTable, формат описан в руководстве программиста. Калибровочные коэффициенты предназначены для пересчета кодов АЦП в физические величины. Для каждого диапазона, как правило, свои калибровочные коэффициенты, они определяются с учетом характеристики входных цепей конкретного экземпляра устройства. Формула пересчета в руководстве, обычно это U(x) = a(x + b), где a,b - калибровочные коэффициенты, x - отсчет АЦП Если Вы хотите сделать универсальную программу, работающую с устройствами разной разрядности, то можно либо пересчитывать сразу в вольты и работать с физическими величинами, либо передавать калибровочные коэффициенты на верхний уровень программы, а промежуточную обработку делать в кодах. Умножить на 4 никто не мешает, но надо понимать, что сравнивать в кодах АЦП (а также складывать и вычитать) данные, собранные с разных устройств, некорректно, т.к. у них разные калибровочные коэффициенты - очень сильно потеряете в точности. |
|||
|
||||
|
Re: E-154 Диапазоны напряженияУправляющая таблица - это массив логич.каналов, в случае с Е-154 массив из 16 элементов(логических каналов). Логический номер - это 8-битовое поле,первые 3 из которых это номер канала,2 последних - диапазоны,остальные зарезервированы. В руководстве программиста для Е-154 приведены 2 примера: 0х2 - третий канал с диапазоном +/-5В. Как получилось так, ведь 0х2 это 00000010 и должен быть 0-й канал с диапазоном +/-1,6В. Второй пример 0х82 написано 3-й канал с диапазоном +/-0,5В, у меня получается 0101 0010, т.е. 2 канал с диап.+/-1,6В. |
|||
|
||||
|
Re: E-154 Диапазоны напряженияПочти все верно, только:
0x02 = 00000010 = { GS = 0, MA = 2 } = канал 3, 5В.
|
|||
|
||||
|
Re: E-154 Диапазоны напряженияControlTable[i] = (ADC_INPUT_RANGE_xxxx_E154 << 6) | ((PhysicalChannelNumber_1_to_8 - 1) & 7); |
|||
|
||||
|
Re: E-154 Диапазоны напряженияСпасибо, но я не понял как из 0х82 получили 10000010, или 82 это в 16 сист.счисления? если в десятичной, то должно быть 1010010. Как мне на шести каналах установить диапазон +/-5В,
|
|||
|
||||
|
Re: E-154 Диапазоны напряженияРазумеется, в нотации языка C префикс 0x означает шестнадцатеричную систему счисления (Pascal - $80, Intel x86 asm - 80h, BASIC - &H80). Значения правильные. Как заполнить ControlTable - я как раз написал в предыдущем посте |
|||
|
||||
|
Re: E-154 Диапазоны напряженияControlTable[i] = (ADC_INPUT_RANGE_xxxx_E154 << 6) | ((PhysicalChannelNumber_1_to_8 - 1) & 7);
|
|||
|
||||
|
Re: E-154 Диапазоны напряженияПодробнее в каком смысле? Перевести на русский язык синтаксис языка С? Пожалуйста: ЭЛЕМЕНТУ массива ControlTable, имеющему индекс i (i принимает значения от 0 до ChannelsQuantity - 1, где ChannelsQuantity <= 16), ПРИСВАИВАЕТСЯ значение, равное ПОБИТОВОМУ ИЛИ следующих двух величин:
Операцию побитового ИЛИ (|) можно в данном случае заменить сложением (+), поскольку у одного из операндов все младшие биты нулевые. Побитовое И с константой 7 в члене ((PhysicalChannelNumber - 1) & 7) необязательно, это элемент так называемого защитного программирования (если параметр PhysicalChannelNumber передается в переменной и вдруг окажется неверным, например, 255, то это выражение гарантирует, что не будут испорчены биты других полей управляющего слова). Кстати, а на каком языке программирования Вы пишете? |
|||
|
||||
|
Re: E-154 Диапазоны напряженияБонус для приверженцев Pascal/Delphi ControlTable[i] := (ADC_INPUT_RANGE_..._E154 shl 6) or ((PhysicalChannelNumber_1_to_8 - 1) and 7); Ну и для полноты операция битового сдвига влево на n позиций (x << n, x shl n) эквивалентна умножению на 2 в степени n, т.е. дописыванию n двоичных нулей справа (и отбрасыванию n старших разрядов произведения, которые после сдвига не поместятся в разрядную сетку данного целочисленного типа). |
|||
|
||||
|
Re: E-154 Диапазоны напряженияСпасибо за разъяснения, будьте добры поправьте если неправильно.
//Здесь на всех 6 каналах выставляю диап. +/-1,6В.
|
|||
|
||||
|
Re: E-154 Диапазоны напряженияi < am.ChannelsQuantity
|
|||
|
||||
|
Re: E-154 Диапазоны напряжениякогда пишу for(WORD i=0; i < am.ChannelsQuantity; i++) am.ControlTable[i] = (WORD)(i+64)
когда пишу (SigParam[i].ChannelNum |
все 6 каналов на своих местах. Но это строчка кода от модуля Е440 |
|||
|
||||
|
Re: E-154 Диапазоны напряженияВот скрин программы (Е-154), обратите внимание, что сигнал срезается, доходя до опред.точки
|
|||
|
||||
|
Re: E-154 Диапазоны напряженияЧто такое GroundMode, SigParam, AmplFactor? В какой библиотеке? (WORD)(i+64) - это физический канал 1+i (считая от единицы) с усилением, соответствующим GS = 01 (для E154 - 1.6 В).
Этот вопрос недавно всплывал на форуме -
>обратите внимание, что сигнал срезается, доходя до опред.точки Трудно комментировать, не зная, как строится график. На потерю данных не похоже: сигналы характерной формы в кан. 3 и 4 не перескакивают после разрыва на другие графики (ChannelsQuantity равно 6?)
Про двойную буферизацию и потоки чтения см. в частности темы на этом форуме от человека с ником MOT, ЬЩЕ, УЩЕ, например:
|
|||
|
||||
|
Re: E-154 Диапазоны напряженияWORD CommonGround = 0x20; // Флаг 32 каналов с общей землей
SigParam[0..5] это структура типа SigParamRec:
|
|||
|
||||
|
Re: E-154 Диапазоны напряжениятакже в руков-ве написано следующее: "на сегодняшний день модуль не умеет производить
|
|||
|
||||
|
Re: E-154 Диапазоны напряженияА вот как рисуется график
Описание, что чему равно: BaseLine = Image3->Height / 6.5;
|
|||
|
||||
|
Re: E-154 Диапазоны напряжения1) У E154 всегда common ground, бит 5 (0x20) не должен влиять на работу модуля. В остальном, как Вы понимаете, ChannelNum | (AmplFactor << 6) идентично (i + 64) для i = ChannelNum (0..7) и AmplFactor = 1. 2) >в Lusbapi.h в структуре MODULE_DESCRIPTION_E154 всего 6 полей среди них нет Adc.OffsetCalibration[] и Adc.ScaleCalibration[]
Калибровочные коэффициенты нужны для того, чтобы учесть индивидуальные характеристики экземпляра прибора, т.е. привести отсчеты АЦП к калиброванным единицам (2000 ед = граница диапазона измерения, В). Они не очень сильно отличаются от 0 и 1 (аддитивный и мультипликативный калибровочный коэффициент соответственно).
Прочитайте, пожалуйста, главу 4.5.1 Корректировка данных АЦП, там все написано. Строить на графике можно либо откорректированные отсчеты Y = (X+A)*B, исходя из номинального диапазона (-2000, 2000), либо вольты U = Y * Uгр / 2000, где Uгр - граница выбранного диапазона. Обращаю внимание, что Y может быть по модулю больше 2000, т.к. технически АЦП выдает коды -2048..2047, плюс калибровочные коэффициенты могут дать смещение, т.е. Ymin = (-2048+A)*B, Ymax = (2047+A)*B. Этот запас можно учесть (добавить при расчете высоты графика), а можно принудительно обрезать - это уже как Вам нравится. |
Страницы 1
Тема закрыта