24 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Цифровой термометр на термопаре схема. Измерение температуры с помощью термопары и микроконтроллера AVR

Термометр на Attiny85 и термопаре

В этой статье приводится схема термометра на термопаре, способном измерять температуры до +1350°C, собранном на ATtiny85 и OLED-дисплее. В проекте используется АЦП ATtiny85’s с функцией усиления на 20 для измерения напряжения на термопаре, а также внутренний датчик температуры для измерения температуры окружающей среды (отображается в нижней сроке дисплея). Точность измерений -6 ) = 1.31°C

  • Макс. значение= 1024 x 1.31 = 1341°C.
  • Используя оверсемплинг можно добитсья разрешения менее 1°C, что более чем достаточно для многих задач.

    ATtiny85 — один из немногих контроллеров AVR, имеющих усилитель на входах АЦП; также его имеют ATtiny861, ATtiny167 и ATmega1284P.

    Несмотря на то, что K-термопары могут измерять температуры до -200°C, для простоты проекта в программе реализовано измерение температур больше комнатной.

    Получение температуры

    Как преобразовать напряжение на термопаре в температуру?

    Простейший способ — это принять, что отношение напряжения к температуре имеет линейную зависимость в 41мкВ/°C. Для узких температурных диапазонов это достаточное приближение; однако, на больших диапазонах отклонение от линейности уже заметно.

    Для максимальной точности можно вычислчть полином 9го прядка, используя специальные коэффициенты для К-термопары. Однако для данного проекта это не актуально.

    Подход, который здесь использован — это кусочно-линейная модель, аппроксимирующая стандартную кривую отклика серией прямых сегментов. Я искал температуру для серии фиксированных точек, соответствующих показаниям АЦП, кратным 128, используя онлайн-калькулятор температуры термопары:

    Затем они были закодированы в виде следующего массива констант, в десятых долях градуса, для линейной интерполяции температуры:

    Принцип работы термопары

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

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

    Спаи термопары

    В конструкции большинства термопар предусмотрен только один спай. Однако, когда термопара подсоединяется к электрической цепи, то в точках ее подсоединения может образовываться еще один спай. Холодный спай представляет собой дополнительный спай, который образуется, когда термопара подсоединяется к цепи. Этот спай называется свободным (холодным) спаем термопары. Другой спай — это рабочий (горячий) спай. В цепи находится измерительный прибор, который измеряет разницу величин напряжения на двух спаях.

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

    Читать еще:  Лицензионные ключи виндовс 10 домашняя. Обновление домашней версии ОС на профессиональную

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

    Холодный спай термопары

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

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

    Если температура вокруг холодного спая меняется, то величина напряжения на холодном спае также изменится. В результате изменится напряжение на холодном спае. И как следствие разница в напряжении на двух спаях тоже изменится, что в конечном итоге приведет к неточным показаниям температуры.

    Для того, чтобы сохранить температуру на холодном спае на неизменном уровне во многих термопарах используются компенсирующие резисторы. Резистор находится в том же месте, что и холодный спай, так что температура воздействует на спай и резистор одновременно. Второй способ коррекци вычислений — измерение температуры холдного спая и внесение поправок в вычисление температуры горячего спая. К счастью в ATtiny85 есть встроенный температурный датчик, так что данный термометр использует его для вычисления температуры холодного спая.

    Рабочий спай термопары (горячий)

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

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

    Схема термометра на термопаре

    Вот схема термометра на Attiny85, термопере и OLED дисплее:

    Для индикациия выбран I2C 128×32 OLED-дисплей. Резистор 33kΩ и конденсатор 0.1 µF обеспечивают сброс дисплея при подаче питания, хотя они могут и не понадобиться.

    Использована термопара K-типа.

    Программа

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

    Измерение внутренней температуры

    Процедура настройки АЦП для измерения внутренней температуры заключается в следующем:

    Процедура ReadInternal() выполняет чтение; она просто переводит процессор в спящий режим. АЦП генерирует прерывание для пробуждения процессора после завершения преобразования, после чего программа считывает и возвращает значение регистра АЦП:

    Читать еще:  Программа для рисования машин. Программа для создания артов: описание и возможности

    Измерение напряжения термопары

    Аналогичная процедура настраивает АЦП для измерения термопары:

    Процедура ReadThermocouple () фактически производит чтение:

    Преобразование термоэлектрического напряжения в температуру

    Значение АЦП из ReadThermocouple () преобразуется в температуру с помощью кусочно-линейной интерполяции, как описано в разделе Получение температуры выше. Для большей точности используется сумма четырех последовательных показаний АЦП; процедура Convert () принимает это значение и использует значения в массиве Temperature[] для преобразования его в температуру, в градусах::

    Если параметр для Convert() является точным кратным n от 512, то температур равнаs Temperature[n]/10. В противном случае температура интерполируется между Temperature[n] и Temperature[n+1].

    Отображение информации

    Наконец, главная функция в loop () считывает внутреннюю температуру и температуру термопары каждую секунду и отображает показания на дисплее. Для каждого измерения берется среднее из 16 последовательных показаний, чтобы уменьшить шум:

    Повышение точности

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

    Внутренний датчик температуры

    Если внутренний датчик неисправен, все показания будут искажены этой ошибкой. Поэтому рекомендуется калибровать датчик при комнатной температуре по отношению к известному (поверенному) термометру следующим образом:

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

    Смещение АЦП

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

    • Отключите термопару и поставьте перемычку между двумя дифференциальными входами, PB3 и PB4, чтобы получить нулевое значение на входе.
    • Обратите внимание на разницу между показаниями термопары и внутренней температурой.
    • Установите константу ADCOffset в программе на требуемую поправку, чтобы сделать эту разницу нулевой.

    Тестирование

    Обратите внимание, что перед использованием термометра термопары в точных задачах вы должны протестировать его при известных температурах. Этот термометр проверялся с помощью промышленного термометра в кипящей воде при 100°C и в оливковым масле при 220°C, и показания были в пределах 5°C в каждом случае.

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

    Компиляция программы

    Компилировалась программа с помощью Spence Konde’s ATTiny Core. Нужно выбрать контроллер ATtiny25/45/85 в разделе ATTinyCore меню Board. Затем проверьте, что следующие параметры установлены данным образом (игнорируйте другие параметры):

    Chip: «ATtiny85»
    Clock: «1 MHz (internal)»
    B.O.D: «B.O.D. Disabled»
    Timer 1 Clock: «CPU»

    Это настройки фьюхов по умолчанию для нового ATtiny85, но если вы ранее использовали ATtiny85 с другими настройками, выберите Burn Bootloader, чтобы установить фьюзы соответствующим образом.

    Затем загрузите программу с помощью ISP (внутрисистемное Программирование);

    Урок 12. Измерение температуры при помощи AVR. Простой термометр на AVR.

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

    Характеристики датчика: диапазон измерения от -55 до +125°С. Точность измерения ±0,5°С гарантируется в диапазоне от -10 до +85°С. Возможность измерения с разрешением 9, 10, 11 и 12 бит, т.е. с шагом 0,5; 0,25; 0,125; 0,0625°С. Для обмена информацией с AVR микроконтроллером используется 1-Wire протокол. Каждый датчик имеет свой уникальный адрес, поэтому имеется возможность посадить на шину сразу несколько датчиков.

    Читать еще:  Программа которая делает скриншоты с экрана автоматически. Обзор ScreenMaster – программы для скрытого наблюдения за компьютером

    Для сборки схемы понадобится жк дисплей, датчик и резистор на 4,7кОм. Теперь перейдем непосредственно к прошивке.

    #include #include // 1 Wire Bus functions #asm .equ __w1_port=0x18 ;PORTB .equ __w1_bit=2 #endasm #include #include // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x12 ;PORTD #endasm #include #include char lcd_buf[17]; void main(void) < float temper; lcd_init(16); w1_init(); ds18b20_init(0,-20,50,DS18B20_12BIT_RES); while(1) < temper=ds18b20_temperature(0); sprintf(lcd_buf,"t=%.1fxdfC",temper); lcd_clear(); lcd_puts(lcd_buf); delay_ms(1500); >; >

    Теперь обо всем по порядку:

    #asm .equ __w1_port=0x18 ;PORTB .equ __w1_bit=2 #endasm

    Данный код означает, что датчик подключен к порту В, PB2 ножке

    Используется протокол 1wire, тип датчика ds18b20

    float temper; w1_init(); ds18b20_init(0,-20,50,DS18B20_12BIT_RES);

    Переменная temper (с плавающей точкой) используется для хранения температуры,
    w1_init(); — ищем датчик,
    ds18b20_init(0,-20,50,DS18B20_12BIT_RES); — настройка датчика: 0-номер датчика, -20 -нижний предел измерения, 50 — верхний предел измерения,
    DS18B20_12BIT_RES используется 12 битный режим(с шагом 0,0625°С). В принципе настройку можно не производить, по умолчанию выставлен 12 битный режим. Показано лишь для того, чтобы вы могли самостоятельно изменить режим измерения, если это понадобится.

    temper=ds18b20_temperature(0); sprintf(lcd_buf,»t=%.1fxdfC»,temper); lcd_clear(); lcd_puts(lcd_buf); delay_ms(1500);

    temper=ds18b20_temperature(0); — читаем значение температуры с датчика
    sprintf(lcd_buf,»t=%.1fxdfC»,temper); преобразовываем к понятному для lcd виду %.1f — вывод числа с плавающей точкой 1 знак после запятой, не забываем в свойствах проекта указать (s)printf features float.
    xdf — вывод на экран значка градуса.

    В результате должно получиться нечто похожее

    Отрицательной температуры поблизости не было :D, поэтому попробовал остудить бутылочкой соуса из холодильника, результат что то не сильно впечатлил.

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

    Проект доступен тут
    Проект для DS18s20
    Проект для двух датчиков
    Проект для DS18b20 на семисегментниках
    Проект Алексея(Alyes)для Atmega16 и шести сегментов + бонус видео устройства

    247 комментариев: Урок 12. Измерение температуры при помощи AVR. Простой термометр на AVR.

    Здравствуйте! На семисигментниках собрал термометр с отображением до десятых долей градуса.В протеусе все ОК.В железе при вкл на индикаторе отображается ересь-как будто два итображения чисел вместе накладываются Железо вроде ОК ( с программой на два знака(целые значения температуры) все норм работает!Программу тоже пошагово проверял все нормально. Может кто подскажет в чем дело-писал пропеты и посложнее и все получалось , а тут споткнулся…

    это нормально попробуйте реже опрашивать для начала.

    Здравствуйте Уважаемый Admin! Подскажите пожалуйста как в Codevisionavr 2.05 сделать проект с двумя и более температурными датчиками DS18B20? В конце Вашей статьи есть Проект Алексея(Alyes), выполненный в CVAVR 2.05, но заставить работать его с двумя датчиками никак не могу добиться. Подскажите пожалуйста куда какие стоки нужно добавить?
    Спасибо.

    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.0 Professional
    Automatic Program Generator
    © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    // 1 Wire Bus interface functions
    #include

    // DS1820 Temperature Sensor functions
    #include

    void main(void)
    <
    // Declare your local variables here
    float temper;
    unsigned int x;

    // 1 Wire Bus initialization
    // 1 Wire Data port: PORTD
    // 1 Wire Data bit: 7
    // Note: 1 Wire port settings must be specified in the
    // Project|Configure|C Compiler|Libraries|1 Wire IDE menu.
    w1_init();
    ds18b20_init(0,-20,50,DS18B20_12BIT_RES);

    // Global enable interrupts
    #asm(«sei»)

    while (1)
    <
    temper=ds18b20_temperature(0);
    if (temper>1000)
    <
    temper=4096.0-temper;
    minus=1;
    >

    x=temper*10;
    nom4=x%10;//разборка целого числа на отдельный сегмент…
    x=x/10;
    nom3=x%10;
    nom2=x/10;
    nom5=10;
    nom6=11;
    if(minus==0)
    <
    nom1=12;
    >
    else
    <
    nom1=13;
    >
    >
    >

    Ссылка на основную публикацию
    Статьи c упоминанием слов:
    Adblock
    detector