¿Qué es?
Algunas veces para alguna
aplicación o proyecto se hace necesario saber la temperatura de algo, desde la
de tu cuarto para una aplicación de domótica hasta la temperatura de un liquido
para poder hacerle algún tipo de control. Hay muchos sensores que permiten
poder conocer la temperatura, los más conocidos son los LM35, termistor,
termocupla y los RTD. Aprovechando una de las características de PSoC hoy es el
turno del termistor!.
Termistor
Los Termistores, en pocas
palabras, son resistores térmicamente sensibles, el cual basa su funcionamiento
en la variación de su resistencia debido a cambios de temperatura. De estos
existen dos tipos:
NTC (Negative Temperature Coefficient)
(Coeficiente de Temperatura Negativo) : a medida que la temperatura aumenta la
resistencia disminuye
PTC (Positive Temperature Coefficient) (Coeficiente de Temperatura
Positivo) También llamados Positor: A medida que la temperatura
aumenta la resistencia aumenta.
La curva característica de
temperatura vs resistencia de los termistores no es lineal, por lo cual se
tienen que tener en cuenta una serie de ecuaciones que se tendrán que utilizar,
pero es aquí donde PSoC brilla al tener un bloque especial para los termistores
el cual nos ayuda mucho evitando los cálculos y a través del API nos entrega
los valores de resistencia y temperatura de nuestro termistor.
Hay que tener en cuenta que al
momento de conseguir el termistor se debe buscar uno de calidad media – alta y
verificar también que se encuentre la correspondiente hoja de datos por que de
ahí vamos a necesitar dos datos fundamentales que son: La constante Beta (B) que corresponde a una
relación entre dos temperaturas, por ejemplo, 30/50=3890 y la resistencia a 25
grados; con estos dos datos se puede utilizar para identificar la curva de
nuestro termistor y así poder hacer funcionar nuestro proyecto.
Materiales
- Protoboard
- CY8CKIT-059 PSoC5 Prototyping Kit
- Modulo KY-013 (Sensor de temperatura basado en termistor)
- LCD 20x4
- Cables de protoboard
Hardware
Lo que primero debemos conocer es
que la manera correcta de leer un termistor es con un divisor de voltaje con
otra resistencia conocida y con un valor de tolerancia de 1% o menos.
El modulo KY-013 ya tiene
implementado este divisor de voltaje con una resistencia de 10K por lo cual no
voy a necesitar poner otra resistencia en la protoboard, pero es importante
tener en cuenta que si ustedes consiguen un termistor diferente, sepan que este
lo deben conectar en serie a una resistencia (yo recomiendo resistencia de 10K
al 1%) como lo muestra el siguiente diagrama:
Como vemos el divisor de voltaje
lo vamos a alimentar con 1 volt que vamos a obtener del PSoC y por el otro lado
lo vamos a conectar a tierra, de esta manera tendremos 3 terminales que
llamaremos VHig, Vtermistor, Vlow. Estos tres terminales tienen que ir
conectados al PSoC tal cual muestra la imagen.
Recordar que el pin VLow tiene
que tener un puente a tierra!!.
Por otro lado tenemos que
conectar la LCD, es bastante sencillo y se ha hecho muchas veces, sin embargo,
aquí les dejo un diagrama de conexiones con el PSoC:
Estas son todas la conexiones que
hay que realizar, tener especial cuidado en la parte del termistor.
Software
Lo principal en el diagrama
esquemático del PSoC es saber que se van a leer los voltajes tanto del
termistor como el de la resistencia de referencia de manera diferencial, al ser
dos canales diferentes de voltaje tenemos que utilizar un multiplexor análogo
de dos canales en modo diferencial:
Se va a utilizar un voltaje de
referencia a 1 voltio junto con un operacional configurado en modo seguidor para
alimentar el divisor de voltaje.
Tendremos que usar entonces un
ADC (Analog to digital converter) para poder leer los dos voltajes, el cambio
de canales lo vamos a hacer a través de código , por ahora solo tendremos que
configurar el ADC de la siguiente manera:
De esta ventana de configuración
lo más importante es resaltar que el modo de entrada del ADC es diferencial. El
resto se deja por defecto.
Los cambios que se hicieron aquí
y tener cuidado es que el modo de conversión es 2 – Continuos, los valores los vamos
a ir obteniendo desde el código. La resolución en bits será 16 que para este
caso será más que suficiente.
El rango de entrada para este
modo diferencial será de +/- 1.024V, al utilizar el voltaje de referencia en 1V
nos aseguramos de que el voltaje no sobrepase los de la configuración del PSoC.
El resto de configuraciones del
ADC las podemos dejar por defecto.
El siguiente componente y el más
importante que es en donde nos vamos a centrar es el componente Termistor:
Como se los decía al principio
PSoC incorpora un calculador de temperatura basándose en la resistencia para
los termistores. Primero se debe configurar los parámetros en el esquemático:
El parámetro Reference resistor
hace referencia a la resistencia que tienen de referencia y aquí se debe poner
el valor en ohms, para este caso esa resistencia es de 10000ohms (10K).
El modo de implementation será
por medio de ecuación, este bloque con darle estos simple parámetros hace todos
los cálculos correspondientes a la ecuación que define el comportamiento de los
termistores para así darnos los valores de resistencia y temperatura.
También hay que indicarle otros
tres parámetros.
Es aquí donde toma importancia la
calidad del termistor y la cantidad de información que se consigue sobre el, si
el termistor es de buena calidad, la hoja de datos tendrá una tabla
correspondiente a los valores de temperatura vs resistencia, de esta tabla
vamos a obtener los tres valores por defecto, resistencia en ohm a 100°C de
temperatura, resistencia en ohm a 0°C de temperatura y la ultima es la
resistencia en ohm a temperatura ambiente que por lo general son 25°C. Una vez
tenemos estos tres valores los pondremos en los respectivos campos indicando
temperatura y resistencia.
Si les pasa como a mi que
compraron el termistor y no encontraron ninguna hoja de datos y tampoco
información sobre los valores de temperatura vs resistencia, tendremos que
obtener estos valores nosotros mismos, las pruebas que lleve a cabo fueron las
siguientes:
Para 100° : Me ayude un poco del
agua, sabiendo que su punto de ebullición son los 100° solamente la calenté
hasta que empezó a hervir y en ese momento sumergí la cabeza del termistor
teniendo cuidado de no sumergir los terminales y en ese punto tome la
resistencia con un multímetro el cual me arrojo que a 100° su resistencia es
1083 ohm .
Para 0° : utilice también agua,
esta vez puse agua en el congelador estando pendiente al punto en donde
empiezan a aparecer cristales en el agua lo que significa que se esta empezando
a congelar, este es mi punto de 0 grados, sumergí un poco la cabeza del
termistor teniendo cuidado de no sumergir los terminales y tome mi medición
obteniendo como resultado que para 0° la resistencia es 13250 ohm.
La ultima temperatura que es la
de 25° que es temperatura ambiente se obtiene sabiendo un poco de que manera
funcionan los termistores.
Existen, comercialmente,
termistores de muchos valores nominales, pero los más comunes son los que a 25°
tienen 10Komh de resistencia y los que a 25° tienen 4.7Kohm de resistencia, hay
que hallar la manera de lograr obtener 25° o valores cercanos y verificar la
resistencia, si esta se acerca a alguno de los dos valores dichos anteriormente
puede estar seguro de que ese es el valor correspondiente a temperatura
ambiente (25°). Mi termistor es de
4.7Kohm a 25°.
Lo más recomendable para estos
casos es conseguir un termistor que en su hoja de datos diga estas
temperaturas, con eso obtenemos mayor precisión en las medidas y evitamos los
errores que podamos tener debido a estas pruebas hechas.
Existen dos líneas de código para
hacer el trabajo de obtener la temperatura del termistor con este bloque:
Thermistor_GetResistance(vRef,vTherm);
- Esta
línea permite obtener el valor de la resistencia del termistor, los parámetros
que recibe son los voltajes correspondientes a la resistencia de referencia y
al termistor, hay que tener en cuenta en que canal se ubica cada uno para tener
la certeza de estar dando los valores que son.
Thermistor_GetTemperature(Termresis);
- Esta
línea nos permite obtener el valor de temperatura una vez conocemos la
resistencia, el parámetro que recibe es el valor de resistencia del termistor
que obtuvimos anteriormente.
Estas dos líneas son las que tenemos que implementar
más adelante para poder leer de manera correcta el termistor.
Por ultimo tendremos que añadir el bloque de LCD
para poder visualizar los valores de resistencia y temperatura.
Cabe recordar que este es un
bloque custom y que no viene incluido en PSoC creator, este debe ser incluido
manualmente y se los dejare junto a los archivos del proyecto.
La implementación del código es
la siguiente, todo comentado para entender bien
Por ultimo antes de compilar el proyecto tenemos que
hacer una serie de modificaciones en el compilador para que funcione de manera
correcta el bloque termistor y la función sprintf:
Vamos a clic derecho en el nombre del proyecto y
luego build settings
Y en esta ventana tendremos que
irnos al apartado linker y en la parte de additional libraries poner la letra m
, esto para el fin de añadir la librería matemática necesaria para el
funcionamiento del bloque termistor
Seguido vamos a linker y luego command line y allí ponemos
la instrucción -u_printf_float, necesaria para imprimir los valores mediante
sprintf.
Por ultimo vamos a la ventana de configuración de pines en
la pestaña system y allí ubicamos el parámetro Heap Size que debemos cambiar a
0x200
Necesario también para el funcionamiento del sprintf.
Por ultimo lo que queda por hacer es asignar pines, compilar
y programar.
Resultado final
El comportamiento del termistor es estable en las
mediciones, también es bastante sensible a cambios de temperatura, los valores
son bastante coherentes.
Podemos comparar las mediciones dadas por el termistor con
un termómetro de pared
Podemos apreciar un desfase de almenos 4 grados y esto puede
tener varias razones, la primera es que debido a que no se encontró ninguna
información acerca del termistor tuvimos que hacer las pruebas nosotros y
pudimos haber introducido un error de medición de temperatura de las pruebas,
también puede que el termómetro que estamos usando como patrón no este bien
calibrado.
De cualquier manera los resultados son satisfactorios por
que podemos obtener un valor confiable de la temperatura y la podemos usar en
este instante para tener en tiempo real la temperatura de nuestro cuarto!.
Por ultimo como no puede faltar, su respectivo video tutorial:
Excelente
ResponderBorrarMira una pregunta si tengo una PT100 tengo q hacer muchos cambios o como es resistencias seria igual.
y lo voy hacer en psoc 4.
gracias por tu ayuda.
Hola Cristian, el sensor PT100 es un RTD, funciona totalmente diferente al termistor, ademas PSoC creator tiene un componente diferente para los RTD, se ubica en el mismo apartado, te recomiendo busques la hoja de datos del componente de PSoC creator para que puedas tener una guía de como funciona. Por otro lado esta guía solo funciona para termistores NTC y por el momento solo lo he probado en un PSoC5LP. Saludo!
BorrarOk. Gracias.
ResponderBorrarAdicional al programa que tienes le puedo agregar que cuando llegue a cierta temperatura me Active un relevo,para apagar una resistencia que me está calentando agua.
Gracias por tu ayuda.
buena noche puedo usar un termistor de 2 patas.
ResponderBorrarpodrias explicar a que entrada lo tienes conectado.
y tienes un pin a vcc.
Hola cristian, claro que puedes usar un termistor de 2 terminales, lo que pasa es que como dice el articulo la manera correcta de leerlo es en un divisor de voltaje con una resistencia de referencia con tolerancia al 0.1%, en el esquematico se ve claramente cual es la conexión que se debe realizar, ademas de que la alimentación la proporciona directamente el microcontrolador y no VCC
BorrarBuenos días Brayan, tengo una duda en cuanto al ADC, tengo que medir 3 sensores de temperatura al tiempo, entre ellos un termistor y una termocupla tipo k, el problema se encuentra en que el ADC de la termocupla, es de 20 bits, y si mido con 20 bits en el termistor, ya no lee bien, que me recomiendas, hago dos configuraciones en el ADC, o saco otro ADC...
ResponderBorrarEspero puedas ayudarme y muchas gracias por el video, me ayudo bastante.