Conhecendo os termistores NTC


Termistores NTC são sensores de temperatura baratos e fáceis de serem encontrados. São basicamente dispositivos cuja resistência cai com o aumento da temperatura. Quando precisamos apenas detectar a passagem por um dado valor de temperatura, eles são uma solução muito adequada em termos de relação custo/benefício. Mas quando precisamos medir a temperatura em uma faixa de operação maior, a coisa se complica um pouco. A curva de resposta de um termistor NTC não é nada linear, e além disto as constantes que determinam esta curva muitas vezes não são fornecidas quando compramos resistores no mercado local.

Vamos mostrar agora como podemos levantar as características de termistores NTC e como podemos utilizar este dispositivo para implementar termômetros ou sistemas de controle de temperatura de baixo custo, utilizando também o microcontrolador ATMEGA386, disponível nas placas Arduino UNO.

Atenção: Em um experimento real, temos que levar em conta as limitações dos instrumentos de medida e do processo em si. No nosso caso a incerteza do termômetro utilizado, baseado nas especificações do fabricante, era de 2 graus. Portanto, não podemos esperar que nossas medidas com o termistor sejam melhores do que isto.

Caso deseje, você pode conhecer mais sobre a equação de Steinhart e Hart em https://pt.wikipedia.org/wiki/Term%C3%ADstor .

O modelo matemático de um NTC

Uma equação muito utilizada para modelar um NTC é a chamada equação de Steinhart e Hart. É uma expressão empírica que mapeia o valor da resistência com a temperatura onde está o dispositivo. Quando os coeficientes A B e C são obtidos com instrumentação de precisão, a equação resulta em um erro inferior a 0.02 graus centígrados numa faixa em torno de 200 graus. No caso do levantamento dos valores de A b e C com instrumentos “hobystas”, de baixa precisão, erros da ordem de grau devem ser esperados.

.Equação de Steinhart e Hart
T = 1 / (A + B*ln(R) + C*{ln(R)}^3)

sendo T a temperatura em Kelvin, R a resistência em ohms, e A, B e C constantes que deveriam ser fornecidas pelo fabricante. Mas, na prática do dia a dia muitas vezes não sabemos quem é o fabricante do NTC, e precisamos determinar nós mesmos o valor de A, B e C.

Se formos utilizar a temperatura em graus centígrados, lembre-se de que a conversão de Kelvin para Centígrados é dada por:

C = K - 273.15

Levantando pares de dados para solucionar a equação

Para obtermos os valores de A, B e C temos que realizar três medidas de resistência , separadas pelo menos por 10 graus cada (supondo que iremos medir temperatura na faixa de 0 a 100 graus centígrados). Teremos então três equações e três incógnitas, que podem ser resolvidas facilmente.

Para a realização deste experimento iremos necessitar de um termômetro, de preferência digital devido a facilidade de operação, e de um ohmímetro. Um copo com água aquecida a uns 40 graus e um pouco de gelo complementam o material necessário. O termistor selecionado para este experimento possui uma resistência nominal de 1000 ohms a 25 graus centígrados. Na figura a seguir vemos como é fisicamente este termistor:

Termistor utilizado

As figuras a seguir mostram os passos do experimento:

Material necessário: Ohmímetro, termômetro, termistor, filme plástico para isolamento, copo com água a diferentes temperaturas.

Material utilizado

Isole a ligação dos cabos do ohmímetro com o termistor de modo que a água não entre. Não use muitas camadas do filme plástico para não criar um isolamento térmico entre o termistor e a água.

Impermeabilizando o termistor

Insira a haste do termômetro e o termistor no copo com água à temperatura ambiente. Anote o par de valores temperatura e resistência. Nosso caso resultou em:

  • 21.8 graus ………1238 ohms

Coloque agora duas pedras de gelo na água e observe a temperatura cair até que o termômetro mostre uma certa estabilidade. Anote este novo par. No nosso caso:

  • 3.0 graus ……….2330 ohms

Para terminar aqueça um pouco de água a cerca de 40 graus (suportável ao toque) e anote os valores. Lembre-se de esperar o termômetro estabilizar:

  • 61.0 graus ……… 380  ohms

Com apenas três pares de dados podemos montar um sistema de equações que nos permite calcular os valores das constantes A, B e C. Mas é bem interessante que, ao longo do experimento e antes de iniciar os cálculos, você levante inúmeros outros pares de pontos resistência x temperatura, pois estes valores irão servir para validarmos as constantes que determinamos.

Sequência de cálculo

 Tabule os três pares de pontos encontrados experimentalmente e que cobrem o maior faixa possível de medida

.Tabela de pares de valores encontrados para calibração:

Temperatura (K) Resistência (Ohms)
276.16 2330
294.95 1238
334.15 380
 Calcule L1, L2 e L3,  logaritmos neperianos de cada valor de resistência

L_1 = ln(2330) = 7.7536

L_2 = ln(1238) = 7.1212

L_3 = ln(380) = 5.9401

 Calcule os inversos dos valores de temperatura em Kelvin

Y_1 = 1 / 276.16 = 3.6210 * 10 ^{-3}

Y_2 = 1 / 294.95 = 3.3904 * 10 ^{-3}

Y_3 = 1 / 334.15 = 2.9926 * 10 ^{-3}

 Calcule os valores intermediários K2 e K3:

K_2= (Y_2 - Y_1) / (L_2 - L_1) = (3.3904 * 10 ^{-3} - 3.6210 * 10 ^{-3}) /(7.1212 -7.7536)

K_2= 364.6426 * 10^{-6}

K_3= (Y_3 - Y_1) / (L_3 - L_1) = (2.9926 * 10 ^{-3} - 3.6210 * 10 ^{-3}) /(5.9401 - 7.7536)

K_3= 346.5123 * 10^{-6}

 Calcule a constante C:

C= ((K_3 - K_2) / (L_3 - L_2)) * ( 1 / (L_1 + L_2 + L_3))

C= 7.48  * 10^{-7}

 Calcule a constante B:

B= K_2 - C * ({L_1}^2 + L_1 L_2 + {L_2}^2)

B= 240.7620 * 10^{-6}

 Calcule a constante A:

A= Y_1 - L_1 * (B + C * {L_1}^2)

A= 1.4056 * 10^{-3}

Com estes dados podemos calcular a temperatura dada qualquer resistência. Vamos testar com os pares adicionais de temperatura/resistência que levantamos em nosso experimento:

Agrupando os valores das constantes:

A= 1.4056 10-3
B=  240.7620 10⁻6
C= 7.48 10-7

Para maior clareza, repetimos aqui a fórmula que associa a resistência à tempertura.

T = 1 / (A + B*ln(R) + C*{ln(R)}^3)

 

 

Fórmulas para cálculo do valor do resistor em função da temperatura

Até agora vimos como calcular a temperatura dado um valor de resistência do NTC. Mas muitas vezes necessitamos de saber o valor de resistência esperado para uma dada temperatura. Neste caso podemos utilizar as seguintes fórmulas.

 Calcule o valor intermediário "x"

x= (A*T-1) / (T*C)

 Calcule o valor intermediário "y"

y= sqrt {  ((B / (3 C))^3} + (x / 2)^2 }

 Calcule o valor da resistência para uma dada temperatura (em Kelvin)

R = exp { ( root {3} {y - x/2} - root {3} {y + x / 2} ) }

Com os procedimentos acima e as fórmulas informadas, já temos informação suficiente para projetarmos o circuito de entrada de um sistema de aquisição de dados de temperatura.  Mas antes de fechar o dia vamos a um script Python que faz todos estes cálculos para nós e de quebra ainda mostra um gráfico de como fica a variação de resistência do nosso sensor em função da temperatura.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  termistor0.py
#  
#  Copyright 2017 tavares <tavares@tavares-Inspiron-5558>
#  
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.
#  
#  
import numpy as np
import matplotlib.pyplot as plt


"""
configure os darrays com a temperatura e a resistencia medidas
temperatura em centigrados
"""

#pontos para termistor de 1K
temp= np.array([3.0 ,21.8 , 61.0])
res= np.array([2330.0, 1238.0, 380.0])


"""
Informe a faixa de variação de temperatura a ser utilizada no gráfico
"""
tmin= 0.0           # valor da menor temperatura (centigrado)
    
tmax= 100.0         # valor da maior temperatura (centigrados)
        
nPontos= 100        # numero de pontos a calcular no intervalo




def main(args):
    
    tempK= temp + 273.15
    tminK= tmin + 273.15
    tmaxK= tmax + 273.15
    
    
    L = np.log(res)
    
    Y = (1.0/tempK)
    
    K2= (Y[1] - Y[0]) / (L[1] - L[0])
    
    K3= (Y[2] - Y[0]) / (L[2] - L[0])  
    
    c1= (K3-K2)/(L[2]-L[1])
    C= c1/ (L[0]+L[1]+L[2])
    
    C= (K3 - K2)/( (L[2]-L[1]) * (L[0]+L[1]+L[2]))
      
    B= K2 - (C * (L[0]*L[0] + L[0]*L[1] + L[1]*L[1]))
      
    A= Y[0]- (L[0]*(B + C * L[0]*L[0]))  
    
    # criamos um vetor com os pontos de temperatura calculados
    pontosTemp = np.linspace(tminK, tmaxK, nPontos, endpoint=True)
    
    #calculamos os valores de resistencia correspodentes
    x = (A * pontosTemp - 1)/(pontosTemp * C)
    
    y= np.sqrt((B/(3.0 * C))**3  + (x/2)**2)

    resist= np.exp ( np.cbrt(y - x/2.0) - np.cbrt(y + x/2.0))
    
        
    plt.plot(pontosTemp-273.15, resist)
    plt.show()
    
    
    #descomente se deseja conhecer o valor de alguma variável intermediária
    #print (L)
    #print (Y)
    #print (K2)
    #print (K3)
    #print ("------------------")
    print ("C= ", C)
    print ("B=", B)
    print ("A=", A)
    
    
    return 0

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))

A curva deste sensor obtida com o script acima fica como:

Precisamos agora interfacear o sensor com o Arduino. Até lá!

 

 

Deixe um comentário