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

 
 
> Малоресурсный алгоритм измерения температуры
ARV
сообщение Jun 9 2009, 05:03
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



прошу помощи в плане общего алгоритма... лучшей темы для своего вопроса не нашел...

требуется измерять температуру тела человека, при этом процесс измерения от наблюдателя скрыт - никаких цифр никуда не выводится, т.е. человек не может принять решение, что измерение завершено. требуется алгоритм определения того, что температура датчика уже достигла окончательного значения, т.е. процесс измерения завершен. проблем две: алгоритм должен требовать минимум ресурсов и давать верный результат за минимальное время. из дополнительных условий: измерение температуры - АЦП 15 бит (оверсемплинг), измерение 1 раз в секунду.

что сделано сейчас и что не удовлетворяет (псевдо-Си-код)
t2 = 0;
do{
t1 = t2;
pause_1s();
t2 = get_temperature();
} while (t1 != t2);

это дает отличный результат при измерении температуры воды (большая теплоемкость, контакт с датчиком идеальный, быстро его нагревает) - за 15 секунд получается верный результат. для тела человека как правило цикл завершается за 0,3-0,6°С до реальной температуры, что не устраивает. кроме того, процесс длится не менее 30 секунд...

какие будут советы?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
EvgenyNik
сообщение Jul 3 2009, 19:40
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Если взять за основу электрический эквивалент, то:
1. тело человека - источник эдс постоянного тока.
2. датчик - ёмкость конечной величины (конденсатор)
3. теплопроводность от тела к датчику - резистивная проводимость (величина обратная резистивному сопротивлению)
4. окружающая среда - резистивный ток утечки ёмкости (датчика). Пренебрегаем этой утечкой.
Что мы имеем?
При возникновении контакта ёмкость (датчик) начинает заряжаться с постоянной времени RC и т.д.
В нашем же случае при использовании такой модели, мы получаем график роста показаний термометра:
Тд = Тд.н + (Тт - Тд.н)*(1 - exp (- k * t)), где
Тд - текущая температура датчика,
Тд.н. - начальная температура датчика
k - конструктивная постоянная времени (зависит от физ.свойств поверхности тела и датчика)
t - время в секундах.
Можно было бы сделав 2 замера, вычтя начальное значение датчика, расчитать через натуральный логарифм постоянную k и вычислить величину Тт, к которой стремится значение Тд. Но для этого термометр надо включить так, чтобы нагрев датчика не произошёл. Иначе мы получим смещение Тд.н. из-за инерционности датчика. Как правило, термометр вертят в руках, касаясь датчика, да и в вычислении логарифма, а потом и экспоненты - приятного мало в рамках малоресурсного алгоритма.
Предлагаю сделать 3 замера через равные интервалы времени, но на начальном участке нагрева, например в 5, 15 и 25 секунд и воспользоваться свойством экспоненты сохранять отношение текущего приращения к прошлому.
Иначе говоря, отношение (Tд(25) - Тд(15)) / (Тд(15) - Тд(5)) будет справедливо ко всем последующим приращениям, взятым с таким же интервалом времени.
Ну и вот - запускаете итерацию с накоплением результата до тех пор, пока расчётное приращение не станет ниже допустимой погрешности.
P.S. если дрожит младший бит - делайте подряд 8-16 измерений (сравнительно быстро, конечно) и вычисляйте по ним среднее для текущего времени.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 18:05
Рейтинг@Mail.ru


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