Перейти к содержанию
    

Нелинейную характеристику преобразовать в линейную.

Здравствуйте все. 

Есть делитель. Верхнее плече которого терморезистор, допустим с линейной характеристикой, нижнее плече резистор. Выходная характеристика соответственно будет Rt/R.

И она не линейна.Это напряжение поступает в АЦП контроллера. Как линеаризовать данную характеристику, какую формулу?.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можете пояснить, что Вы имеете в виду под преобразованием этой характеристики в линейную?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, khlenar said:

Как линеаризовать данную характеристику, какую формулу?.

Можно взять каноническое уравнение прямой по двум точкам. Для двух температур T1 и T2 получить коды АЦП C1, C2. Использовать координаты точек T1, C1 и T2, C2 для нахождения любой T по любому коду C.

Мы так делаем. Всё работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 минут назад, arhiv6 сказал:

Можете пояснить, что Вы имеете в виду под преобразованием этой характеристики в линейную?

Для измерения температуры

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, haker_fox сказал:

Можно взять каноническое уравнение прямой по двум точкам. Для двух температур T1 и T2 получить коды АЦП C1, C2. Использовать координаты точек T1, C1 и T2, C2 для нахождения любой T.

Мы так делаем. Всё работает.

Пока делаю так. Разделил отрезок данных на 10 кусков. В каждом куске свой коэффициент. Работает, но не совсем точно. Нужно на большее количество делить. Как то не красиво.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, _pv сказал:

U(Rt) = Vref * R / (Rt + R)
Rt(U) = (Vref - U) * R / U
 

Надо попробовать. С начало переварить)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, khlenar сказал:

Пока делаю так. Разделил отрезок данных на 10 кусков. В каждом куске свой коэффициент. Работает, но не совсем точно. Нужно на большее количество делить. Как то не красиво.

Когда-то в 77 году я делал линеаризатор на ячейках "идеальный диод". Так вот, в ГОСТах были ошибки в таблицах, особенно они выделялись для малых температур...

Ну и не забудьте, что нужна "обратная кривая"... Когда в 3-х квадрантах нарисуете, то станет понятно...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, khlenar said:

Пока делаю так. Разделил отрезок данных на 10 кусков. В каждом куске свой коэффициент.

возьмите excel, забейте в него две колонки, посчитанные или измеренные - напряжение (ну или сразу код АЦП) и сопротивление (ну или сразу температуру).

постройте график сопротивления (температуры) от напряжения,  натяните на него полином нужной степени.

подставляете в него измеренное напряжение - получаете температуру (сопротивление).

lin.thumb.png.005f497a81cf180fd27e3f1286047d7d.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, _pv сказал:

возьмите excel...

 

Да, в Exel пробую. В слепую правда). С математикой туговато к сожалению.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, khlenar said:

Да, в Exel пробую. В слепую правда). 

Если там стандартный термистор то можно считать по стандартной формуле

  #define   B1  (3988.0f)
  #define   r0  (10000.0f)
  #define  ADC_PREC (4096.0f)
  float r;
  r = val * 10000.0f / ((ADC_PREC-1) - val);
  r = (25 + 273.15f) / ((logf(r / r0) * (25.0f + 273.15f)) / B1 + 1) - 273.15f;

val - показания АЦП
r0 - сопротивление постоянного резистора
ADC_PREC - диапазон АЦП
B1 - узнаем из даташита не термистор

Да, только постоянный резистор в верхнем плече, а не в нижнем.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, AlexandrY сказал:

Если там стандартный термистор то можно считать по стандартной формуле


  #define   B1  (3988.0f)
  #define   r0  (10000.0f)
  #define  ADC_PREC (4096.0f)
  float r;
  r = val * 10000.0f / ((ADC_PREC-1) - val);
  r = (25 + 273.15f) / ((logf(r / r0) * (25.0f + 273.15f)) / B1 + 1) - 273.15f;

val - показания АЦП
r0 - сопротивление постоянного резистора
ADC_PREC - диапазон АЦП
B1 - узнаем из даташита не термистор

 

 

 

Отлично. А термистор включен в плече делителя(делимого)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 minutes ago, khlenar said:

Как то не красиво.

А вам какая точность нужна? Вы попросили линеаризацию, и я привёл вам пример линейной функции для всего диапазона. Если разбивать на куски, то это кусочно-линейная аппроксимация. Можно использовать подход, предложенный уважаемым @AlexandrY.

Правда я бы включил термистор в низ, а сверху место резистора поставил бы источник тока.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, haker_fox сказал:

А вам какая точность нужна? Вы попросили линеаризацию, и я привёл вам пример линейной функции для всего диапазона. Если разбивать на куски, то это кусочно-линейная аппроксимация. Можно использовать подход, предложенный уважаемым @AlexandrY.

У меня не линейная характеристика. По двум точкам данных будет оочень большая погрешность. То, что предложил AlexandrY, больше похоже на правду. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...