Table of Contents

Térmistor

Teoria

Térmistor NTC

Um térmistor é um tipo de resistência em que a resistância varia com a temperatura. Existem dois tipos de térmistores: coeficiente positivo de temperatura de resistência e de coeficiente negativo de temperatura de resistência. A resistência de térmistores com coeficiente positivo está a aumentar quando a temperatura aumenta, o negativo diminui. As respectivas siglas são PTC e NTC.

A dependência da temperatura não é linear e isto complica o uso do mesmo. Para medições precisas de temperatura em fluctuações mais amplas é usada a equação exponencial de terceira ordem de Steinhart-Hart, dado que a resistência de térmistores é linear apenas num pequeno intervalo de temperatura. Existe a seguinte equação Steinhart-Hart simplificado com parâmetro B para termistores NTC:

A relação entre temperatura e resistência num térmistor NTC.

onde:

  • T0 - temperatura nominal, 25 °C tipicamente.
  • R0 - resistância à temperatura nominal.
  • B - parâmetro B.

Parâmetro B é um coeficiente habitualmente fornecido na datasheet do térmistor. É somente suficiente constante estável entre certas gamas de temperatura, por exemplo entre a gama 25–50 °C ou 25–85 °C. Se a gama de temperatura estiver para fora destes limites a datasheet tem de ser usada para obter a equação.

Normalmente, um divisor de tensão é usado para medir a resistância de um térmistor, onde uma resistência é substituída com um térmistor e a tensão de entrada é constante. A tensão do divisor de tensão de saída é medido, que varia de acordo com a alteração da resistência do térmistor. Se a tensão é aplicada, a corrente passa através do térmistor que aquece o térmistor devido à resistância e, portanto, altera a resistência de novo. A falha provocada pelo aquecimento do térmistor pode ser compensada com cálculos, mas é mais fácil de usar um térmistor que tem maior resistância e que, portanto, aqueça menos.

Com recursos limitados e com menos exigências de precisão, gráficos e tabelas préviamente calculados para temperaturas são usados. Geralmente as mesas têm gamas de temperaturas e respectivos valores de resistência, tensão ou conversores analógico-digital. Todos os cálculos exponenciais já foram feitos e o usuário precisa apenas de encontrar a linha correcta e ler a temperatura dada.

Prática

O módulo de sensor do HomeLab está equipado com um térmistor NTC que tem 10 kΩ resistância nominal. Em temperaturas de 25-50 °C o parâmetro B do térmistor é de 3900. Um pino do térmitor está conectado à alimentação e o outro está ligado ao conversor analógico-digital (HomeLab II canal 2 e HomeLab III canal 14). Uma resistência típica de 10 kQ, também está ligada com o mesmo pino do microcontrolador e à terra, e em conjunto com o térmistor formam um divisor de tensão. Uma vez que estamos lidando com um térmistor NTC, cuja resistância diminui quando a temperatura aumenta; a tensão de saída do divisor de tensão está a aumentar com o crescente da temperatura.

Embora usando o AVR seja prático utilizar uma tabela de conversão de valores de temperatura e conversor analógico-digital para encontrar a temperatura correcta. É boa prática encontrar o valor correspondente do conversor analógico-digital para cada grau de temperatura do intervalo desejado de temperatura porque a tabela inversa será demasiado grande devido à quantidade de valores de ADC 10 bits. Recomenda-se usar qualquer tipo de programa de folha de cálculo (MS Excel, LibreOffice Calc, etc.) para fazer a tabela. A fórmula Steinhart-Hart que é customizada para os térmistores NTC mencionados é capaz de encontrar a resistência do termistor, que corresponde à temperatura. Derivado da resistência, é possível calcular a tensão de saída do divisor de tensão e usar esta tensão de saída para calcular o valor do ADC. Os valores calculados podem ser inseridos no programa da seguinte forma:

// Table for converting temperature values to ADC values
// Every element of the array marks one Celsius degree
// Elements begin from -20 degree and end at 100 degree
// There are 121 elements in the array
const signed short min_temp = -20;
const signed short max_temp = 100;
 
const unsigned short conversion_table[] =
{                           
	91,96,102,107,113,119,125,132,139,146,153,
	160,168,176,184,192,201,210,219,228,238,247,
	257,267,277,288,298,309,319,330,341,352,364,
	375,386,398,409,421,432,444,455,467,478,489,
	501,512,523,534,545,556,567,578,588,599,609,
	619,629,639,649,658,667,677,685,694,703,711,
	720,728,736,743,751,758,766,773,780,786,793,
	799,805,811,817,823,829,834,839,844,849,854,
	859,863,868,872,876,880,884,888,892,896,899,
	903,906,909,912,915,918,921,924,927,929,932,
	934,937,939,941,943,945,947,949,951,953,955
};

Seguindo algoritmo pode ser utilizado para encontrar a temperatura que corresponde aos parâmetros do ADC:

// Converting the ADC values to Celsius degrees:
signed short thermistor_calculate_celsius(unsigned short adc_value)
{
	signed short celsius;
 
	// Covering the table backwards:
	for (celsius = max_temp - min_temp; celsius >= 0; celsius--)
	{
		// If the value in the table is the same or higher than measured 
		// value, then the temperature is at least as high as the 
		// temperature corresponding to the element
		if (adc_value >= conversion_table[celsius]))
		{
			// Since the table begins with 0 but values of the elements 
			// from -20, the value must be shifted
			return celsius + min_temp;
		}
	}
 
	// If the value was not found the minimal temperature is returned
	return min_temp;
}

As pesquisas de algoritmos vão desde a mesa onde o valor ADC se encontra, e adquire o escalão mais inferior deste intervalo. O número de classificação marca graus, adicionando a temperatura primária a esta temperatura com uma precisão de 1 grau.

Este quadro de conversão e função já estão na biblioteca do HomeLab, portanto, não há necessidade de escrevê-los para este exercício. Na biblioteca a função de conversão é chamada thermistor_calculate_celsius. Deve ser considerado que a conversão só é válida quando utilizado no térmistor no módulo de Sensores do HomeLab. Para a utilização de outros térmistores, uma tabela de conversão tem de ser criada e funções mais complexas descritas no manual da biblioteca devem ser usadas. O programa de exemplo deste exercício é um termômetro, que mede a temperatura na escala Celsius e exibe-lo num LCD alfabético.

// Example program of the thermistor of Sensors module
// The temperature is displayed on the LCD
#include <stdio.h>
#include <homelab/adc.h>
#include <homelab/module/sensors.h>
#include <homelab/module/lcd_gfx.h>
#include <homelab/delay.h>
 
// Robotic Homelab II
//#define ADC_CHANNEL 2
 
// Robotic Homelab III
#define ADC_CHANNEL 14
 
// Main program
int main(void)
{
	unsigned short value;
	signed short temperature;	
	char text[16];
 
	// Initialization of LCD
	lcd_gfx_init();
 
	// Clearing the LCD and setting backlight
	lcd_gfx_clear();
        lcd_gfx_backlight(true);
 
	// Name of the program
        lcd_gfx_goto_char_xy(1, 1);
	lcd_gfx_write_string("Thermometer");
 
	// Setting the ADC
	adc_init(ADC_REF_AVCC, ADC_PRESCALE_8);
 
	// Endless loop
	while (true)
	{
		// Reading the 4 times rounded values of the voltage of the 
		// thermistor
		value = adc_get_average_value(ADC_CHANNEL, 4);
 
		// Converting the values of ADC into celsius scale
		temperature = thermistor_calculate_celsius(value);
 
		// Converting the temperature in to text
		// To display the degree sign, the octal variable is 56
		sprintf(text, "%d\56C   ", temperature);
 
		// Displaying the text in the beginning of the third row of the LCD
		lcd_gfx_goto_char_xy(5, 3);
		lcd_gfx_write_string(text);
 
                hw_delay_ms(1000);
	}
        return 0;
}
pt/examples/sensor/thermistor.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0