Stanislav_S 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Стоит задача измерить температуру терморезистором, точность 3 градуса устроит, диапазон 0 - 100 градусов. Собственно интересуют как люди решают сию задачу. воевать с логарифмами не хочется посему наверно остается табличный путь, собственно вопрос как построить таблицу наиболее оптимальным образом, либо есть какие то другие варианты решения? Памяти не очень много, поэтому строить таблицу на всю шкалу АЦП (10 - бит) не очень хочется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Designer56 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Сейчас на вскидку не помнится таблицы из Гост на терморезисторы, но вроде бы для такой точности (3% приведенной к диапазону погрешности) корректировать нелинейность характеристики не имеет смысла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Сейчас на вскидку не помнится таблицы из Гост на терморезисторы, но вроде бы для такой точности (3% приведенной к диапазону погрешности) корректировать нелинейность характеристики не имеет смысла. Черт, неправильно тему назвал, мерять надо термистором :crying: вряд ли на него есть готовые таблицы :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Designer56 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Так у термистора разброс характеристик от экземпляра к экземпляру будет +- километр.... Кстати, для вашего диапазона температур вполне подойдет полупроводниковый датчик- только простой, без АЦП и интерфейса, в металлостеклянном корпусе ТО 18. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Microwatt 2 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Черт, неправильно тему назвал, мерять надо термистором :crying: вряд ли на него есть готовые таблицы :) Проще пареной репы. KTY 82/83 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Проще пареной репы. KTY 82/83 Неплохо, но тип термистора задан заказчиком и менять его нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба собственно вопрос как построить таблицу наиболее оптимальным образом, либо есть какие то другие варианты решения? 1. Выберите терморезистор. 2. Посмотрите в даташит и найдите там таблицу. 3. Выберите нужный интервал температуры между значениями таблицы. 4. Напишите процедуру кусочно-линейной аппроксимации. Я использую интервал 1 градус для точных измерений и 5 градусов для неточных. Успехов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба 1. Выберите терморезистор. 2. Посмотрите в даташит и найдите там таблицу. 3. Выберите нужный интервал температуры между значениями таблицы. 4. Напишите процедуру кусочно-линейной аппроксимации. Я использую интервал 1 градус для точных измерений и 5 градусов для неточных. Успехов. А небольшой пример можно? Собственно что смущает, посчитать напряжение на входе АЦП я могу, соответственно могу посчитать код из АЦП, далее разбиваю на диапазоны и вызываю функцию апроксимации с заранее посчитаными коэфициентами k и b для данного диапазона примерно так? Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба далее разбиваю на диапазоны и вызываю функцию апроксимации с заранее посчитаными коэфициентами 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. Соответственно таблица аппроксимации не менее чем из двух строк должна состоять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил? Ну не Вы же будете проверять, а микроконтроллер :) Температурные процессы - достаточно медленные, всегда можно делать расчет температуры в такое место, где он не мешает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба Просто в таком случае кода будет много одних проверок 20 штук ( если по 5 градусов делить0, или я что то упустил? Можно методом половинного деления ( или как , забыл :-), этот термин называется ) . Как в ацп. Тогда на 32 диапазона нужно 5 проверок для выбора нужных соседних значении из таблицы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба Методом половинного деления (в пределах между двумя табличными точками) это будет та-же линейная интерполяция только с ограниченной, кол-вом приближений, точностью. Преимущество только в том, что не будет деления (деление на 2 заменяется сдвигом). Можно использовать не линейную, а параболическую интерполяцию. Это позволить хранить гораздо меньше табличных данных при той-же точности. И это не сильно сложнее/дольше, если таки хранить коэффициенты. Там нужно будет вычислять не только отклонение от ближайшей табличной точки, но и квадрат этого отклонения. И помножать и отклонение и его квадрат на соотв-е коэффициенты. А вот эти коэффициенты посчитать 1 раз. Вообще рекомендую сначала эту задачу решить на компьютере, а уже потом переносить в контроллер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба Методом половинного деления (в пределах между двумя табличными точками) это будет та-же линейная интерполяция только с ограниченной, кол-вом приближений, точностью. Преимущество только в том, что не будет деления (деление на 2 заменяется сдвигом). Можно использовать не линейную, а параболическую интерполяцию. Это позволить хранить гораздо меньше табличных данных при той-же точности. И это не сильно сложнее/дольше, если таки хранить коэффициенты. Там нужно будет вычислять не только отклонение от ближайшей табличной точки, но и квадрат этого отклонения. И помножать и отклонение и его квадрат на соотв-е коэффициенты. А вот эти коэффициенты посчитать 1 раз. Вообще рекомендую сначала эту задачу решить на компьютере, а уже потом переносить в контроллер. А поподробнее можно? А то я эту интерполяцию подзабыл если честно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба А поподробнее можно? А то я эту интерполяцию подзабыл если честно. Так вот и есть повод вспомнить (самому). И уже после этого задавать конкретные вопросы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 6 июня, 2009 Опубликовано 6 июня, 2009 · Жалоба Методом половинного деления (в пределах между двумя табличными точками) это будет та-же линейная интерполяция только с ограниченной, кол-вом приближений, точностью. Преимущество только в том, что не будет деления (деление на 2 заменяется сдвигом). может мы о разном говорим? Я говорю о поиске поддиапазона. Вопрос был в поиске соседних ячеек таблицы (не внутри этого поддиапазона). Автор вроде собирается их все последовательно перебирать. Я же говорю вот о чем. Допустим имеем 32 строки в таблице (неважно линейно или нелинейно они расположены относительно температуры или сопротивления). Проверяем середину таблицы на больше-меньше текущему R. Далее выбранную половину еще пополам и т.д. А уже после окончания поиска соседних ячеек пусть делает что угодно - хоть линейную, хоть нелинейную интерполяцию по коэффициентам границ поддиапазона, все зависит сколько он будет хранить коэффициентов в столбцах таблицы (сколько мерный будет массив) А поподробнее можно? А то я эту интерполяцию подзабыл если честно. Берете EXEL и строите линии тренда с отображением формулы на кривой. Заодно можно рационально разбить диапазон на поддиапазоны :). Там и вспомните. Но такой подход возможен, если потом не потребуется калибровка на месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться