Temperature measurement with NTC thermistor.

Visits: 240


Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь готовые данные, но в них есть одна особенность для преобразования требуется время и чем точнее необходимо преобразование, тем это время дольше. Есть конечно и преимущество в цифровых это возможность удаления сенсора на большое расстояние. Для PIC контроллера реально можно удалить сенсор DS18B20 на расстояние до 300 метров.

Аналоговые такие как например,  LM35 выдающие 10мВ на градус, применять интересно, но они предназначены для локального измерения температуры на печатной плате и делать из них удалённые сенсоры нерентабельно. Но точность таких датчиков ограничена.

Резисторы NTC привлекают своей ценой, малыми габаритами, быстродействием при изменении параметра, но что меня останавливало, так это преобразование, которое описывало вычисление температуры. Для обработки таких вычислений простым 8 битным микроконтроллером необходимо много ресурсов и времени. Но как показала практика существует и другой метод позволяющий выполнить преобразование сопротивление терморезистора в температуру очень быстро и при этом на самом простом MCU и с самым малым объёмом памяти.

Это так называемый табличный метод.

Суть этого метода заключается в том, что нам надо взять заводскую таблицу сопротивлений терморезистора преобразовать её в значение АЦП. А затем, в процессе измерения температуры, получая от АЦП значения, нам надо просто по таблице найти текущую температуру. Для значений находящихся между табличными значения использовать линейную аппроксимацию. И что самое интересное мы получаем настолько точные показания, во всем интервале измеряемых температур, что они превосходят калиброванные цифровые заводские датчики. Почему я рекомендую заводскую таблицу, дело в том, у разных производителей одного и того же резистора есть хоть и не значительные, но отклонения от нормы. По этому если без дополнительных заморочек вам надо получить точные изменения, просто возьмите эти параметры у производителя.

Но конечно бывают случаи и очень часто, что сенсор есть, а таблицы нет. Для этого я для себя разработал систему и предлагаю как инструмент для разработчика –  файл в формате майкрософт эксел, который поможет создать, из минимального количества данных, полноценную таблицу сопротивление резистора, для измерения температуры с любым для вас необходимым шагом, более того введя значения из имеющейся таблицы расширить её до требуемой точности или получить более компактные данные.


Т.е. для создания устройства измерения температур нам необходим сенсор и его RT-характеристика.

Если есть резистор и есть таблица, например, как это можно найти в магазине в Ворон

тут есть полноценная заводская таблица

И я рекомендую покупать комплектующие именно в таких магазинах, где с доступна полная информация о компоненте.


Но если нет полной информации по сенсору, для этого я предлагаю воспользоваться моими разработками – экселовским файлом NTC constant calculater by Catcatcat.xlsx.

Для построения таблицы вам необходимо иметь или измерять 4 параметра сенсора. Желательно стандартные температурные точки, а это могут быть значения для температур, например, 25/50 или 25/85, эти значения подсмотрите для коэффициента B. Внести эти параметры в таблицу. Задать область измеряемых температур и требуемый шаг расчёта параметра.

Изменить, если необходимо тип характеристики для вычисления

 

Если введённые параметры корректны вы должны получить OK

После чего вы можете использовать данные таблицы (опуститесь в низ) для своих проектов.

 

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


Файл для загрузки

Значок

NTC constant calculater by Catcatcat V3.0 194 КБ 446 downloads

I decided to share another tool that I developed for myself and use it to design...

Теперь перейдем к методу измерения температуры с применением NTC сопротивлений.

Существуем множество схем, но для себя я определил 4 простые схемы для АЦП которое есть в любом MCU. Но рекомендую только две (1) и (3) из расчёта того, что один провод – это есть общий и это более приемлемо если датчик удаляется на большое расстоянии. Для измерения комнатных температур подойдёт датчик с сопротивлением 10к. Для высоких можно выбрать в районе 100к. Для очень низкий в районе 1-5 к. Но более точнее вы можете определиться только исходя из своего опыта или от возможности приобретения того или иного сенсора температуры.


Схемы подключения:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Я в своих проектах предпочитаю использовать схему (1), редко схему (3) и никогда остальные, хотя считаю есть решения в которых эта схемотехника будет приемлемой. Эти схемы я выбираю за то (тут повторюсь), что один из проводов есть земля и тут как бы иметь рядом с сигнальным проводом земле более приемлемо. Схема (3) тут может быть два решения, когда необходимо уменьшить ток через терморезистор, для предотвращения его саморазогрева или согласовать удалённый датчик с импедансом приёмника. По саморазогреву рекомендуется чтобы выделяемая мощность не превышала 1 мВ, но в большинстве случаем при сопротивлении 10к и питании от 3-5 вольт эти вопросом можно и не заморачиваться.

Если резистор сенсора 10к я выбираю для противоположного плеча аналогичный 1%.  Выбор величины этого резистора зависит от значения напряжения получаемого в крайних точках измеряемого диапазона и тут надо подходить творчески, чтобы дать возможность АЦП работать во всем его рабочем диапазон.

Особенностью табличного метода со значением для АЦП это нет необходимости использовать опорное напряжение или какие-то навороты с необходимостью высококачественного питания сенсора температуры.

Мы конфигурируем АЦП с опорными напряжениями к источнику питания MCU и сенсор подключаем к этому же источнику. Идеальный вариант, если внутреннее подключение опорных напряжений, это вывод питание на датчик сделать из области схемы для аналогово питания MCU. Возможный вариант:

Нарисованную схему не стоит использовать за идеал, чаще для борьбы с промышленными помехами вам придется добавить до и после резистора R2 фильтрующие конденсаторы, величина которых будет выбрана как компромисс между быстродействием и уровнем помех. Если быстродействие не важно, то добавит ёмкости от 0,1 до 1,0 вы можете перестраховаться для многих вариантов.

Когда выбрана схема нам необходимо рассчитать значения АЦП для выбранного сенсора.


Тут я приводжу еще один инструмент, если вы имеете готовую таблицу ее шаг сопротивлений вас устраивает. Используя этот инструмент просто перенесите значения и получите данные для АЦП Calculation of the ADC table by Catcatcat.xlsx. В этом инструменте надо иметь только значения сопротивлений для приобретённого сенсора.

Заполните жёлтые поля и получите искомые значение АЦП для таблицы данных.


Для удобства работы я для себя создал библиотеку, но данные по конкретному датчику придется в таблицу и настроить соответствующие параметры.

Пример для датчика терморезистор 10 kOhm±1% B 25/85=3435K±1%, данные были взяты из даташита по сопротивлению.
Для начала заполнить константы.

// Для контроля минимального уровня температуры
#define MINIMUM_MEASURING_TEMPERATURE -500  // -50.0 C
// Для контроля максимальной допустимой температуры
#define MAXIMUM_MEASURING_TEMPERATURE 1100  // 110.0 C

// Значение температуры соответствующее первому значению таблицы
#define TEMPERATURE_TABLE_START -500 // -50.0 C
// Шаг таблицы
#define TEMPERATURE_TABLE_STEP 10 // 1.0 C

Обратите внимание константы имеют целый тип, для скорости вычисления, т.е. если надо записать 50 грд Цельсия пишем 500.

Далее заполним поисковую таблицу значением для АЦП.

const uint16_t termo_table[] = {
3975, 3968, 3961, 3953, 3945, 3937, 3928, 3919,
3910, 3900, 3890, 3879, 3867, 3855, 3843, 3830,
3817, 3803, 3789, 3774, 3758, 3742, 3725, 3708,
3690, 3671, 3652, 3632, 3612, 3591, 3569, 3547,
3523, 3500, 3475, 3450, 3424, 3398, 3371, 3343,
3315, 3286, 3256, 3226, 3195, 3163, 3131, 3098,
3065, 3032, 2997, 2962, 2927, 2891, 2855, 2818,
2781, 2744, 2707, 2669, 2631, 2592, 2554, 2515,
2476, 2437, 2398, 2359, 2320, 2280, 2242, 2202,
2164, 2125, 2086, 2048, 2010, 1972, 1934, 1896,
1859, 1822, 1786, 1749, 1713, 1678, 1643, 1609,
1575, 1541, 1508, 1475, 1443, 1411, 1380, 1349,
1319, 1289, 1260, 1231, 1203, 1203, 1176, 1148,
1122, 1095, 1070, 1045, 1020, 996, 973, 950,
927, 905, 884, 863, 842, 822, 802, 783,
765, 746, 728, 711, 694, 677, 661, 645,
630, 614, 600, 586, 572, 558, 544, 532,
519, 507, 494, 483, 472, 460, 449, 439,
428, 418, 409, 399, 390, 380, 372, 363,
363, 355, 347, 339, 331, 323, 316, 309,
302
};

В библиотеки всего одна функция это int16_t Calc_Temperature (uint16_t acd_data);

Эта функция использует данные полученный от АЦП (подразумевается, что вы их предварительно отфильтровали) и возвращает целое 16 бит со знаком. Где младшее значение в десятичном виде это десятые доли градуса.

/* The function calculates the temperature value in tenths of degrees Celsius 
 * depending on the total value of the ADC.
 * Функція обчислює значення температури у десятих градусах Цельсія залежно 
 * від сумарного значення АЦП.
 */
int16_t Calc_Temperature(uint16_t acd_data)
{
    uint16_t l = 0; //
    uint16_t r = Amount_of_data; // upload amount of data / завантажити кількість даних
    uint16_t minimum = termo_table[r]; // ADC minimum value / мінімальне значення АЦП
    //--------------------------------------------------------------------------
    /* < 
     * Checking if the temperature is out of range
     * Перевірка виходу температури за межі допустимих вимірів 
     * >
     * Check for temperature drop below the minimum allowable level
     * Перевіряємо на опускання температури нижче за мінімальний допустимий 
     * рівень. На замикання ланцюга датчика.
     */
    Sensor_Failure = 0;//flag initialization / ініціалізація прапора
    if (acd_data < minimum)
    {
        Sensor_Failure = 1;
        return MAXIMUM_MEASURING_TEMPERATURE;
    }
    /* Check for exceeding the maximum allowable temperature
     * Перевіряємо на перевищення максимальної допустимої температури
     * На обрив ланцюга датчика.
     */
    uint16_t maximum = termo_table[0]; // maximum ADC value / максимальне значення АЦП
    if (acd_data > maximum)
    {
        Sensor_Failure = 2;
        return MINIMUM_MEASURING_TEMPERATURE;
    }
    //--------------------------------------------------------------------------
    // Binary search on a table/Двійковий пошук за таблицею.
    while ((r - l) > 1)
    {
        uint16_t m = (uint8_t) ((l + r) >> 1);
        uint16_t mid = termo_table[m];
        if (acd_data > mid)
        {
            r = m;
        }
        else
        {
            l = m;
        }
    }
    uint16_t vl = termo_table[l];
    if (acd_data >= vl)
    {
        return l * TEMPERATURE_TABLE_STEP + TEMPERATURE_TABLE_START;
    }
    //--------------------------------------------------------------------------
    uint16_t vr = termo_table[r];
    uint16_t vd = vl - vr;
    int16_t res = TEMPERATURE_TABLE_START + r * TEMPERATURE_TABLE_STEP;

    if (vd)
    {
        // Linear interpolation/Лінійна інтерполяція
        res -= ((TEMPERATURE_TABLE_STEP * (int32_t) (acd_data - vr) + (vd >> 1)) / vd);
    }
    return res;
}//-----------------------------------------------------------------------------


Инструменты для загрузки

NTC constant calculater by Catcatcat.xlsx – инструмент для профессионалов, позволяющий по четырём контрольным точкам восстановить таблицу сопротивлений сенсора, преобразовать её к необходимому шагу и получить значение АЦП в зависимости от используемой схемы.

Значок

NTC constant calculater by Catcatcat V3.0 194 КБ 446 downloads

I decided to share another tool that I developed for myself and use it to design...

Calculation of the ADC table by Catcatcat.xlsx – упрощённый инструмент, предназначенный только для преобразования данных сопротивления NTC резистора в коды АЦП. Я рекомендую его если у вас есть заводская таблица сопротивлений датчика температуры с шагом который вас полностью устраивает.

Значок

Calculation of the ADC table by Catcatcat V3.0 103 КБ 475 downloads

I decided to share another tool that I developed for myself and use it to design...

NTC_sensor библиотека для измерения температуры.

Значок

NTC_sensor - Temperature measurement library 5 КБ 923 downloads

I decided to share another tool that I developed for myself and use it to design...

 

Це може бути цікаво!

 


 

  • Акриловый корпус для платы ch-4000Акриловый корпус для платы ch-4000
    Visits: 647 Плата ch-4000 подходит для монтажа в корпуса на дин рейку, но для домашней автоматики необходимо что-то другое, поэтому был разработан корпус из акрила который позволит создавать настольные и настенные устройства. Корпус …
  • Цифровой тахометр для автомобиля CH-С3300Цифровой тахометр для автомобиля CH-С3300
    Visits: 1885  Тахометр Ch-С3300 предназначен для индикации и контроля оборотов, времени работы и максимальных оборотов развиваемых двигателем во время поездки. Датчиком может использоваться как обычный контактный прерыватель или выход датчика …
  • Acquaintance with audio-bluetooth modules F-6888 (BK3254).Acquaintance with audio-bluetooth modules F-6888 (BK3254).
    Visits: 2126 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
  • Проект с использованием MCC часть 10Проект с использованием MCC часть 10
    Visits: 800 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …
  • Стабилизатор тока для светодиодов SN3350Стабилизатор тока для светодиодов SN3350
    Visits: 2584 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V  драйвер светодиодов с внутренним ключом  SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
  • HVLD модуль на примере PIC24FJ128GA204HVLD модуль на примере PIC24FJ128GA204
    Visits: 618 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …
  • Одноканальный емкостной сенсор – AT42QT1012Одноканальный емкостной сенсор – AT42QT1012
    Visits: 2323 Описание сенсора [wpdm_file id=242] Незаконченный проект, так-как сенсор не оправдал своего назначения, не рекомендую, просто выброшенные деньги. Особенности. • Количество сенсоров – один, режим переключения ( touch-on/touch-off ), а также программируемая …
  • I2C MODULE – PIC18F25K42 Device ID Revision = A001I2C MODULE – PIC18F25K42 Device ID Revision = A001
    Visits: 1061 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …
  • Проект с использованием MCC часть 08Проект с использованием MCC часть 08
    Visits: 1008 И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, …
  • VU Meter Tower ART – part 2VU Meter Tower ART – part 2
    Visits: 961 Проект – VU Meter Tower ART получил продолжение в своем развитии. Теперь можно заказать набор деталей из акрила для самостоятельной сборки. В проект корпуса внесено целый ряд доработок, …

 



Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

Продолжайте читать

НазадДалее

Комментарии

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.