Ntc термистор измерение температуры

Тема в разделе "Микроконтроллеры AVR", создана пользователем Yerabdi, 25 дек 2021.

  1. akl

    akl Гуру

    вот таблица повышенной точности
    Код (C++):
    int tempArr[]={
    1168,1137,1107,1080,1055,1031,1008,986,966,947,
    928,910,893,877,861,846,832,818,804,791,
    778,766,754,742,731,720,709,698,688,678,
    668,659,649,640,631,622,614,605,597,589,
    581,573,565,558,550,543,536,529,522,515,
    508,501,495,488,482,475,469,463,457,451,
    445,439,433,427,421,416,410,405,399,394,
    388,383,378,373,368,362,357,352,347,342,
    338,333,328,323,318,314,309,304,300,295,
    291,286,282,277,273,268,264,260,256,251,
    247,243,239,234,230,226,222,218,214,210,
    206,202,198,194,190,186,182,178,174,170,
    167,163,159,155,151,148,144,140,136,133,
    129,125,121,118,114,110,107,103,100,96,
    92,89,85,82,78,74,71,67,64,60,
    57,53,50,46,43,39,36,32,29,25,
    22,18,15,11,8,4,1,-3,-6,-9,
    -13,-16,-20,-23,-27,-30,-34,-37,-40,-44,
    -47,-51,-54,-58,-61,-65,-68,-72,-75,-78,
    -82,-85,-89,-92,-96,-99,-103,-106,-110,-113,
    -117,-120,-124,-127,-131,-135,-138,-142,-145,-149,
    -152,-156,-160,-163,-167,-171,-174,-178,-182,-185,
    -189,-193,-196,-200,-204,-208,-212,-215,-219,
    };
     
    Код (C++):

    int adc=analogRead(pin);
    adc-=40;
    adc/=3;
    int temp=0;
    float temp_f=0.0;
    if(adc>=0 && adc<sizeof(tempArr)){
        temp = tempArr[adc];
        temp_f=temp/10.0;
        temp/=10;
    }
    в temp_f будет лежать температура с десятыми градуса
    в temp с отброшенной дробной частью

    adc-=40 потому что таблица начинается с ацп 40.
    adc/=3 потому что таблица с шагом ацп 3
    вот в экселе все расчеты
    там по твоей градуировке сперва строится график, потом на этом графике при помощи магии экселя делается линия тренда, которая выдает формулу с коэффициентами, которая приближена к градуировке.
    затем построен ряд значений ацп с шагом в 3 единицы (исходя из общих соображений)
    из ацп посчитаны сопротивления, из сопротивлений по коэффициентам посчитаны температуры
    затем температуры умножены на 10 и округлены.
    потом к ним добавлены запятые чтобы чуть полегче было вштамповывать в массив
     

    Вложения:

  2. akl

    akl Гуру

    по идее таблицу можно заполнять внутри самой ардуины, где-нибудь в сетапе после вкулючения. всякие исходные данные и коэффициенты хранить в ЕЕПРОМ и т.д. но надо будет учитывать много всего так что надежнее заранее массив соорудить
     
    Yerabdi нравится это.
  3. Yerabdi

    Yerabdi Гик

    Мне хватить и на 120гр максимум, ну ты зверь шаришь жестко
    Спасибо большое, буду разбираться с вторым датчиком который при 25гр 2,2КОм
     
  4. akl

    akl Гуру

    основная суть в том, что нам нужна таблица из двух столбиков
    1-АЦП 2-температура
    с нужной нам точностью
    и желательно чтобы столбик АЦП был линеен
    затем второй столбик тупо ложим в массив, а первый столбик по формуле (в нашем случае i=(adc-40)/3) пересчитывается в индекс массива, по которому в программе вынимается готовая заранее высчитанная температура
     
    Yerabdi нравится это.
  5. akl

    akl Гуру

    в последнем массиве до 116,8 градусов.
    1168 - это 116,8 градусов
    -219 это -21,9
     
  6. Yerabdi

    Yerabdi Гик

    Вот это все расчитывается в экселе?
     
  7. akl

    akl Гуру

    да. Но главная задача экселя в том чтобы из градуировочного графика вытащить формулу по которой потом можно все посчитать.
    то есть вот эти вот коэффициенты для степенной (в нашем случае) функции
    744,3713475
    -0,1076567
    так же можно градуировочный график разделить на куски и получать формулы отдельно к этим кускам, удобнее всего полиномиальные или если куски достаточно маленькие - даже линейные.
    а пересчитать по этим формулам потом все это в массив - дело техники
     
  8. akl

    akl Гуру

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

    или там ардуина выполняет что-то другое, в чем нельзя задержаться на лишнюю милли- или даже микро- секунду на обсчет температуры? возможно там могут быть варианты оптимизировать так, что время найдется
     
  9. parovoZZ

    parovoZZ Гуру

    АЦП отрабатывает за 13 тактов процессора. При частоте 16 МГц это менее микросекунды.
     
  10. akl

    akl Гуру

    там же есть делитель частоты на ацп. хз сколько там накручено на ардуине, но скорее всего где-то около 100кгц
    в результате полный цикл не меньше 100мкс займет.
    может че-то путаю, но помню смотрел в авр-студии ацп с частотой 125кгц или типа того, и оно примерно 100-200 мкс занимало

    в ардуине скорее всего либо 64 либо 128 делитель. то есть 250 или 125кгц

    но в любом случае инертность резистора и конденсатора на порядки больше
     
    Последнее редактирование: 26 дек 2021
  11. parovoZZ

    parovoZZ Гуру

    Да, точняк. Это же тухлый древний авр. Потолок у него 2 МГц. Значит, 8 мкс.
     
  12. akl

    akl Гуру

    в инете везде пишут что для хорошей работы ацп надо накручивать чтоб не больше 200кгц было. то есть 64 или 128 делитель выбирать. подозреваю что в ардуине 128
     
  13. parovoZZ

    parovoZZ Гуру

    Надо не инет смотреть, а даташит. А в нем написано, что достоверных бит всего 8.5. Что в первом приближении даёт 8 бит. Поэтому тащить из него все десять при обычном подходе не имеет смысла.
     
  14. akl

    akl Гуру

    у меня до 0.01 вольта неплохо измеряло то есть 9 бит более-менее есть
     
  15. parovoZZ

    parovoZZ Гуру

    то, что где-то что-то измеряло - это ни о чём не говорит. Необходимо измерять на полной шкале с эталонными источниками и приборами.
     
    vvr нравится это.
  16. Рокки1945

    Рокки1945 Гуру

    Я ваще вот так отлаживаю
    Снимок.PNG
     
  17. Yerabdi

    Yerabdi Гик

    Вы правы примерно 150мкс уходит.
    Есть другие прерывание где нужно обрабатывать действие
     
  18. akl

    akl Гуру

    ты температуру то в прерывании чтоль считаешь? или запрещаешь прерывания пока она считается? нафига? прерывания на то и прерывания, что выполняются сразу как приспичит, и никакие расчеты температуры им помешать не могут хоть 15 минут считай.
    если результат расчетов используется в прерывании, то достаточно запретить прерывания на тот момент когда готовый результат перекладывается из одной переменной в другую, которая используется
     
  19. Yerabdi

    Yerabdi Гик

    В прерыванию уходит и таймеры
    По этому не должно превышать 100-150мкс
     
  20. akl

    akl Гуру

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