Урок 27. Термопары в системе Ардуино. Проект Ардуино термометра-регистратора для высоких температур.

Термопара TP-01A

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

Предыдущий урок     Список уроков     Следующий урок

Термопары (термоэлектрические преобразователи).

Все термодатчики из предыдущих уроков позволяли измерять температуру в диапазоне не шире – 55 … + 150 °C. Для измерения более высоких температур самыми распространенными датчиками являются термопары. Они:

  • имеют крайне широкий диапазон измерения температуры -250 … +2500 °C;
  • могут быть откалиброваны на высокую точность измерения, до погрешности не более 0,01 °C;
  • как правило, имеют низкую цену;
  • считаются надежными датчиками температуры.

Главный недостаток термопар – это необходимость в достаточно сложном прецизионном измерителе, который должен обеспечивать:

  • измерение низких значений термо-ЭДС с верхним значением диапазона десятки, а иногда и единицы мВ;
  • компенсацию термо-ЭДС холодного спая;
  • линеаризацию характеристики термопары.

 

Принцип действия термопар.

Принцип действия датчиков такого типа основан на термоэлектрическом эффекте (эффекте Зеебека). Поэтому другое название термопары – термоэлектрический преобразователь.

В цепи между соединенными разнородными металлами образовывается разность потенциалов. Ее величина зависит от температуры. Поэтому она называется термо-ЭДС. У разных материалов величина термо-ЭДС разная.

Термопара

Если в цепи стыки (спаи) разнородных проводников связаны в кольцо и имеют одинаковую температуру, то сумма термо-ЭДС равна нулю. Если же спаи проводов находятся при разных температурах, то общая разность потенциалов между ними зависит от разности температур. В результате мы приходим к конструкции термопары.

Устройство термопары

Два разнородных металла 1 и 2 в одной точке образуют рабочий спай. Рабочий спай помещают в точку, температуру которой необходимо измерить.

Рабочий спай

Холодные спаи это точки подключения металлов термопары к другому металлу, как правило, к меди. Это могут быть клеммные колодки измерительного прибора или медные провода связи с термопарой. В любом случае необходимо измерять температуру холодного спая и учитывать ее в вычислениях измеренной температуры.

Основные типы термопар.

Наиболее широкое распространение получили термопары ХК (хромель – копель) и ХА (хромель – алюмель).

Название Обозначение НСХ Материалы Диапазон измерения, °C Чувствительность, мкВ/°C, (при температуре, °C) Термо-ЭДС, мВ, при 100 °C
ТХК (хромель-копелевые) L Хромель, копель - 200 … + 800 64 (0)

88 (600)

6,86
ТХА (хромель-алюмель) K Хромель, алюмель - 270 … +1372 35 (0)

42 (1300)

4,10
ТПР (платино-родиевые) B Платинородий, платина 100 … 1820 8 (1000)

12 (1800)

0, 03
ТВР (вольфрам-рениевые) A Вольфрам-рений, вольфрам-рений 0 … 2500 14 (1300)

7 (2500)

1,34

 

Как практически измерять температуру с помощью термопары. Методика измерения.

Номинальная статическая характеристика (НСХ) термопары задана в виде таблицы с двумя столбцами: температура рабочего спая и термо-ЭДС. ГОСТ Р 8.585-2001 содержит НСХ термопар разных типов, заданные для каждого градуса. Можно загрузить в PDF формате по этой ссылке ГОСТ Р 8.585-2001.

Для измерения температуры с помощью термопары необходимо выполнить следующие действия:

  • измерить термо-ЭДС термопары (E общ.);
  • измерить температуру холодного спая (T хол. спая);
  • по таблице НСХ термопары определить термо-ЭДС холодного спая, используя температуру холодного спая (E хол. спая);
  • определить термо-ЭДС рабочего спая, т.е. прибавить ЭДС холодного спая к общей термо-ЭДС (  E раб. спая = E общ. + E хол. спая  );
  • по таблице НСХ определить температуру рабочего спая, используя термо-ЭДС рабочего спая.

Вот пример, как я замерил с помощью термопары типа ТХА температуру жала паяльника.

  • Прикоснулся рабочим спаем к жалу паяльника, замерил напряжение на выводах термопары. Получилось 10,6 мВ.
  • Температура окружающей среды, т.е. температура холодного спая – примерно 25 °C. ЭДС холодного спая из таблицы ГОСТ Р 8.585-2001 для термопары типа K при 25 °C равна 1 мВ.
  • Термо-ЭДС рабочего спая равна 10,6 + 1 = 11,6 мВ.
  • Температура из той же таблицы для 11,6 мВ равна 285 °C. Это и есть измеренное значение.

Такую последовательность действий нам надо реализовать в программе Ардуино термометра.

 

Ардуино термометр для измерения высоких температур с помощью термопары типа ТХА.

У меня нашлась термопара TP-01A. Типичная, широко распространенная ТХА термопара от тестера. Ее я и буду использовать в термометре.

Термопара TP-01A

На упаковке указаны параметры:

  • тип K;
  • диапазон измерения – 60 … + 400 °C;
  • точность ±2,5 % в диапазоне до 400 °C.

Диапазон измерения указан для кабеля из стекловолокна. Существует похожая термопара TP-02, но с зондом длиной 10 см.

Термопара TP-02

У TP-02 верхняя граница измерения 700 °C . Значит, будем разрабатывать термометр:

  • для термопары типа ТХА;
  •  с диапазоном  измерения – 60 … + 700 °C.

Разобравшись в программе и схеме устройства, Вы сможете создать измеритель для  термопар любых типов с любым диапазоном измерения.

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

Схема Ардуино термометра для термопары.

Мы должны подключить к плате Ардуино:

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

Первые два элемента мы подключали в предыдущих уроках об измерении температуры. А вот для подключения термопары к плате Ардуино необходимо разработать прецизионный усилитель. Не очень простая задача.

Схема измерительного усилителя для термопары.

Сформируем требования к усилителю.

  • Диапазон входного напряжения – 2,24 … + 29,13 мВ. Это крайние значения термо-ЭДС для нашего диапазона измерения (–60 … + 700 °C). Взяты из ГОСТ Р 8.585-2001 для термопары типа K. Но это для температуры холодного спая равной 0 °C. Расширим диапазон еще на 2 мВ с учетом максимальной температуры холодного спая + 40 °C. В результате для термопары типа ТХА:
Тип термопары ТХА
Диапазон измеряемой температуры –6 0 … + 700 °C
Диапазон температуры холодного спая 0 … + 40 °C
Диапазон входного напряжения - 4,3 … + 30 мВ
  • Диапазон выходного напряжения усилителя 0 … 1,1 В. Очевидно, для того чтобы коэффициент усиления был меньше выберем минимальное опорное напряжение АЦП, т.е 1,1 В.
  • Коэффициент усиления  1100 / (4,3 + 30) = 32 , смещение для измерения отрицательного напряжения + 4,3 мВ.
Выходное напряжение 0 … 1100 мВ
Коэффициент усиления 32
Смещение + 4,3 мВ

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

Теперь непосредственно о схеме измерительного усилителя. Я построил его по схеме неинвертирующего усилителя на основе операционного усилителя (ОУ). В качестве ОУ я выбрал OP07. Это прецизионный операционный усилитель с низким напряжением смещения, низким входным током, высоким коэффициентом усиления.

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

Схема усилителя для термопары выглядит так.

Схема усилителя термопары

Коэффициент усиления задают резисторы R2 и R3.

K = R3 / R2 + 1

Я выбрал K = 43 / 1.6 + 1 = 27.875.

Резисторы R4 и R5 задают смещение + 5,1 мВ, необходимое для измерения температуры ниже 0. Термо-ЭДС в этом случае имеет отрицательное значение и для того, чтобы измерить его с помощью однополярного АЦП необходимо сместить в положительную сторону. Смещение учтем в программе.

Конденсаторы обеспечивают аналоговую фильтрацию наводок и помех. При таких низких уровнях сигнала это абсолютно необходимо. Дополнительно в программе реализована цифровая фильтрация сигнала.

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

Схема формирования отрицательного питания

На цифровом выводе платы Ардуино формируется сигнал с формой меандр и логическими уровнями 0 и 5 В. Можно сформировать его с помощью аппаратного ШИМ, но мы сделаем программно. В обработчике прерывания от таймера 2 мс поставим команду инверсии состояния вывода. Получится прямоугольный сигнал с периодом 4 мс.

  • При высоком уровне сигнала конденсатор C8 заряжается по цепи: выход контроллера, резистор R8, диод VD1.
  • При низком уровне – разряжается на конденсатор C9 по цепи: выход контроллера, резистор R8, диод VD2.
  • В результате на конденсаторе C9 формируется напряжение приблизительно - 4 В.

Полностью принципиальная схема Ардуино термометра для термопары выглядит так.

Схема Ардуино термометра для термопары

В качестве резисторов R3, R4, R5, R6 желательно использовать точные, термостабильные элементы. Я использовал обыкновенные резисторы с точностью 5%. Предварительно замерил их реальное сопротивление и учел это в программе.

Для отладки программы и проверки работы устройства я собрал его на макетной плате.

Макет устройства

Измеритель я спаял отдельным макетом. На беспаечной макетной плате он вряд ли бы заработал. Все связи должны быть минимальной длины, все соединения компонентов – надежно спаянными.

Макет измерительного усилителя

 

Резидентная программа Ардуино термометра для термопары.

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

Полностью резидентную программу термометра для термопары можно загрузить по этой ссылке.

Я напомню, последовательность действий, которую необходимо выполнить в программе:

  • измерить термо-ЭДС на выводах термопары;
  • измерить температуру холодного спая;
  • по таблице НСХ термопары определить термо-ЭДС холодного спая;
  • определить термо-ЭДС рабочего спая, т.е. прибавить ЭДС холодного спая к общей термо-ЭДС;
  • по таблице НСХ термопары определить температуру рабочего спая, используя термо-ЭДС рабочего спая.

Прежде всего, в программе  необходима таблица номинальной статической характеристики (НСХ) термопары. Возьмем ее из ГОСТ Р 8.585-2001 для термопары типа K. В документе она задана для каждого градуса.

Нам необходима часть таблицы от – 60 до + 700 °C. Массив значений термо ЭДС для термопары будет выглядеть так.

float termTable[761] = {  
  -2.243,-2.208,-2.173, … ,
…………………… 

  29.129  };

Нулевой элемент массива содержит значение термо-ЭДС для температуры – 60 °C, 760 элемент – для + 700 °C.

Не думайте, что я набирал массив termTable вручную. Я создал его в текстовом виде, затем сделал автозамену пробелов на запятые.

Массив имеет размер 761 элемент. Каждое значение типа float, т.е. 4 байта. Для создания такого массива в ОЗУ не хватит места. Да и зачем он в ОЗУ, если мы его не собираемся менять. Поэтому массив надо разместить в программной памяти, т.е. FLASH памяти.

 

Размещение данных в программной памяти (FLASH памяти). Модификатор PROGMEM.

В памяти программ могут размещаться только данные, которые не требуется изменять в ходе выполнения программы. Я вижу две основные причины хранения данных во FLASH памяти:

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

В Ардуино функции управления данными в памяти программ предоставляет библиотека pgmspace.h. Поэтому, прежде всего, необходимо подключить эту библиотеку.

Искать ее в интернете и загружать не надо. Это стандартная библиотека, находится в папке Arduino. У меня в D:\Arduino\hardware\tools\avr\avr\include\avr\ pgmspace.h. Просто напишите:

#include <avr/pgmspace.h>

Теперь при описании любой переменной можно использовать модификатор PROGMEM, который и сообщает компилятору о том, что данные необходимо разместить в памяти программы. В общем случае это выглядит так:

const  PROGMEM dataTyp name[] = { dt0, dt1, …};

  • dataTyp – тип переменной;
  • name – имя.

В нашем случае мы размещаем во FLASH памяти массив типа float:

const PROGMEM float termTable [761] = {
  -2.243,-2.208,-2.173, … ,
  …………………………………………………………………………
  29.129 };

Для чтения данных программной памяти в библиотеке pgmspace.h существуют специальные функции. Для разных типов данных используются разные функции:

  • для чтения байта - pgm_read_byte(address_short);
  • для чтения двух байтов -  pgm_read_word(address_short);
  • для чтения четырех байтов - pgm_read_dword(address_short);
  • для чтения данных с плавающей запятой - pgm_read_float(address_short).

Например, чтение 60 элемента из нашего массива termTable[] типа float будет выглядеть так:

coolEDS = pgm_read_float(termTable + 60);

 

Вычисление температуры рабочего спая термопары.

Последовательность действий для определения температуры описана выше. В программе термометра она реализована следующим образом:

  • Температура холодного спая вычисляется так же, как и в уроке 24 для датчика TMP36. В уроке написано, какие изменения следует сделать при использовании термодатчика LM35.
  • Определение термо-ЭДС – это измерение напряжения на аналоговом входе. Подробно описано в уроке 13. EDS_OFFSET – константа учитывающая смещение для измерения отрицательных температур.
  • ЭДС холодного спая определяется по температуре холодного спая из массива termTable[].
  • Температура рабочего спая также определяется из массива termTable[], только наоборот вычисляется номер элемента массива по его значению. Я использовал не перебор всех значений массива  последовательно, а метод последовательного приближения. Определил, в какой половине массива находится требуемое значение, затем в какой четверти и т.д. Это значительно ускорило выполнение программы.

Для отладки термометра я вывел на компьютер кроме измеренной температуры:  температуру холодного спая, термо ЭДС, ЭДС холодного спая и ЭДС рабочего спая.

    // вычисление температуры холодного спая
    coolTemperature = (int)(((float)averageTemp * ADC_RESOLUTION / 500. - OFFSET ) / SCALE_FACTOR);

    // вычисление термо ЭДС
    termoEDS = (float)averageTermoEDS * ADC_RESOLUTION / 500. / (R4 / R3 + 1) - EDS_OFFSET;

    // вычисление ЭДС холодного спая
    coolEDS = pgm_read_float(termTable + coolTemperature + 60);

    // вычисление ЭДС рабочего спая
    workEDS = termoEDS + coolEDS;
   
    // вычисление температуры рабочего спая
    temperature = 0;
    if ( workEDS >= pgm_read_float(termTable + temperature + 380))  temperature += 380; 
    if ( workEDS >= pgm_read_float(termTable + temperature + 190))  temperature += 190; 
    if ( workEDS >= pgm_read_float(termTable + temperature + 95))  temperature += 95; 
    if ( workEDS >= pgm_read_float(termTable + temperature + 48))  temperature += 48; 
    if ( workEDS >= pgm_read_float(termTable + temperature + 24))  temperature += 24; 
    if ( workEDS >= pgm_read_float(termTable + temperature + 12))  temperature += 12; 
    if ( workEDS >= pgm_read_float(termTable + temperature + 6))  temperature += 6; 
    if ( workEDS >= pgm_read_float(termTable + temperature + 3))  temperature += 3; 
    if ( workEDS >= pgm_read_float(termTable + temperature + 2))  temperature += 2; 
    if ( temperature < 760 ) {
      if ( workEDS >= pgm_read_float(termTable + temperature + 1))  temperature += 1;       
    }
    temperature -= 60;
   
    // вывод температуры на LED индикатор
    if (temperature >= 0) {
      // температура положительна
      disp.print((int)(temperature), 4, 1);  
    }
    else {
      // температура отрицательная
      disp.digit[3]= 0x40;  // отображается минус
      disp.print((int)(temperature * -1), 3, 1);        
    }     
                             
    // передача температуры рабочего спая на компьютер
    Serial.println(temperature);
/*
    // передача температуры холодного спая на компьютер
    Serial.print(" CoolTemp= ");  Serial.print(coolTemperature);

    // передача термо ЭДС на компьютер
    Serial.print(" TermoEDS= ");  Serial.print(termoEDS);

    // передача ЭДС холодного спая на компьютер
    Serial.print(" CoolEDS= ");  Serial.print(coolEDS);

    // передача ЭДС рабочего спая на компьютер
    Serial.print(" WorkEDS= ");  Serial.println(workEDS);   
*/           

Для использования термометра с программой верхнего уровня Thermometer.exe из предыдущих уроков передачу этих данных на компьютер необходимо отключить, оставив только измеренную температуру.

Загрузить резидентную программу Ардуино термометра для термопары.

Настройка и калибровка термометра.

Для практического использование измерительный усилитель термометра должен обладать достаточно высокими метрологическими характеристиками. Я решил избежать применения всякого рода регулировок подстроечными резисторами, и все калибровки выполнил программно. Конечно, желательно использовать в  качестве резисторов R3, R4, R5, R6 точные, термостабильные элементы. Но и на 5% резисторах можно получить неплохие результаты при использовании термометра в условиях без значительных колебаний температуры окружающей среды.

Я выполнил следующую последовательность действий:

  • Измерил вольтметром напряжение источника опорного напряжения АЦП платы (1.1 В) и рассчитал разрешающую способность АЦП:

#define ADC_RESOLUTION  1.061523 // разрешающая способность АЦП, мВ (1087 мВ / 1024)

  • Предварительно замерил сопротивление резисторов  R3, R4 и задал в программе их значения:

#define R3  1.61    // сопротивление резистора R3, кОм
#define R4  44.2    // сопротивление резистора R4, кОм

  • Замерил смещение ЭДС на резисторе R5 и задал его в программе:

#define EDS_OFFSET  4.60  // смещение термо-ЭДС

  • Затем расположил рабочий спай рядом с холодным спаем (можно замкнуть выводы термопары) и подкорректировал EDS_OFFSET так, чтобы термо-ЭДС была равна 0. Значение термо-ЭДС контролировал в мониторе последовательного порта Arduino IDE.

Калибровка устройства

Таким образом, мы скорректировали все погрешности, кроме температурных и временных.

 

Использование Ардуино термометра совместно с персональным компьютером.

При подключении термометра к компьютеру функциональные возможности устройства расширяются. В частности появляется функция регистрации изменения температуры.

На компьютере должна быть установлена программа Thermometer из урока 24. В этом уроке есть подробное описание программы, там же можно загрузить саму программу.

Показания термометра

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

Диаграмма регистратора

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

Показания термометра

Это диаграмма.

Диаграмма регистратора

Мне кажется, в моем устройстве градуса на 2 привирает датчик температуры холодного спая. В остальном термометр получился довольно точный.

 

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

Предыдущий урок     Список уроков     Следующий урок

54 комментария на «Урок 27. Термопары в системе Ардуино. Проект Ардуино термометра-регистратора для высоких температур.»

  1. А если нужно 2 термопары, то придётся собирать 2 схемы на ОУ (от А1 до А2 на вашей принципиальной схеме). Ну и конечно же указывать в коде усреднение между двумя измеренными значениями. Я верно понял?

    • Здравствуйте!
      Нет, не обязательно. Можно использовать аналоговый коммутатор для термопар. Я когда-то делал измеритель температуры, в котором через коммутатор к одному АЦП подключались 24 термопары.

      • Я только начал свой путь) и он будет долгим и тернистым, можете пожалуйста показать где я могу подробнее прочитать про необходимый коммутатор?

        • Здравствуйте!
          Речь идет о любом аналоговом коммутаторе, лучше дифференциальном. Если желаете, откройте тему на форуме я найду старую схему контроллера термопар и выложу там.

          • Думаю для меня будет проще собрать с двумя ОУ т.к. термопары нужно всего 2. Спасибо за крайне подробные уроки)

          • Если я подключу 2 термопары через 2 ОУ, могли я объеденить у них контакт который идёт на AREF. Если нет, то как выйти из ситуации?

          • Вы можете объединить термопары в точке +5.1 мВ.

          • Минус к минусу термопары соединяются возле C3,R5,R6 (в один AREF), а плюсы идут к разным ОУ. Верно?
            Что Вы можете сказать о точности измерений, если использовать 2 MAX31855 ?

          • Да, вы правильно поняли. А что касается ОУ, то надо посмотреть параметр напряжение смещения 0. Именно он даст основную погрешность. Можете его в температуру пересчитать и решить, устроит ли вас такая точность.

  2. На основе Вашего урока вышла следующая схема.
    https://easyeda.com/lifequip/TempReader-49db1ed756ec46728e21d5d55470c264
    Без опытного образца скетч писать не было желания

    • Здравствуйте!
      Думаю, проще было использовать аналоговые коммутаторы.
      Отрицательное питание можно сделать общее. Датчик TMP36 должен быть расположен в месте холодного спая, т.е. в месте подключения выводов термопар к клеммникам или разъемам.

      • Спасибо за совет с отрицательным питанием)
        А ещё такой вопрос. Какой предел измерения температуры у ОУ OP07? И какой параметр определяет предел?
        Какой пример коммутатора Вы могли бы посоветовать?

        • Здравствуйте!
          Предел измерения температуры определяет прежде всего термопара. Усилитель на ОУ должен иметь такой коэффициент усиления, чтобы преобразовать диапазон термоэдс термопары во входной диапазон АЦП Ардуино (в нашем случае 0 … 1,1 В). В уроке есть пояснения по этому поводу.
          Можно использовать любой аналоговый коммутатор. Лучше с двумя каналами, чтобы переключать сразу оба вывода термопары. Таким образом можно сделать на одном усилителе и АЦП подключение нескольких термопар. Я когда-то подключал через аналоговый коммутатор до 24х термопар.

          • Ну термопара типа К может мерять до 1100 по тем данным, что я находил в интернете. Хватит ли ОР07 для этого?

          • Что значит хватит ли OP07. Надо установить такой коэффициент усиления, чтобы при максимальной температуре на выходе усилителя было напряжение немного меньше 1,1 В.
            По поводу коммутаторов. Если хотите, откройте тему на форуме сайта. Я поищу и выложу схему своего старого контроллера на 24 термопары.

  3. Я разобрался в том о чём Вы мне говорили.
    в итоге у меня вышел К=1100/(4,3+46)=21.8, а заменил я резистор R3 на 27 кОм чтобы был К=17,875.
    С такими цифрами теперь ардуинка увидит температуру -60 — +1100

  4. Доброго времени суток! У меня к вам сразу два вопроса.
    1. С какой точностью по данной схеме можно реально получить температуру? В частности, обеспечит ли она вычисление температуры до десятых долей градуса?
    2. Можно ли упростить схему, если нет необходимости в отрицательных температурах?

    • Здравствуйте!
      1. Точность измерения ограничена погрешностью термопар.
      2. Да. Если отрицательные температуры не нужны, то в смещении (+5,1 В) необходимости нет. Можно эту точку замкнуть на землю.

      • А как задаётся смещение. Какое соотношение номиналов резисторов. Какая закономерность?
        Это так, для общего развития)

        • Здравствуйте!
          Смещение формируется на делителе напряжения R5, R4 из AREF (1,1 В).
          Рассчитывается, как на любом резистивном делителе.
          Uсмещения = Uaref / (R5 + R4) * R4 = 1,1 / 43200 * 200 = 5,09 мВ

      • Правильно ли я понял, что в этом случае отрицательные концы термопар замыкаются на землю, а на вывод AREF ничего не подается?

        • Да, все правильно. Только еще в программе вычисления подкорректировать надо.

      • Хуже ведь не будет, если минус термопар замкнуть на землю через конденсатор 0,1 мкф?))

        • Здравствуйте!
          Нет. Надо замкнуть непосредственно. Существуют токи утечек ОУ. Они поднимут потенциал термопар.

  5. Доброго времени суток!
    Собрали усилитель на 3 термопары по Вашей схеме. Попробовали для начала замерить напряжение смещения, усиленное ОУ, для чего вместо термопар поставили перемычки. В результате величины напряжений на выходах ОУ различаются, более того, эти величины могут меняться со временем и различаться между отдельными включениями Ардуино. Кроме этого, решили замерить напряжение в точке +5.1В, подав его на дополнительный аналоговый вход, полученное значение заметно отличается от данного, примерно в 1,5-2 раза, и так же величина изменяется с течением времени. В чем тут может быть дело?

    • Здравствуйте!
      Напишите в каких пределах у вас погрешности.
      Напряжение 5,1 мВ с помощью аналогового входа измерить у вас не получится. Разрешающая способность АЦП Ардуино при ИОН 1,1 В равна 1100 мВ / 1024 = 1,0742 мВ.
      Но напряжение смещения 0 составляет 2 единицы младшего разряда. И это при опорном напряжении 4 В. в Абсолютном выражении погрешность смещения 0 равна 4 В / 1024 * 2 = 7,8 мВ. Существуют еще погрешности АЦП, можете посмотреть здесь http://mypractic-forum.ru/viewtopic.php?t=9.
      Напишите, какие у вас получились результаты. Можете открыть тему на форуме сайта. Там удобнее общаться.

      • Дело в том, что милливольтметром тоже не получается +5.1В, выходит около 8-12 мВ.

        • Может быть наводки, нестабильность питания. Вы пересчитайте эту погрешность в температуру и решите, устраивает ли она вас.

          • В том-то и дело, что не устраивает даже погрешность 10-разрядного АЦП, придется подключать внешний АЦП

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

          • С напряжением +5.1В тоже разобрался) мерил раньше напряжение между этой точкой и контактом GND контроллера. Решил замерить относительно вывода GND на плате усилителя, получилось как раз +5.1В. Хотя я почему-то думал, что GND по всей схеме должен быть одним и тем же…. (вы уж простите, я не электронщик)

          • простите еще раз, путаю разрядность… конечно же, 5.1 мВ

      • По поводу замеров, привожу полученные результаты:
        1 ОУ — на выходе вольтметром 119.4 мВ, контроллер выдает 119.97-121.48 мВ
        2 ОУ — вольтметром 115.3 мВ, контроллер — 115.57-116.93
        3 ОУ — вольтметром 113.6 мВ, контроллер — 114.32-15.57

          • Что-то не так. Может у вас плата грязная. Токи утечки. ОУ чувствительны к выводам 1 и 8. Надо разбираться.

          • подали на 4 контакт одно и то же отрицательное питание (раньше было 3 независимых), 2 из ОУ стали давать одинаковые напряжения. Третий показывает другое значение. Может ли это быть из-за того, что производители микросхем разные?

  6. То-ли я тормоз, то-ли в консерватории проблема. Разжуйте мне, что бы я смирился. Вы берете с ГОСТовской таблицы ТЭДС холодного спая равный 1мВ, при 25гр.С. Но таблица то говорит, что это ТЭДС РАБОЧЕГО спая, при температуре холодного конца равной нулю. Тут я думаю прав, ибо во всех таблицах при нуле градусов ТЭДС равна 0мВ. Это значит, что 2 проволоки разного металла соединили параллельно на противоположных концах, один конец поместили в ноль градусов, второй в 25 и получили 1мВ. И этот холодный конец — тот самый холодный спай, но из ТЕХ ЖЕ двух пар рабочего металла. Т.е. ТЭДС рабочего и холодного концов идентичны. Но при чем же тут ХОЛОДНЫЙ СПАЙ в термометре/паяльнике/термофене и т.д.? Холодный спай на практике, это соединение проводов рабочего металла с проводами, идущими к контроллеру/ОУ, и их два. Т.е. еще две термопары. В вашем случае это один холодный спай — никель-хром/медь, второй: никель-алюминий/медь. (при чем медь может и оловом 😉 ). Причем ТЭДС этих двух пар направлена встречно, а значит частично компенсируется. Следовательно погрешностью ХОЛОДНОГО спая, нужно считать РАЗНИЦУ между ТЭДС этих двух ХОЛОДНЫХ термопар. И именно эту разницу нужно закладывать в программу, как погрешность/добавку к табличной/ГОСТовсой ТЭДС рабочего конца. В чем я не прав? Разъясните мне уже и добейте, ибо у меня мозг кипит от разговоров про «ХОЛОДНЫЙ спай» от разных источников.

    • Здравствуйте!
      Я не силен в теории работы термопары. В статье больше уделил внимания практическому использованию термопар.
      Я понимаю так. В теоретических схемах холодный спай это спай проводников из тех же материалов. Два проводника из разных материалов спаяны с двух сторон. Получается контур с двумя спаями — источниками термо-ЭДС. В разрыв одного из проводников включен милливольтметр. В такой схеме понятно, что горячий и холодный спай вырабатывают термо-ЭДС по одной той же температурной зависимости. Могу предположить, что в первом приближении два спая, например, хромель-медь и алюмель-медь имеют такую же термо-ЭДС, как алюмель-хромель.
      Если докопаетесь до истины, и я окажусь не прав, то напишите. Можете открыть тему на форуме сайта. Кто-то еще поделится своими мыслями.

  7. Здравствуйте! Хотелось бы у вас спросить на какое сопротивление рассчитаны резисторы, используемые в вашем проекте. И также емкость конденсаторов и марка усилителя ?Заранее большое спасибо!)))

    • Здравствуйте!
      На принципиальных схемах есть номиналы всех компонентов. Что вы конкретно не нашли — спрашивайте.

  8. Правильно ли я понимаю, что при замыкании термопар на землю (нет смещения), то опорное напряжение будет 5В т.е. строка:
    #define ADC_RESOLUTION 1.061523 // разрешающая способность АЦП, мВ (1087 мВ / 1024)
    будет изменена на 5В/1024 (5000мВ/1024)?

    • Здравствуйте!
      Нет, не правильно. Убирается смещение 5,1 мВ и устройство не может измерять отрицательное напряжение термопары. При вычислениях необходимо EDS_OFFSET задать равным 0 или удалить этот элемент из формул.

  9. Я имею ввиду что я убрал ветку резисторов которая подключались к Аref. Вы советовали замкнуть минус термопары на землю. Значит ли это что разрешение АЦП будет вычисляться как ~5000мВ/1024? А смещение в программе я уже стёр.

    • Если вы замкнули минус термопары на земля, то ничего не изменилось, кроме того, что исчезло смещение 5,1 мВ. Источник опорного напряжения остался прежним, диапазон входного напряжения АЦП тот же (1,1 В). Все вычисляется как прежде, только надо убрать учет смещения 5,1 мВ.

      • Прочитал про метрологические параметры АЦП ардуино и понял свою проблему. Я использую ИОП внешнее питание 5,39В если быть точным. Исправил в программе и всё хорошо показывает.

  10. Интересная тема. Недавно заинтересовался темой ардуино и поэтому возникли следующие вопросы:
    1. Обязательно ли нужен усилитель? Разве Ардуино не понимает диапазон 0…50 мВ, грубо говоря? Или обязательно его надо «растягивать» до 0…1,1 В?
    2. Насколько я понимаю принцип работы термопар, термоЭДС холодного спая нужно вычитать из термоЭДС горячего спая, чтобы это значение не задваивалось. В этом легко убедится, если замерить температуру в комнате.
    3. Автор в скетче использует массив из ГОСТа термопар. ИМХО можно сделать проще: в конце этого ГОСТа есть приложение А, где есть аппроксимирующие полиномы и формула. Полиномы А — для перевода температуры в милливольты и С — обратно. Достаточно массива с этими полиномами, а их штук восемь и простенькой формулы, чтобы узнать температуру из милливольт. Но это, конечно, с вычетом коэффициента усиления. Поэтому и возник первый вопрос — обязателен ли усилитель сигнала?

    • Здравствуйте!
      1. Усилитель нужен. При ИОН 1,1 В разрешающая способность АЦП = 1100 / 1024 = 1,07 мВ. Что явно недостаточно, погрешность более 10 градусов. А с учетом погрешности АЦП значительно больше.
      2. ТермоЭДС холодного спая надо прибавлять. Проверьте случай, когда температуры горячего и холодного спаев равны.
      3. С таблицами работать намного быстрее.

  11. Извините, что придираюсь, но микрофарады на http://mypractic.ru/wp-content/uploads/2016/08/Lesson27_15.jpg следует обозначать не mk, a mcF или хотя бы mc, еще один вариант- это когда пишется незначащий десятичный ноль- 47,0 без указания единиц измерения

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *