Общие сведения:
Trema-модуль Адаптер термопары с термопарой K-типа— позволяет измерять температуру объектов и окружающей среды. Адаптер позволяет измерять температуру в диапазоне от 0 до 800 °С (при температурах от 800 до 1023 °С точность показаний резко снижается), а корпус термопары рассчитан на температуру до 600 °C, значит и измерения необходимо производить в диапазоне от 0 до 600 °С. Адаптер можно использовать для измерения температуры различных нагревательных элементов: паяльники, печи, камины, бойлеры и т.д. Можно использовать для реализации газ-контроля в газовых плитах, горелках, бойлерах и т.д.
Видео:
Характеристики:
- Напряжение питания модуля (Vcc): 3,0 … 5,5 В постоянного тока.
- Ток потребляемый модулем: до 1,5 мА.
- Уровень логической «1» на шине модуля: > 0,7 Vcc.
- Уровень логического «0» на шине модуля: < 0,3 Vcc.
- Диапазон измеряемых температур чипом: 0 … 800 °C.
- Диапазон рабочих температур термопары: 0 … 600 °С.
- Резьба термопары 6M x 1.0 мм (для крепления нужен ключ на 10).
- Длина кабеля термопары 0,5 м.
Подключение:
Выводы термопары подключаются к клеммнику на модуле:
- синий контакт — термопары к выводу «T-»;
- красный контакт — термопары к выводу «T+»;
Выводы модуля DO, CS и CSK подключаются к любым выводам Arduino, номера которых указываются в скетче при объявлении объекта библиотеки max6675.
- Модуль удобно подключать 3 способами, в зависимости от ситуации:
Способ — 1 : Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.
Способ — 2 : Используя Trema Set Shield
Модуль можно подключить к любому из цифровых или аналоговых входов Trema Set Shield.
Способ — 3 : Используя проводной шлейф и Shield
Используя 3-х и 2-х проводной шлейфы, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Питание:
Входное напряжение питания от 3,3 или 5 В подаётся на выводы Vcc и GND.
Подробнее о датчике температуры:
В основу работы термопары заложен термоэлектрический эффект, это процесс возникновения ЭДС (электродвижущей силы) на спайке (соединении) разнородных металлов, интенсивность которой прямо пропорциональна температуре в месте этого соединения. Возникающая в термопаре ЭДС очень мала и её нельзя измерить используя аналоговые входы Arduino, но с этой задачей справляется чип max6675. Сигнал с термопары сначала поступает на операционные усилители чипа, а уже потом на 12 битный АЦП, далее данные выводятся по шине SPI в виде двух байт, старшие 12 бит которых являются числом температуры. Для преобразования 12 битного числа в °C его нужно разделить на 4, получается что температура выводится с разрешением 0,25 °C. Так как данные из чипа только читаются, без отправки данных чипу, то на его шине SPI отсутствует вывод MOSI. Немаловажным фактом является и то, что в чипе max6675 реализована функция компенсации холодного спая. Дело в том, что ЭДС возникает не только на спае металлов термопары, но и на соединении этих металлов с проводом, что без функции компенсации холодного спая влияло-бы на показания температуры.
Для работы с чипом max6675 рекомендуем воспользоваться одноимённой библиотекой max6675, которая реализует получение данных чипа по программной шине SPI, значит, для подключения можно использовать любые выводы Arduino.
Пример:
Вывод температуры в монитор последовательного порта в градусах Цельсия и Фаренгейта.
В библиотеке max6675 реализовано всего 2 функции: readCelsius() и readFahrenheit(). Они не принимают никаких параметров, а только возвращают температуру в виде числа типа double. Обе функции приведены в строках скетча 15 и 17.
При создании объекта нужно указать номера выводов Arduino к которым подключён модуль (вывод SCK , вывод CS , вывод DO), как это сделано в 5 строке скетча.
Ссылки:
- DataSheet;
- Библиотека max6675 для работы с одноимённым чипом на модуле датчика температуры;
- Trema-модуль Нормализатор термопары;
- Термопара К-типа;
Подключение термопары к Arduino через MAX6675
- Подробности
- Создано: 29 сентября 2015
Термопара отличается от других датчиков температуры низкой стоимостью, скоростью измерения и большим диапазоном «горячих» температур, обычно от 0 до 400 ºC. Но напрямую к Ардуино ее не подключить, прийдется использовать преобразователь на базе чипа MAX6675.
Схема подключения
Для подачи питания и земли будем использовать 5й и 6й контакты на плате Arduino.
Скетч
Для работы понадобится библиотека MAX6675
#include"max6675.h"intthermoDO= 2; //он же SOintthermoCS= 3;intthermoCLK= 4; //он же SCKMAX6675thermocouple(thermoCLK,thermoCS,thermoDO);intvccPin= 5; //пин для питанияintgndPin= 6; //пин для землиvoidsetup(){ Serial.begin(9600); //активируем питание и землю pinMode(vccPin,OUTPUT);digitalWrite(vccPin,HIGH); pinMode(gndPin,OUTPUT);digitalWrite(gndPin,LOW); Serial.println("MAX6675 test"); //ждем стабилизации чипа MAX delay(500);}voidloop(){ //Выводим показания в монитор порта Serial.print("C = "); Serial.print(thermocouple.readCelsius()); Serial.print("; F = "); Serial.println(thermocouple.readFahrenheit()); delay(300);}
Результат работы MAX6675
Добавить комментарий
Серия статей об измерении температуры контроллерами Ардуино была бы неполной, без рассказа о термопарах. Тем более что измерять высокие температуры больше нечем.
Предыдущий урок Список уроков Следующий урок
Все термодатчики из предыдущих уроков позволяли измерять температуру в диапазоне не шире – 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. Типичная, широко распространенная ТХА термопара от тестера. Ее я и буду использовать в термометре.
На упаковке указаны параметры:
- тип K;
- диапазон измерения – 60 … + 400 °C;
- точность ±2,5 % в диапазоне до 400 °C.
Диапазон измерения указан для кабеля из стекловолокна. Существует похожая термопара TP-02, но с зондом длиной 10 см.
У 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%. Предварительно замерил их реальное сопротивление и учел это в программе.
Для отладки программы и проверки работы устройства я собрал его на макетной плате.
Измеритель я спаял отдельным макетом. На беспаечной макетной плате он вряд ли бы заработал. Все связи должны быть минимальной длины, все соединения компонентов – надежно спаянными.
Программное обеспечение устройства отличается от программ термометров из трех предыдущих уроков только блоком вычисления температуры рабочего спая термопары. Я не буду приводить всю программу термометра в статье. Покажу только программные модули обработки данных термопары.
Полностью резидентную программу термометра для термопары можно загрузить по ссылке:
Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!
Я напомню, последовательность действий, которую необходимо выполнить в программе:
- измерить термо-ЭДС на выводах термопары;
- измерить температуру холодного спая;
- по таблице НСХ термопары определить термо-ЭДС холодного спая;
- определить термо-ЭДС рабочего спая, т.е. прибавить ЭДС холодного спая к общей термо-ЭДС;
- по таблице НСХ термопары определить температуру рабочего спая, используя термо-ЭДС рабочего спая.
Прежде всего, в программе необходима таблица номинальной статической характеристики (НСХ) термопары. Возьмем ее из ГОСТ Р 8.585-2001 для термопары типа K. В документе она задана для каждого градуса.
Нам необходима часть таблицы от – 60 до + 700 °C. Массив значений термо ЭДС для термопары будет выглядеть так.
float termTable[761] = { 29.129 };
Нулевой элемент массива содержит значение термо-ЭДС для температуры – 60 °C, 760 элемент – для + 700 °C.
Не думайте, что я набирал массив termTable вручную. Я создал его в текстовом виде, затем сделал автозамену пробелов на запятые.
Массив имеет размер 761 элемент. Каждое значение типа float, т.е. 4 байта. Для создания такого массива в ОЗУ не хватит места. Да и зачем он в ОЗУ, если мы его не собираемся менять. Поэтому массив надо разместить в программной памяти, т.е. FLASH памяти.
В памяти программ могут размещаться только данные, которые не требуется изменять в ходе выполнения программы. Я вижу две основные причины хранения данных во FLASH памяти:
- недостаточно оперативной памяти для хранения данных;
- данные требуют высокой надежности хранения, они не должны измениться даже при сбое работы программы.
В Ардуино функции управления данными в памяти программ предоставляет библиотека pgmspace.h. Поэтому, прежде всего, необходимо подключить эту библиотеку.
Искать ее в интернете и загружать не надо. Это стандартная библиотека, находится в папке Arduino. У меня в D:Arduinohardwaretoolsavravrincludeavr 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 из предыдущих уроков передачу этих данных на компьютер необходимо отключить, оставив только измеренную температуру.
Загрузить резидентную программу Ардуино термометра для термопары можно по ссылке:
Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!
Настройка и калибровка термометра.
Для практического использование измерительный усилитель термометра должен обладать достаточно высокими метрологическими характеристиками. Я решил избежать применения всякого рода регулировок подстроечными резисторами, и все калибровки выполнил программно. Конечно, желательно использовать в качестве резисторов 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 привирает датчик температуры холодного спая. В остальном термометр получился довольно точный.
По крайней мере, мы использовали самую точную методику измерения температуры с помощью термопары.
Предыдущий урок Список уроков Следующий урок
Поддержать проектИспользуемые источники:
- https://wiki.iarduino.ru/page/trema-max6675/
- https://2150692.ru/faq/74
- http://mypractic.ru/urok-27-termopary-v-sisteme-arduino-proekt-arduino-termometra-registratora-dlya-vysokix-temperatur.html