binarick Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 Здравствуйте уважаемые. Я недавно в теме. Понадобилось измерить температуру с помощью атмеги8 и всё бы было здорово если бы можно было использовать цифровой датчик. но у меня температура 360 Цельсия потому придётся выбрать аналоговый датчик температуры (термистор). может у когонить есть пример кода на с++ (это чтобы не разжёвывать) гугл не помог не или плохо искал или мои вопросы 1. у аналоговых датчиков линейная зависимость сопротивления от температуры ? 2. по какому принципу можно получить температуру с аналогового датчика ? про работу АЦП не нужно объяснять мне, смутно но понимаю. не понимаю что сделать когда я получил напряжение с датчика на АЦП как мне величину этого напряжения перевести в градусы ? зы: Пишу проект на CodeVisionAVR 3.12 хоть и смотрел уроки на тюбе но атмел студии всё сложнее т.к. там нет мастеров генерации кода. Для меня лично как ламера в AVR это выручает до нельзя тк. мне не оч бы хотелось вникать в тонкости работы с lcd либо adc. Далее мучаю протеус 8,1 Если необходимо выложу сюда Спасибо за ваше время и ответы. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 Зависимость указывается в даташите на термистор. Напряжение на АЦП ты получаешь с делителя напряжения, одним из плечей которого является термистор. Это напряжение однозначно зависит от напряжения перед делителем (должно быть постоянным и стабильным) и сопротивления термистора. Сопротивление однозначно зависит от температуры и калибровка (указание сопротивления для конкретных температур) тоже указана в даташите. Вот пример для одного из NTC NTC-MF52AT 10K 3950 1%.pdf В соответствии со всем этим ты связываешь температуру и выходное значение АЦП в МК. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
binarick Опубликовано 11 февраля, 2015 Автор Поделиться Опубликовано 11 февраля, 2015 (изменено) Ага буду искать датащит с табличкой зависимости t от r понял про плечи сейчас реализую но у меня есть lcd на котором не плохо было бы отображать текущую температуру.... и тут у меня ступор как в коде это реализовать ? приходит на ум только тупой способ какой то, если напряжение ацп = x тогда t = у и куча куча таких условий..... в этом есть минус, что температура будет показываться ступенчато и чтобы ступени уменьшить нужно будет ещё больше если. Может существует другой способ ? формула или чтото такое Изменено 11 февраля, 2015 пользователем binarick 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Vascom Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 Если зависимость можно описать формулой - используй формулу. Если нет, то можешь брать два ближайших значения и аппроксимировать. Например точно известно, что при 110° сопротивление 1кОм, а при 111° 0.9кОм. Тогда при сопротивлении 0.91кОм будет 110.9°. То есть тут уже чистая математика и возможности твоего АЦП. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
binarick Опубликовано 11 февраля, 2015 Автор Поделиться Опубликовано 11 февраля, 2015 Эх беда. попытаюсь найти датчик с линейной зависимостью если такой вообще существует. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Kotofot Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 Что вам даст датчик с линейной зависимостью? На выходе делителя напряжение все равно не будет линейным. Возьмите платиновый терморезистор типа PT-100 http://e-voron.dp.ua/catalog/015715 , высокая точность, сопротивление меняется по формуле Rt = Rо (1+0,00385 t) http://www.micropik.com/PDF/pt100.pdf 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
shindbad Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 (изменено) IMHO на 360 градусов уже хромель-копелевую термопару нужно применять, а это уже специализированая обвязка. Термисторы такие бывают, но неизвестно насколько они легкодоставаемы и полагаю, что стОят они немало. Тот-же PT100 ~ 1000руб. А линейность - нелинейность, всё-равно калибровать нужно, ну или по таблице выборку делать с аппроксимацией, как уже написали. Изменено 11 февраля, 2015 пользователем shindbad 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
binarick Опубликовано 11 февраля, 2015 Автор Поделиться Опубликовано 11 февраля, 2015 Что вам даст датчик с линейной зависимостью? На выходе делителя напряжение все равно не будет линейным. Возьмите платиновый терморезистор типа 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руб. А линейность - нелинейность, всё-равно калибровать нужно, ну или по таблице выборку делать с аппроксимацией, как уже написали. деньги не имеют значения. когда вник зачем мост сопротивлений нужен понял что калибровки не избежать. насчёт легкодоступности пока абсолютно всё что когда либо требовалось покупал на алиэкспрессе. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Kotofot Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 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 цельсия ))) Не дефицит. И калибровать не прийдется, раз дана точность, то будет соответствовать формуле (и таблице соотв) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
shindbad Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 Да примерно там-же: http://russian.alibaba.com/goods/pt100-temperature-sensor.html И как-то мне слабо верится, что "платиновый" датчик стоимостью $2-6, вообще содержит платину. Уж что-что, а писать китайцы хорошо умеют. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
binarick Опубликовано 11 февраля, 2015 Автор Поделиться Опубликовано 11 февраля, 2015 (изменено) Я попробую эти дешманские штуки потом отпишусь если не забуду статейку нарыл по моей темке как раз http://www.rlocman.r....html?di=151518 как обидно что там код на ассемблере.... я в нём ни бумбум..... был бы хорошим велосипедом еслиб на с++ Изменено 11 февраля, 2015 пользователем binarick 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
basf1 Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 поищите самодельные паяльные станции. там и датчики. там и исходники.... 0 Люблю українську природу, горячий борщ, холодну воду, i бабу товсту як колоду, i лiс, i поле, i ставок, i повну пазуху цицьок А ще я люблю булку з маком, вино, горiлку, пиво з раком, люблю дiтей, батькiв, сiм'ю, та i себе трішечки люблю. Ссылка на комментарий Поделиться на другие сайты Поделиться
croc19 Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 (изменено) Поищи в гугле самодельную паяльную станцию на атмеге8. Там и схема и прога на СИ. И обвязки для термопары один операционник. И термопару самому можно сделать. Вот и опоздал уже. Изменено 11 февраля, 2015 пользователем croc19 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
binarick Опубликовано 11 февраля, 2015 Автор Поделиться Опубликовано 11 февраля, 2015 (изменено) ищу пока только на термопарах попадаются схемки (нада кстати подумать в этом направлении) хотя в коде как я понимаю различий не будет если правильно понимаю термопара это тотже термистор но с обвязкой в виде усилителя Изменено 11 февраля, 2015 пользователем binarick 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 11 февраля, 2015 Поделиться Опубликовано 11 февраля, 2015 (изменено) вот функция кусочно-линейной аппроксимации термистора 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]; так что не стоит бояться кривой характеристики термисторов, просто надо уметь грамотно ей пользоваться и уметь совершать простейшие математические преобразования Изменено 11 февраля, 2015 пользователем mail_robot 1 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 12 февраля, 2015 Поделиться Опубликовано 12 февраля, 2015 вот функция кусочно-линейной аппроксимации термистораПроще формулу вычислить по точкам и забить её в программу.Вот Ваша зависимость : y = -3E-05x2 + 0,3671x + 25,119 Где y - температура, умноженная на 10. x - значение в милливольтах на АЦП А вот график в екселе с функцией :Книга1.rar 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 12 февраля, 2015 Поделиться Опубликовано 12 февраля, 2015 (изменено) да конечно мы в курсе за формулы аппроксимации, НО проще то проще, и моя функция выполнится условно за 10 тактов и займет 10 байт, а ваша будет выполняться 2000 тактов и займет килобайта два. Угадайте почему не все что красиво на бумаге красиво ложится на реальный камень Изменено 12 февраля, 2015 пользователем mail_robot 0 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 12 февраля, 2015 Поделиться Опубликовано 12 февраля, 2015 И что ? Вы куда-то торопитесь и выводите информацию на дисплей с скоростью 10000 раз в секунду ? По поводу памяти. Тут ещё спорный вопрос, что займёт больше места, функция или Ваша "простыня"... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
si4karuk Опубликовано 12 февраля, 2015 Поделиться Опубликовано 12 февраля, 2015 Я в таких случаях, буру термопару с мультиметра и Lm358... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 12 февраля, 2015 Поделиться Опубликовано 12 февраля, 2015 (изменено) ну обычно контроллер занимается не только выводом на дисплей (который кстати тоже весьма нетороплив). Если все это суммировать, то на реальную задачу процессорного времени уже может остаться совсем маленько. Тут же надо еще учесть, что при работе с ацп желательно бы замутить еще и мультисэмплинг, чтобы показания на экране не скакали, а это мгновенно умножает расход ресурсов кратно показателю сэмплирования. Ну и там еще есть мелочи, недостойные внимания Можете в принципе делать как хотите, если все устраивает. Я уже все эти методы давно испробовал, поэтому гдето обхожусь простынями, а гдето полиномами. Зависит конечно от задачи. Но на всякий пожарный стараюсь все таки ресурсы экономить. И в моих программах вы не увидите в процедурном коде функций типа delay_ms или наподобие. У меня весь код пролетается насквозь за один проход без остановок и за гарантированное время (касается и антидребезга и всяких звуоквых сигналов, и даже вывода на дисплей), даже если ресурсов камня с избытком Изменено 12 февраля, 2015 пользователем mail_robot 0 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.