Ampliación del rango de valores analógicos del sensor de temperatura

Estoy tratando de construir un módulo de relé de temperatura controlada con un ATtiny45 (Arduino UNO R3 como ISP) y un sensor de temperatura NXP KTY81-222.

El rango de temperatura que quiero monitorear es de 20°C a 30°C.

( ficha técnica -> http://www.produktinfo.conrad.com/datenblaetter/150000-174999/153653-da-01-en-TEMPERATUR_SENSOR_KTY10_7_KTY81_222.pdf )

El diseño de mi circuito se ve así = (estoy usando el Arduino UNO R3 para la depuración)

ingrese la descripción de la imagen aquí

** tenga en cuenta que también he intentado "intercambiar" la resistencia de 1K y la posición del sensor para invertir la salida.


*y la placa arduino ->

ingrese la descripción de la imagen aquí

A0 es la entrada analógica 0 del Arduino. 5V se conecta directamente al pin de salida de 5V del arduino.

(luego sería lo mismo en el ATtiny45 usando algunas baterías)

ingrese la descripción de la imagen aquí

(VCC puede ser de 2,7 V a 5,5 V)

He usado un termómetro digital doméstico para comparar los valores de la entrada analógica con los valores de °C medidos.

esta es una tabla de medidas rápidas =

Analógico -> °C


687 a 690 -> 24,4°C a 25,1°C

707 a 708 -> 36,2°C a 36,5°C

como puede ver, tengo un rango de aproximadamente 20 unidades analógicas que representa un rango de aproximadamente 10 ° C unidades.

entonces, lo que realmente quiero es "aumentar" el rango de las unidades analógicas a aproximadamente 200 unidades analógicas para un rango de unidades de 10 ° C. la solución debe ser un buen rango de valores para manejar, por lo que puedo decirle al µC que encienda el relé si la temperatura está por debajo de los 24 °C, y cerrar el relé si la temperatura está por encima de los 28 °C.

Quiero que 20°C sea un valor analógico de alrededor de 500 y 30°C de alrededor de 700. (este "rango de 500 a 700 sería lo suficientemente bueno para mí.

Espero poder explicar bien mi pregunta por mi mal inglés.

¿Por qué quieres más precisión? 0,5°C debería ser suficiente para esta tarea. Y no confíes demasiado en un termómetro doméstico.
No tengo ningún otro termómetro para calcular los °C reales para cada valor. Entonces, la razón por la que quiero tener un "rango" más grande es que necesito averiguar qué valores usar en mi código para el límite inferior y superior ...
La forma real de resolver su problema de ajustar el rango de su sistema de modo que el rango de temperatura de interés cubra el rango de su ADC es usar un circuito amplificador operacional, eliminando la compensación y aumentando la ganancia. Es un poco complicado por el hecho de que no tiene una fuente de alimentación negativa, por lo que necesita usar amplificadores operacionales de un solo lado.
hmm ok, no tengo ninguna experiencia con la amplificación: S, creo que debería quedarme con el circuito actual y probar con los valores dados. ¿Conoces algún buen método para "comparar" los valores analógicos que obtengo, para obtener los °C reales? El termómetro de mi habitación parece no ser válido.

Respuestas (2)

esquemático

simular este circuito : esquema creado con CircuitLab

Vas a encontrarte con algunos problemas de precisión como:

  1. ruido de la línea de 5V
  2. auto-calentamiento
  3. posible caída de voltaje (debido a la longitud del cable)

Simplemente elegiría un termómetro de un cable como el DS18B20/DS18S20. Usando un sensor digital, menos inmune al ruido. Incluso puedes ejecutarlo a una distancia mucho más larga. Ya hay una biblioteca para Arduino. De todos modos, esa es mi ruta.

Siguiendo tu ruta:

Si solo desea un rango de temperatura de 20 ° C a 30 ° C, tendrá que jugar con su resistencia para obtener ese rango. Por ejemplo, a 20C la resistencia nominal es de 1922ohms ya 30C de 2080ohms.

Entonces, los estados del divisor de voltaje producen:

@ 20 C : V o = V i R s R s + R 1 = 5 V 1922 1922 + 1000 = 3.288 V

@ 30 C : V o = V i R s R s + R 1 = 5 V 2080 2080 + 1000 = 3.376 V

La diferencia es 0.08778V o 87.78mV. Dado que el análogo de arduino usa 10b (1023): 5 V 1023 = 4.888 metro V / s t mi pag . Esto debería haber dado 17,9 pasos ( 87.78 metro V 4.888 metro V , así que digamos 17. Si desea reducir esto a una resolución mayor, puede conectar los 3,3 V del puerto FTDI de Arduino al pin de referencia analógico. Sin embargo, alimente su divisor de voltaje con los mismos 5V. En su configuración vacía (), use analogReference (EXTERNAL). Lo que esto hará es configurar su análogo para usar la referencia de 3.3V en lugar de la referencia interna de 5V.

Ahora, hagamos un poco más de matemáticas:

Como ahora estamos usando una referencia de 3,3 V, la resolución cambia a 3.3 V 1023 = 3.23 metro V / s t mi pag . Esto ahora producirá 27.2 pasos ( 87.78 metro V 3.23 metro V ) (digamos 27 pasos).

Como puede ver, hemos mejorado de 17 a 27 pasos. En un rango de 10C (30C-20C), teóricamente podemos obtener una resolución de 10C/27 = 0,37C. Recomendaría un capacitor en paralelo con el sensor para crear un filtro de paso bajo de primer orden (permite el paso de baja frecuencia y rechaza la alta frecuencia después del corte a una tasa de 20dB o 10 veces el rechazo por década). Conecte este capacitor justo entre A0 y gnd (lo más cerca posible de A0). El filtro de corte se calcula usando:

Digamos que está usando una resistencia de 1k y un condensador de 1uF:

F C = 1 2 π R C = 1 2 π 1000 0.000001 = 159 H z

Todo lo que tienes que hacer ahora es jugar con el valor de la resistencia (debería ser mayor que 1k ahora). Asegúrese de que, en el peor de los casos, no proporcione un voltaje mayor que el voltaje de referencia.

Probablemente elegiría una resistencia de 2k:

V o = 5 V 1922 1922 + 2000 = 2.450 V entonces analogRead produce 759

V o = 5 V 2080 2080 + 2000 = 2.549 V entonces analogRead produce 790

En el peor de los casos: @150C -> 4280ohms

V o = 5 4280 4280 + 2000 = 3.4 V (OK)

Diferencia 98,73 mV -> 98,73 mV/3,23 mV -> 30 pasos

Filtro de paso bajo: ( 2 π 2000 0.000001 ) 1 = 79.6 H z (La señal de CA a 796 Hz se reduce a 10 veces más pequeña, a 7960 Hz es 100 veces más pequeña, etc.).

gracias por esa buena explicacion. ¿Puedes subir un dibujo rápido del diseño del circuito para tu solución final, por favor? mis habilidades eléctricas no son tan buenas. También tenga en cuenta (para el autocalentamiento) que tengo el sensor en un cable dúplex de 1 metro. por lo que queda fuera del "área electrónica". y también: ¿puedo simplemente usar el pin de salida de 3.3V del arduino?
Actualicé mi pregunta con algunas imágenes de referencia para el arduino y el attiny que estoy usando.
Ese pin de salida de 3.3V proviene del chip FTDI. Recuerde que este pin solo puede manejar hasta 50mA. Si intenta dibujar más que esto, entonces freirá al pobre. Simplemente use la imagen que tiene actualmente para el diseño del circuito. Coloque un capacitor de cerámica entre A0 y tierra, de modo que esté en paralelo con el sensor. No estoy seguro de cómo subir fotos.
debajo del texto de su respuesta, puede hacer clic en "editar", en el editor puede hacer clic en "símbolo de imagen" para cargar una imagen en el texto en la posición actual. No sé por qué debería usar el condensador, porque no tengo ruido de ahy.
Estoy bastante seguro de que lo harás. Por ejemplo, si imprime en serie su lectura analógica (A0), el valor fluctuará incluso si la temperatura no cambia. Esto se considera ruido.

Puede que no parezca una gama muy amplia de números digitales, pero ¿ha considerado promediar (digamos) diez lecturas? El ruido (si generalmente está por encima del ancho de banda que necesita medir) se puede utilizar a su favor mediante un proceso llamado interpolación. En efecto, la aleatoriedad del ruido le dará una variedad de lecturas para una temperatura fija y promediar varios números le dará una mayor resolución. El acto de promediar los números es un filtro de paso bajo que (a) elimina el ruido y (b) le brinda una mayor resolución.

Usted menciona "unidades analógicas", pero se refiere a valores digitales recopilados de un ADC, por lo que le propongo que haga exactamente esto, al menos pruébelo y vea cómo son las variaciones. Si tiene señales estables realmente buenas en su ADC, entonces se puede probar alguna forma de amplificación usando un amplificador operacional. Si está desacoplando la entrada del ADC con un condensador, puede intentar quitarlo.

Creo que el problema del "ruido" en mi tabla de medidas anterior es mi termómetro doméstico. No tengo ningún otro instrumento para medir la temperatura correcta.
Si tomara diez, dieciséis o treinta y dos lecturas en rápida sucesión, ¿todas las lecturas serían exactamente iguales? Si es así, entonces mi respuesta no te ayudará. Si hay una extensión razonable de + o - un cambio de conteo, entonces mi respuesta lo ayudará. Estoy tratando de buscar formas alternativas que puedan ayudar en lugar de la ruta "estándar" de aplicar amplificación. Si tiene un inversor schmitt de repuesto, puede superponer la forma de onda triangular (muy reducida en amplitud) para difuminar ligeramente la señal. La frecuencia debe estar dentro de nyquist y no estar relacionada con su frecuencia de muestreo para que funcione.
sí, mientras el cable con el sensor permanezca en mi habitación, el valor no cambiará, hasta que enfríe o caliente el sensor.