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

Измеряю Температуру


Рекомендуемые сообщения

Здравствуйте уважаемые.

Я недавно в теме.

Понадобилось измерить температуру с помощью атмеги8

и всё бы было здорово если бы можно было использовать цифровой датчик. но у меня температура 360 Цельсия

потому придётся выбрать аналоговый датчик температуры (термистор).

может у когонить есть пример кода на с++ (это чтобы не разжёвывать) гугл не помог не или плохо искал

или мои вопросы

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

2. по какому принципу можно получить температуру с аналогового датчика ? про работу АЦП не нужно объяснять мне, смутно но понимаю.

не понимаю что сделать когда я получил напряжение с датчика на АЦП как мне величину этого напряжения перевести в градусы ?

зы: Пишу проект на CodeVisionAVR 3.12 хоть и смотрел уроки на тюбе но атмел студии всё сложнее т.к. там нет мастеров генерации кода. Для меня лично как ламера в AVR это выручает до нельзя тк. мне не оч бы хотелось вникать в тонкости работы с lcd либо adc.

Далее мучаю протеус 8,1

Если необходимо выложу сюда

Спасибо за ваше время и ответы.

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

Зависимость указывается в даташите на термистор.

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

Вот пример для одного из NTC NTC-MF52AT 10K 3950 1%.pdf

В соответствии со всем этим ты связываешь температуру и выходное значение АЦП в МК.

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

Ага буду искать датащит с табличкой зависимости t от r

понял про плечи сейчас реализую

но у меня есть lcd на котором не плохо было бы отображать текущую температуру.... и тут у меня ступор

как в коде это реализовать ?

приходит на ум только тупой способ какой то, если напряжение ацп = x тогда t = у и куча куча таких условий.....

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

Может существует другой способ ? формула или чтото такое

Изменено пользователем binarick
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Если зависимость можно описать формулой - используй формулу. Если нет, то можешь брать два ближайших значения и аппроксимировать.

Например точно известно, что при 110° сопротивление 1кОм, а при 111° 0.9кОм. Тогда при сопротивлении 0.91кОм будет 110.9°.

То есть тут уже чистая математика и возможности твоего АЦП.

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Что вам даст датчик с линейной зависимостью? На выходе делителя напряжение все равно не будет линейным.

Возьмите платиновый терморезистор типа PT-100 http://e-voron.dp.ua/catalog/015715 , высокая точность, сопротивление меняется по формуле Rt = Rо (1+0,00385 t) http://www.micropik.com/PDF/pt100.pdf

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

IMHO на 360 градусов уже хромель-копелевую термопару нужно применять, а это уже специализированая обвязка. Термисторы такие бывают, но неизвестно насколько они легкодоставаемы и полагаю, что стОят они немало. Тот-же PT100 ~ 1000руб. А линейность - нелинейность, всё-равно калибровать нужно, ну или по таблице выборку делать с аппроксимацией, как уже написали.

Изменено пользователем shindbad
Ссылка на комментарий
Поделиться на другие сайты

Что вам даст датчик с линейной зависимостью? На выходе делителя напряжение все равно не будет линейным.

Возьмите платиновый терморезистор типа PT-100 http://e-voron.dp.ua/catalog/015715 , высокая точность, сопротивление меняется по формуле Rt = Rо (1+0,00385 t) http://www.micropik.com/PDF/pt100.pdf

предполагаю что формула на линейную зависимость будет проще

Вот спасибо за датчик. ща поискаю где добыть можно ли. жесть до 850 цельсия )))

IMHO на 360 градусов уже хромель-копелевую термопару нужно применять, а это уже специализированая обвязка. Термисторы такие бывают, но неизвестно насколько они легкодоставаемы и полагаю, что стОят они немало. Тот-же PT100 ~ 1000руб. А линейность - нелинейность, всё-равно калибровать нужно, ну или по таблице выборку делать с аппроксимацией, как уже написали.

деньги не имеют значения.

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

насчёт легкодоступности пока абсолютно всё что когда либо требовалось покупал на алиэкспрессе.

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

IMHO на 360 градусов уже хромель-копелевую термопару нужно применять, а это уже специализированая обвязка. Термисторы такие бывают, но неизвестно насколько они легкодоставаемы и полагаю, что стОят они немало. Тот-же PT100 ~ 1000руб. А линейность - нелинейность, всё-равно калибровать нужно, ну или по таблице выборку делать с аппроксимацией, как уже написали.

Не знаю, где вы увидели 1000 рублей, 2 доллара за датчик в виде резистора, 6 - в виде щупа http://www.aliexpress.com/premium/pt100.html?ltype=wholesale&d=y&origin=y&SearchText=pt100&initiative_id=AS_20150211011757&isViewCP=y&catId=523

Вот спасибо за датчик. ща поискаю где добыть можно ли. жесть до 850 цельсия )))

Не дефицит. И калибровать не прийдется, раз дана точность, то будет соответствовать формуле (и таблице соотв)

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

Да примерно там-же:

http://russian.alibaba.com/goods/pt100-temperature-sensor.html

И как-то мне слабо верится, что "платиновый" датчик стоимостью $2-6, вообще содержит платину. Уж что-что, а писать китайцы хорошо умеют.

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

Я попробую эти дешманские штуки потом отпишусь если не забуду

статейку нарыл по моей темке как раз

http://www.rlocman.r....html?di=151518

как обидно что там код на ассемблере.... я в нём ни бумбум.....

был бы хорошим велосипедом еслиб на с++

Изменено пользователем binarick
Ссылка на комментарий
Поделиться на другие сайты

поищите самодельные паяльные станции. там и датчики. там и исходники....

Люблю українську природу, горячий борщ, холодну воду, i бабу товсту як колоду, i лiс, i поле, i ставок, i повну пазуху цицьок А ще я люблю булку з маком, вино, горiлку, пиво з раком, люблю дiтей, батькiв, сiм'ю, та i себе трішечки люблю.

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

Поищи в гугле самодельную паяльную станцию на атмеге8.

Там и схема и прога на СИ. И обвязки для термопары один операционник.

И термопару самому можно сделать.

Вот и опоздал уже.

Изменено пользователем croc19
Ссылка на комментарий
Поделиться на другие сайты

ищу пока только на термопарах попадаются схемки (нада кстати подумать в этом направлении)

хотя в коде как я понимаю различий не будет

если правильно понимаю термопара это тотже термистор но с обвязкой в виде усилителя

Изменено пользователем binarick
Ссылка на комментарий
Поделиться на другие сайты

вот функция кусочно-линейной аппроксимации термистора

uint32_t TempConvert (uint32_t T)
{
if (T<545) return 0;
if (T < 652) return ((T-545)*1000/215+2000)/10;
if (T < 783) return ((T-652)*1000/261+2500)/10;
if (T < 929) return ((T-783)*1000/293+3000)/10;
if (T < 1091)return ((T-929)*1000/324+3500)/10;
if (T < 1266)return ((T-1091)*1000/349+4000)/10;
if (T < 1453)return ((T-1266)*1000/374+4500)/10;
if (T < 1652)return ((T-1453)*1000/398+5000)/10;
if (T < 1858)return ((T-1652)*1000/412+5500)/10;
if (T < 2067)return ((T-1858)*1000/418+6000)/10;
if (T < 2277)return ((T-2067)*1000/419+6500)/10;
if (T < 2485)return ((T-2277)*1000/416+7000)/10;
if (T < 2688)return ((T-2485)*1000/406+7500)/10;
if (T < 2885)return ((T-2688)*1000/393+8000)/10;
if (T < 3072)return ((T-2885)*1000/374+8500)/10;
}

сигнал с делителя напряжения.

на примере первой строки if

При 20С сигнал на АЦП (расчетный по даташиту) 545 мВ, при 25С 652 мВ. T - текущее значение на ЦАП, 1000 просто коэффициент, чтобы математика была целочисленной, 215 - это значение в миливольтах на градус в этом промежутке (652-545)/5 умноженное на 10 чтобы избавиться опять же от десятичной точки. 2000 это 20 градусов умноженые на 100, так как у нас все в одном масштабе. / 10, чтобы получить значение в градусах с одним знаком после запятой (например 24,5). Идея понятна? То есть эта строчка на выходе дает нечто похожее на к примеру 245 если температура 24,5. Потом мы это число при помощи sprintf переводим в строку, добавляем точку куда надо, плюсуем в конец символ "С" и выводим как строковую константу на дисплей. Получается так как на фото. Нижняя строка (символ С не добавлял, место для отладки экономил, чтобы 3 температуры поместились ровно)

функция вывода на экран выглядит так

sprintf(str_buf_V, "%03u", _Actual.Temp1);
str_buf[0] = str_buf_V[0];
str_buf[1] = str_buf_V[1];
str_buf[2] = 0x2E;
str_buf[3] = str_buf_V[2];
str_buf[4] = str_buf_V[3];
MT_WH1602_SetDDRAMAddress(0x41);
while (MT_WH1602_ReadBusy()!=FALSE);
lcd_write_str(str_buf);

думаю тут комментарии излишни. Немного не феньшуй конечно, но работает очень быстро. А для меня главное не красота методов, а скорость и эффективность

комментария стоит только эта строка. В ней копируется завершающий ноль ('\0'), чтобы вывод на экран знал где конец строки

str_buf[4] = str_buf_V[3];

так что не стоит бояться кривой характеристики термисторов, просто надо уметь грамотно ей пользоваться и уметь совершать простейшие математические преобразования

post-183933-0-11029900-1423664571_thumb.jpg

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

вот функция кусочно-линейной аппроксимации термистора
Проще формулу вычислить по точкам и забить её в программу.

Вот Ваша зависимость :

y = -3E-05x2 + 0,3671x + 25,119

Где

y - температура, умноженная на 10.

x - значение в милливольтах на АЦП

А вот график в екселе с функцией :Книга1.rar

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

да конечно мы в курсе за формулы аппроксимации, НО

проще то проще, и моя функция выполнится условно за 10 тактов и займет 10 байт, а ваша будет выполняться 2000 тактов и займет килобайта два. Угадайте почему

не все что красиво на бумаге красиво ложится на реальный камень

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

И что ? Вы куда-то торопитесь и выводите информацию на дисплей с скоростью 10000 раз в секунду ?

По поводу памяти. Тут ещё спорный вопрос, что займёт больше места, функция или Ваша "простыня"...

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

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

Можете в принципе делать как хотите, если все устраивает. Я уже все эти методы давно испробовал, поэтому гдето обхожусь простынями, а гдето полиномами. Зависит конечно от задачи. Но на всякий пожарный стараюсь все таки ресурсы экономить. И в моих программах вы не увидите в процедурном коде функций типа delay_ms или наподобие. У меня весь код пролетается насквозь за один проход без остановок и за гарантированное время (касается и антидребезга и всяких звуоквых сигналов, и даже вывода на дисплей), даже если ресурсов камня с избытком

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...