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

Измерение температуры терморезистором.

Стоит задача измерить температуру терморезистором, точность 3 градуса устроит, диапазон 0 - 100 градусов. Собственно интересуют как люди решают сию задачу. воевать с логарифмами не хочется посему наверно остается табличный путь, собственно вопрос как построить таблицу наиболее оптимальным образом, либо есть какие то другие варианты решения? Памяти не очень много, поэтому строить таблицу на всю шкалу АЦП (10 - бит) не очень хочется.

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


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

Сейчас на вскидку не помнится таблицы из Гост на терморезисторы, но вроде бы для такой точности (3% приведенной к диапазону погрешности) корректировать нелинейность характеристики не имеет смысла.

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


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

Сейчас на вскидку не помнится таблицы из Гост на терморезисторы, но вроде бы для такой точности (3% приведенной к диапазону погрешности) корректировать нелинейность характеристики не имеет смысла.

Черт, неправильно тему назвал, мерять надо термистором :crying: вряд ли на него есть готовые таблицы :)

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


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

Так у термистора разброс характеристик от экземпляра к экземпляру будет +- километр....

 

Кстати, для вашего диапазона температур вполне подойдет полупроводниковый датчик- только простой, без АЦП и интерфейса, в металлостеклянном корпусе ТО 18.

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


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

Черт, неправильно тему назвал, мерять надо термистором :crying: вряд ли на него есть готовые таблицы :)

Проще пареной репы.

KTY 82/83

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


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

Проще пареной репы.

KTY 82/83

Неплохо, но тип термистора задан заказчиком и менять его нельзя.

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


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

собственно вопрос как построить таблицу наиболее оптимальным образом, либо есть какие то другие варианты решения?

1. Выберите терморезистор.

2. Посмотрите в даташит и найдите там таблицу.

3. Выберите нужный интервал температуры между значениями таблицы.

4. Напишите процедуру кусочно-линейной аппроксимации.

 

Я использую интервал 1 градус для точных измерений и 5 градусов для неточных.

Успехов.

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


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

1. Выберите терморезистор.

2. Посмотрите в даташит и найдите там таблицу.

3. Выберите нужный интервал температуры между значениями таблицы.

4. Напишите процедуру кусочно-линейной аппроксимации.

 

Я использую интервал 1 градус для точных измерений и 5 градусов для неточных.

Успехов.

А небольшой пример можно? Собственно что смущает, посчитать напряжение на входе АЦП я могу, соответственно могу посчитать код из АЦП, далее разбиваю на диапазоны и вызываю функцию апроксимации с заранее посчитаными коэфициентами k и b для данного диапазона примерно так? Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил?

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


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

далее разбиваю на диапазоны и вызываю функцию апроксимации с заранее посчитаными коэфициентами k и b для данного диапазона примерно так? Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил?
В таблице должны лежать не "заранее посчитаные коэфициенты k и b", а экспериментально полученные данные: сопротивление (либо напряжение, если ток через терморезистор стабилизирован) и температура. Расчет по таблице ведется так

Temp=(T[idx]-T[idx-1])/(R[idx]-R[idx-1])*(Rval-R[idx-1])+T[idx-1],

где Rval - входной параметр для процедуры кусочно-линейной аппроксимации, Temp - результат, а T и R это значения из таблицы, взятые со смещением idx так, чтобы R[idx]>=Rval>R[idx-1], либо R[idx]>Rval>=R[idx-1]. Для ускорения перебора значений R можно держать значение idx в локальной переменной типа static. Если при переборе упираемся в границы таблицы, то принимаем вверху таблицы idx=TBLMAXSIZE-1, внизу: idx-1=0. Соответственно таблица аппроксимации не менее чем из двух строк должна состоять.

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


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

Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил?

Ну не Вы же будете проверять, а микроконтроллер :) Температурные процессы - достаточно медленные, всегда можно делать расчет температуры в такое место, где он не мешает.

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


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

Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил?

Можно методом половинного деления ( или как , забыл :-), этот термин называется ) . Как в ацп. Тогда на 32 диапазона нужно 5 проверок для выбора нужных соседних значении из таблицы

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


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

Методом половинного деления (в пределах между двумя табличными точками) это будет та-же линейная интерполяция только с ограниченной, кол-вом приближений, точностью. Преимущество только в том, что не будет деления (деление на 2 заменяется сдвигом).

 

Можно использовать не линейную, а параболическую интерполяцию. Это позволить хранить гораздо меньше табличных данных при той-же точности. И это не сильно сложнее/дольше, если таки хранить коэффициенты. Там нужно будет вычислять не только отклонение от ближайшей табличной точки, но и квадрат этого отклонения. И помножать и отклонение и его квадрат на соотв-е коэффициенты. А вот эти коэффициенты посчитать 1 раз.

Вообще рекомендую сначала эту задачу решить на компьютере, а уже потом переносить в контроллер.

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


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

Методом половинного деления (в пределах между двумя табличными точками) это будет та-же линейная интерполяция только с ограниченной, кол-вом приближений, точностью. Преимущество только в том, что не будет деления (деление на 2 заменяется сдвигом).

 

Можно использовать не линейную, а параболическую интерполяцию. Это позволить хранить гораздо меньше табличных данных при той-же точности. И это не сильно сложнее/дольше, если таки хранить коэффициенты. Там нужно будет вычислять не только отклонение от ближайшей табличной точки, но и квадрат этого отклонения. И помножать и отклонение и его квадрат на соотв-е коэффициенты. А вот эти коэффициенты посчитать 1 раз.

Вообще рекомендую сначала эту задачу решить на компьютере, а уже потом переносить в контроллер.

А поподробнее можно? А то я эту интерполяцию подзабыл если честно.

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


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

А поподробнее можно? А то я эту интерполяцию подзабыл если честно.

Так вот и есть повод вспомнить (самому). И уже после этого задавать конкретные вопросы...

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


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

Методом половинного деления (в пределах между двумя табличными точками) это будет та-же линейная интерполяция только с ограниченной, кол-вом приближений, точностью. Преимущество только в том, что не будет деления (деление на 2 заменяется сдвигом).

может мы о разном говорим? Я говорю о поиске поддиапазона. Вопрос был в поиске соседних ячеек таблицы (не внутри этого поддиапазона). Автор вроде собирается их все последовательно перебирать. Я же говорю вот о чем. Допустим имеем 32 строки в таблице (неважно линейно или нелинейно они расположены относительно температуры или сопротивления). Проверяем середину таблицы на больше-меньше текущему R. Далее выбранную половину еще пополам и т.д. А уже после окончания поиска соседних ячеек пусть делает что угодно - хоть линейную, хоть нелинейную интерполяцию по коэффициентам границ поддиапазона, все зависит сколько он будет хранить коэффициентов в столбцах таблицы (сколько мерный будет массив)

 

А поподробнее можно? А то я эту интерполяцию подзабыл если честно.

Берете EXEL и строите линии тренда с отображением формулы на кривой. Заодно можно рационально разбить диапазон на поддиапазоны :). Там и вспомните.

Но такой подход возможен, если потом не потребуется калибровка на месте.

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


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

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

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

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

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

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

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

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

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

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