реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Измерение температуры терморезистором., Алгоритм
Stanislav_S
сообщение Jun 4 2009, 16:40
Сообщение #1


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



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


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
Designer56
сообщение Jun 4 2009, 17:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 932
Регистрация: 13-10-06
Из: Уфа
Пользователь №: 21 290



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


--------------------
"...Дьяволу ведомо многое не потому, что он- Дьявол, а потому, что он стар..."
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Jun 4 2009, 17:49
Сообщение #3


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(Designer56 @ Jun 4 2009, 21:24) *
Сейчас на вскидку не помнится таблицы из Гост на терморезисторы, но вроде бы для такой точности (3% приведенной к диапазону погрешности) корректировать нелинейность характеристики не имеет смысла.

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


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
Designer56
сообщение Jun 4 2009, 18:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 932
Регистрация: 13-10-06
Из: Уфа
Пользователь №: 21 290



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

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


--------------------
"...Дьяволу ведомо многое не потому, что он- Дьявол, а потому, что он стар..."
Go to the top of the page
 
+Quote Post
Microwatt
сообщение Jun 4 2009, 19:47
Сообщение #5


Гуру
******

Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802



Цитата(Stanislav_S @ Jun 4 2009, 20:49) *
Черт, неправильно тему назвал, мерять надо термистором crying.gif вряд ли на него есть готовые таблицы smile.gif

Проще пареной репы.
KTY 82/83
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Jun 4 2009, 20:37
Сообщение #6


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(Microwatt @ Jun 4 2009, 23:47) *
Проще пареной репы.
KTY 82/83

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


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 4 2009, 20:38
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Stanislav_S @ Jun 4 2009, 19:40) *
собственно вопрос как построить таблицу наиболее оптимальным образом, либо есть какие то другие варианты решения?

1. Выберите терморезистор.
2. Посмотрите в даташит и найдите там таблицу.
3. Выберите нужный интервал температуры между значениями таблицы.
4. Напишите процедуру кусочно-линейной аппроксимации.

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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Jun 4 2009, 21:34
Сообщение #8


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(Dog Pawlowa @ Jun 5 2009, 00:38) *
1. Выберите терморезистор.
2. Посмотрите в даташит и найдите там таблицу.
3. Выберите нужный интервал температуры между значениями таблицы.
4. Напишите процедуру кусочно-линейной аппроксимации.

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

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


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 4 2009, 22:32
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Stanislav_S @ Jun 5 2009, 03:34) *
далее разбиваю на диапазоны и вызываю функцию апроксимации с заранее посчитаными коэфициентами 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. Соответственно таблица аппроксимации не менее чем из двух строк должна состоять.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 5 2009, 06:30
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Stanislav_S @ Jun 5 2009, 00:34) *
Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил?

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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
barabek
сообщение Jun 5 2009, 11:29
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Stanislav_S @ Jun 5 2009, 08:34) *
Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил?

Можно методом половинного деления ( или как , забыл :-), этот термин называется ) . Как в ацп. Тогда на 32 диапазона нужно 5 проверок для выбора нужных соседних значении из таблицы
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jun 5 2009, 13:57
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



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

Можно использовать не линейную, а параболическую интерполяцию. Это позволить хранить гораздо меньше табличных данных при той-же точности. И это не сильно сложнее/дольше, если таки хранить коэффициенты. Там нужно будет вычислять не только отклонение от ближайшей табличной точки, но и квадрат этого отклонения. И помножать и отклонение и его квадрат на соотв-е коэффициенты. А вот эти коэффициенты посчитать 1 раз.
Вообще рекомендую сначала эту задачу решить на компьютере, а уже потом переносить в контроллер.
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Jun 5 2009, 16:41
Сообщение #13


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(galjoen @ Jun 5 2009, 17:57) *
Методом половинного деления (в пределах между двумя табличными точками) это будет та-же линейная интерполяция только с ограниченной, кол-вом приближений, точностью. Преимущество только в том, что не будет деления (деление на 2 заменяется сдвигом).

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

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


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jun 5 2009, 18:10
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Stanislav_S @ Jun 5 2009, 20:41) *
А поподробнее можно? А то я эту интерполяцию подзабыл если честно.

Так вот и есть повод вспомнить (самому). И уже после этого задавать конкретные вопросы...
Go to the top of the page
 
+Quote Post
barabek
сообщение Jun 6 2009, 02:33
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(galjoen @ Jun 6 2009, 00:57) *
Методом половинного деления (в пределах между двумя табличными точками) это будет та-же линейная интерполяция только с ограниченной, кол-вом приближений, точностью. Преимущество только в том, что не будет деления (деление на 2 заменяется сдвигом).

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

Цитата(Stanislav_S @ Jun 6 2009, 03:41) *
А поподробнее можно? А то я эту интерполяцию подзабыл если честно.

Берете EXEL и строите линии тренда с отображением формулы на кривой. Заодно можно рационально разбить диапазон на поддиапазоны smile.gif. Там и вспомните.
Но такой подход возможен, если потом не потребуется калибровка на месте.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st July 2025 - 04:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01493 секунд с 7
ELECTRONIX ©2004-2016