Форум: Техническая поддержка

Тема: Корректировка данных АЦП E14-140-М на 10 В напряжения

Вы не вошли.

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

19.11.2019 14:41:22
#1

Участник
Здесь с 07.11.2019
Сообщений: 6

Корректировка данных АЦП E14-140-М на 10 В напряжения

Доброго времени суток, уважаемые сотрудники техподдержки и форумчане, если таковые будут читать в этой ветке мой вопрос.
Столкнулся я со следующей проблемой: не совсем понимаю как корректировать данные, получаемые со входов АЦП. Прочитал в руководстве, что можно использовать штатные или пользовательские, правда не совсем понял как применить, арифметика сбила с толку слегка.
Работаем мы с модулем E14-140-M, напряжение от 5 до 10 В. Получаем данные со входов модуля через ADC_Sample. Большое спасибо, что тогда помогли разобраться как вывести значения, помогли сойти с мёртвой точки. Но продолжу про корректировку и что интересует непосредственно.
Как гласит таблица 1 на 10 странице руководства, если всё правильно задано, тогда должны получиться красивые и нужные значения: для 10 Вольт - [8000] код АЦП, 0 В - [0] код АЦП, -10 В - [-8000] код АЦП. Простая арифметика и 1 Вольт напряжения - код АЦП 800, 0,1 - 80. Но столкнулись с проблемой, что не сходится. Оно и понятно, данные сырые, а как скорректировать - проблема.

Вопрос: как скорректировать данные? Читал, что можно как-то корректировать, но, повторюсь, арифметику не понял.
Сам "недопрограммист", пишу на C++/CLI. Помогите разобраться. Возможно, данный вопрос уже поднимался на форуме, а если нет - тогда буду первым.

19.11.2019 15:32:16
#2

Участник
Здесь с 07.11.2019
Сообщений: 6

Re: Корректировка данных АЦП E14-140-М на 10 В напряжения

Дополнительно вопрос: можно ли задавать диапазоном значение кодов для одного числа для грубой калибровки, не строгой?

19.11.2019 15:56:01
#3

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,477

Re: Корректировка данных АЦП E14-140-М на 10 В напряжения

1. В руководстве программиста в п.4.5.1. "Корректировка данных АЦП" достаточно подробно расписано как именно корректируются входные данные с АЦП. Даже приведены конкретные примеры. В каком именно месте не понятна арифметика корректировки?
2. Дополнительный вопрос совсем не понял...

19.11.2019 16:21:26
#4

Участник
Здесь с 07.11.2019
Сообщений: 6

Re: Корректировка данных АЦП E14-140-М на 10 В напряжения

Тихомиров Сергей пишет:

1. В руководстве программиста в п.4.5.1. "Корректировка данных АЦП" достаточно подробно расписано как именно корректируются входные данные с АЦП. Даже приведены конкретные примеры. В каком именно месте не понятна арифметика корректировки?
2. Дополнительный вопрос совсем не понял...

Если в логическом номере канала АЦП индекс коэффициента усиления равен j, то корректировочные коэффициенты этого логического канала могут быть получены следующим об-разом: смещение: Adc.OffsetCalibration[j]; масштаб: Adc.ScaleCalibration[j]. - вот понимаю, что для нашего примера будут корректировочные коэффициенты Adc.OffsetCalibration[0], Adc.ScaleCalibration[0], т.к. коэф. усиления равен 1 согласно таблице 5 в руководстве, программно его индекс равен 0.
В общем виде процедура корректировки отсчѐтов АЦП выполняется по следующей формуле:
Y = (X+A)*B,       // формула понятная, не сложная
где:
X – некорректированные данные АЦП [в отсчѐтах АЦП],  // полученные значения с выполнения функции ADC_Sample
Y – скорректированные данные АЦП [в отсчѐтах АЦП],    // получатся после выполнения всех действий
A – коэффициент смещения нуля [в отсчѐтах АЦП],         // не совсем понял как получить, хотя подозреваю, что получить можно после корректировки нуля
B – коэффициент масштаба [безразмерный].                   // тоже не совсем понимаю как получается.
Например, пусть со второго канала АЦП, настроенного на входной диапазон ±2.5 В (индекс коэффициента усиления равен 1 или ADC_INPUT_RANGE_2500mV_E140), получены следующие данные: X1 = 1000, X2 = –1000 и X3 = 0. Тогда коэффициенты и скорректированные данные можно представить так: A = Adc.OffsetCalibration[1]; B = Adc.ScaleCalibration[1]; Y1 = (A+1000)*B, Y2 = (A-1000)*B, Y3 = A*B.

Может я глупый, но вводит в ступор Y1, Y2, Y3, как получились данные X1, X2, X3.


Про дополнительный вопрос: на "сырых данных" допустимо ли задать кодовое значение, полученное при опросе АЦП-шкой для одного числа, может не так выразился, программно выглядит так:
if (AdcSample1 > 720 && AdcSample <= 800)
{
    voltage = 1;
}
else if (AdcSample > 800 && AdcSample <= 880)
{
    voltage = 1.1;
}
else if … И так до 8000. Более точная - это задавать диапазон с шагом 8.

19.11.2019 17:40:41
#5

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,477

Re: Корректировка данных АЦП E14-140-М на 10 В напряжения

Так... Давайте ещё раз и медленно...
Пусть X это исходный "сырой" отсчёт, который поступает с АЦП модуля. В Вашем случае это значение получается с помощью функции ADC_SAMPLE(). И именно этот отсчёт должны быть подвергнут корректировке.
Далее пусть:
A – корректировочный коэффициент смещения нуля. В Вашем случае этот коэффициент равен Adc.OffsetCalibration[0].
B – корректировочный коэффициент масштаба. В Вашем случае этот коэффициент равен Adc.ScaleCalibration[0].
Тогда откорректированное значение Y  можно вычислить следующим образом: Y = (X + A) * B.

19.11.2019 20:00:44
#6

Участник
Здесь с 07.11.2019
Сообщений: 6

Re: Корректировка данных АЦП E14-140-М на 10 В напряжения

Вот теперь понял. Спасибо большое за терпение, понимание, что помогли разобраться. Просто как-то запутался с 3 значениями сразу от 2 канала, как так?  yikes
Ещё раз спасибо огромное, что помогли!

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25
Факс: +7 (495) 785-95-14

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск