Странный результат АЦП (Arduino Micro) Термистор KTY 10-6

Где ошибка в следующей схеме/коде?

Некоторое время назад я получил различные датчики. Одним из таких был ктый 10-6 (3 штуки). В начале я не мог найти никаких данных или примеров об этом датчике температуры. Итак, я получил LM35, который было очень просто настроить, так как он линейный. Теперь, спустя несколько месяцев, я наконец нашел правильную таблицу данных и математическое уравнение, чтобы получить правильные значения резисторов.

KTY 10-6 (это ссылка на даташит)

Схема

Выяснил, что он похож на kty81-210

 (Vcc 5+)--+-->2.7k--+-->kty81-110-->(GND)
           |         |
           +->100nF--+-----> ADC0 (Analog Port 0)

Поскольку у меня нет резистора на 2,7 кОм, я использовал резистор на 2200 Ом .

конденсатор 100nf я думаю: IJ63 сверху корпуса. правильный?

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Код

Поскольку этот термистор не является линейным, и я всегда хотел использовать правильную математическую формулу для расчета температуры, это лучшее решение. Основываясь на том, что я прочитал в таблице данных kty10-6, я изменил некоторые значения, такие как резистор и значение бета (а). альфа(b) 0,00788 кажется одинаковой для обоих датчиков.

float resistor = 2200; // changed
float temp = analogRead(A5);
float ukty = 5*temp/1023.0;
float a = 0.00001937*1000; // changed
float b = 0.00788*1000;
float c = 1000-resistor*ukty/(5-ukty);
float delta = b * b - 4 * a * c;
float delta1 = sqrt (delta);
float x2 =(-b + delta1)/(2 * a);
float temp1 = x2 + 25 ;

Верен ли расчет?

Я спрашиваю, потому что даже если в эти дни действительно жарко ... я не думаю, что есть 132-135 ° по Цельсию. Формула для Цельсия.

Даже если я не использую эту формулу, а использую другие более простые расчеты (линейные), я всегда получаю более 130-140°C.

источник1 источник2 источник3

Примечания

Если я прикоснусь к датчику, показания увеличатся... как и ожидалось.

Я проверил на всех аналоговых выводах.

Я использую ардуино микро.

Я использую его с i2cLCD.

Он питается от USB.

Больше ничего не подключено.

Если я измерю резистор на макетной плате, когда все выключено, я прочитаю его как 1200 Ом... крышка?

Почему я получаю значение температуры от 120 до 140?


Необязательный

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

Если кто-то знает, как изменить мою схему для чтения температур от -10/-20 до +40/+50, я был бы очень рад. это будет дублировать резолюцию. думаю в моей зоне температура никогда не опустится ниже -20 и выше +50°С.

Я купил 3 из них, я знаю, что они дешевые. Я знаю о хорошем датчике температуры DS#####, который идеально подходит для микроконтроллеров. Но я хочу, чтобы этот тоже работал.

Информации не нашел - странно. Я поставил Термистор KTY 10-6 и сразу получил это pollin.de/shop/downloads/D180003B.PDF
когда я начал использовать микроконтироллеры ... несколько месяцев назад я искал что-то вроде KIT 10 ... так как текст на этих датчиках температуры очень деградировал. в любом случае, да, я нашел это ... это инфеон ... я также добавил ссылку в пост. это первая ссылка, просто чтобы быть уверенным, что если кто-то прочитает это, у него будет легкий доступ к этому.
Помимо этой красивой ссылки, у вас есть идеи, что я мог сделать не так? я не инженер-электронщик.
Добавлено «это ссылка на таблицу данных» в пост, если кто-то пропустил ее.
Глядя на сопротивление при 25 градусах, вы должны получить сопротивление около 2000 Ом, что дает около 2,4 В на датчике. Быстрая проверка с помощью вольтметра должна подтвердить это. Это должно привести к чтению около 490 в adc. Вставьте это значение в свой расчет и ВРУЧНУЮ работу с вашей программой (карандаш и бумага). Какое значение температуры он дает? (правильный ответ должен быть около 25) - Если это не так, то ваша формула/программа неверна.
чтение по шкале 1023max было около 495-500. так что это почти правильно, так как там где-то около 28-32°C.
и формула неверная. как я уже сказал, показания были одинаковыми на всех аналоговых выводах...
а как же альфа-бета? те значения, которые я ввел правильно? 0,00001937 и 0,00788?
ссылка «формула» внутри описания кода показывает, откуда я ее взял. его пример работает на другом датчике kty. хотя кажется, что на мой взгляд строки кода одинаковы, я могу что-то упустить или ввести неправильные значения...
А так же выглядит формула внутри даташита. даже если мне трудно (тяжело) читать формулы, написанные таким образом. это выглядит так же, как в коде С++.
Если я прикоснусь к датчику... что составляет около 129-133 после математики при температуре 28-32 градусов... оно медленно поднимется до 134 135 136... Как я мог просто сделать: "результат -100". .. но наверняка это неправильно.
и да... реальное значение резистора, которое я использую, 2160-2170... так что я поставил 2170 в этом поле, а не 2200. но это снова другая история.

Ответы (1)

Мы знаем, что аналоговые показания будут варьироваться от 0 (=0 В) до 1023 (5 В).

Первым шагом является преобразование показания аналогового значения (напряжения) в фактическое значение сопротивления .

введите описание изображения здесь

Предлагаемая новая программа (не проверял ее, поэтому комментарии/исправления приветствуются)

float resistorfixed = 2200;
float temp = analogRead(A5);

// calculate sensor resistance value (Rkty)

float Rkty = (resistorfixed * temp) / (1023 - temp);

// From the data sheet the value of the resistance of the sensor 
// @ 25 degrees is 2000 +/- 20 ohmsStart with calculating the measured 
// resistance.

float R25 = 2000;

// We are also given alpha and beta 

float alpha = 7.88 / 1000;
float beta  = 1.937 / 100000; // divide by 10^-5

// Now we need to calculate the temperature factor (KayTee)

float KayTee = Rkty / R25;

// We now have all the information to calculate the actual temperature 
// (AcT)

float AcT = 25 + ((sqrt((alpha * alpha) - (4 * beta) + (4 * beta * KayTee)) - alpha) / (2 * beta));

// Just hope I've got my brackets is the correct place!
Вам следует подумать о том, чтобы выработать привычку избегать поплавков, где это возможно.