Forma alternativa de leer los detectores de temperatura de resistencia (RTD) con microcontrolador

2

Después de leer muchos mensajes con dificultades para leer un Detector de temperatura resistivo (RTD) como un PT-1000, NTC con, por ejemplo, un Arduino, me pregunto si se podría utilizar un enfoque basado en el tiempo:

Si tomo un condensador de 1000uF y lo cargo a través del RTD a un cierto voltaje (medido por una entrada analógica), esto toma un tiempo que varía según el valor R del RTC. Se debe utilizar una salida digital del Controlador para cargar y descargar todos los R-C conectados y para permitir que el Controlador determine el tiempo exacto de inicio de la carga. Una vez que la entrada analógica alcanza el umbral de, por ejemplo, 90% V + el tiempo se detiene y R & T podría ser determinado.

  • La desventaja obvia es que leer T toma tiempo y limita el tasa de muestreo, pero parece aceptable para la mayoría de las aplicaciones.
  • La ventaja obvia es la simplicidad del circuito similar a un divisor de voltaje.

Preguntas:

  • ¿Es razonable esta idea?
  • ¿Cuál podría ser la precisión de la lectura para un PT-1000?
  • ¿Cuáles son las ventajas y desventajas en la capacitancia frente a la precisión?

EDITAR: Notas: esta solución está diseñada para proyectos de Arduino y no para productos de gran volumen. El convertidor A / D de 10 bits con resolución 0..1023 de Arduino UNO tiene una resolución pobre para dispositivos resistivos con divisor de voltaje que produce aproximadamente 14 pasos para 18 Kelvin. Esta es una idea teórica y es por eso que se publica aquí.

Actualización: Andy señaló que el cambio de capacitancia del circuito podría ser un problema. Busqué que normalmente "la capacitancia aumenta menos del 5% desde los 25 ºC hasta el límite de temperatura alta". Si el condensador se mantiene a temperatura ambiente, el problema podría ser controlado. La calibración inicial debido a la tolerancia de los condensadores podría ser problemática.

    
pregunta cat

6 respuestas

3

De lo que está hablando se llama medición del tiempo de carga . Incluso hay microcontroladores con hardware incorporado para ayudar con esto. Por lo general, está diseñado para medir cambios en pequeñas capacitancias, como las de los botones táctiles capacitivos.

Si bien lo que propones funcionaría, tendría poca precisión y más complejidad, no menos, en comparación con el enfoque tradicional de usar una resistencia única y una A / D. Su método utiliza un valor de capacitancia y un valor de tiempo como referencia. El tiempo se puede medir fácilmente con gran precisión y resolución a bajo costo, y no es un problema. La capacitancia, sin embargo, es. Incluso los condensadores al 10% cuestan más que los tipos "regulares". Los condensadores% 1 cuestan mucho más, si los puede encontrar.

Una de las ventajas de su sistema es que puede tener una gran resolución. Básicamente, esto depende de cuánto tiempo esté dispuesto a esperar y de qué tan rápido pueda funcionar su contador mientras tanto. Tener un contador a unos 10s de MHz es fácilmente alcanzable en muchos microcontroladores modernos. Así que si buscas pequeños cambios de temperatura, pero no te importa mucho la temperatura absoluta, entonces este método no es tan tonto como sería de otra manera.

Sin embargo, una única resistencia fija para que ésta y la RTD formen un divisor de resistencia, entonces el resultado de eso en un A / D es más simple y más preciso. Si la resolución extra alta fuera realmente necesaria por alguna razón, usaría un delta-sigma A / D externo. Esos son más lentos que los A / D integrados en los microcontroladores, pero con una resolución mucho más alta. La lentitud no importa cuando se mide la temperatura y la constante de tiempo del sensor es todavía varias veces el tiempo de conversión de aproximadamente 20 ms de un delta-sigma A / D.

    
respondido por el Olin Lathrop
1

No estoy convencido de que el enfoque es tonto. Si su microcontrolador tiene un comparador (o usted usa un comparador externo) y tiene un ADC de baja resolución, puede obtener una mejor precisión de una solución basada en el tiempo en la que cobra un límite que con un ADC, especialmente con un tiempo de carga lento. También utilizaría un conjunto diferente de interrupciones para hacer esto de lo que lo haría con un enfoque de ADC, y no es demasiado difícil ver que, dependiendo de cómo se utilicen sus recursos, puede recibir un codazo en esta dirección para un escenario particular.

Además, la división de voltaje no producirá una salida lineal si el RTD (u otro dispositivo resistivo) produce grandes cambios en la resistencia, pero el enfoque de carga sí lo hace.

Es una herramienta para su caja de herramientas a la que podría recurrir en la situación correcta.

    
respondido por el Scott Seidman
1
  

Una vez que la entrada analog alcance el umbral ...

este enfoque fue ampliamente utilizado en los viejos tiempos cuando el adc a bordo era raro para mcus.

se puede usar para medir resistencia, capacitancia o voltaje de entrada. el concepto básico es cargar un capacitor para que el voltaje a través de él cambie el estado del pin de entrada, aunque en su mayoría sea un pin GPIO (también conocido como modo digital ). / p>

Sin embargo, debe tener cuidado al utilizar una gran capacitancia, ya que la descarga puede llevar mucho tiempo y la corriente de descarga puede ser excesiva.

  

de por ejemplo 90% V +

Está bien permitir que se cargue tanto, pero generalmente no necesita ni desea que: bajo un umbral inferior, la carga imita más a una fuente de corriente constante que carga un capacitor, es decir, una mejor linealidad .

La secuenciación típica es así:

1) conecte el condensador a través de una resistencia a una fuente de voltaje - > podría ser el riel u otro pin gpio;

2) configura el pin de lectura como digital outout y genera un '0' lógico en él.

3) al inicio de la medición, coloque ese pin de lectura en entrada para permitir que el capacitor se cargue;

4) contar el tiempo hasta que ese pin se convierta en un nivel lógico alto; y gire el pin de lectura a salida para descargar el capacitor.

5) hecho.

los pasos 3/4 pueden ser ligeramente diferentes dependiendo de cómo configure el estado inactivo del pin. Lo anterior asume que el pin está inactivo bajo; en general, tenerlo inactivo es más deseable. También puedes tenerlo inactivo también.

la belleza está en su simplicidad: todo lo que hace es girar el pin de lectura a entrada o salida para controlar la carga / descarga del condensador.

Este es probablemente el truco más antiguo para los antiguos ingenieros integrados.

    
respondido por el dannyf
1

Sí, podrías hacer esto. Es una técnica estándar. En la mayoría de las implementaciones comerciales, el circuito se conmuta entre la resistencia desconocida y la resistencia de referencia. Al calcular la relación de tiempos, la tensión de alimentación y la capacidad y la frecuencia de reloj se cancelan (incluso se puede usar una fuente no regulada y un reloj RC, y generalmente lo es). Hay algunos chips que tienen hardware rudimentario incorporado para este propósito (tienden a ser enmascarados programados).

En la década de los 90, creamos nuestros propios convertidores ADC, pero en estos días se pueden comprar convertidores o algunos MCU incluso tienen convertidores de alta resolución incorporados, por lo que no es muy atractivo, incluso si el costo de ingeniería se amortiza en tantas unidades como ser virtualmente libre.

Por lo tanto, sugiero, como otros lo han hecho, elegir un ADC externo adecuado e interconectarlo.

    
respondido por el Spehro Pefhany
0

¿Y qué pasa con la tolerancia del condensador que afecta los tiempos de medición? ¿Qué pasa con la temperatura del condensador y el exceso de fugas que crean problemas de calibración realmente difíciles (o quizás pueda usar otro RTD para compensar)?

  

La ventaja obvia es la simplicidad del circuito

Es más simple que tener una resistencia de pull-up de calidad decente para Vcc y tomar mediciones radiométricas como la mayoría del resto de la industria tiende a hacer.

La idea propuesta es sencillamente tonta.

    
respondido por el Andy aka
0

Además de todas las demás respuestas, quiero publicar mis propias pruebas prácticas utilizando un ArduinoUno con 10bit ADC:

Configuración: usé un capacitor de 1000uF y lo cargué / descargué usando un pin IO digital conectado a la resistencia R (RTD o fijo) mientras observaba el voltaje del capacitor con el ADC de 10 bits incorporado (DIGITALOUT - R -ADC- C - GND).

Para el RTD, encontré que la precisión y la resolución están aproximadamente en el mismo rango (+ -1K) que una sola muestra de lectura de un divisor de voltaje (1kOhms - Pt1000) en un A / D de 10 bits. Lo interesante es que cargar 1000uF a exactamente 63.2% de rendimiento en R en ohms equivale al tiempo de carga en ms. Esto es un resultado de la constante de tiempo del capacitor tau = R * C relación. Finalmente T = (R-1000) /3.9 para PT-1000. El 63.2% de carga fue cuando el valor de ADC excedió 647 (63.2% de 1024). El sistema debe calibrarse con una resistencia conocida.

Al contrario de lo esperado, la duración de la carga de los condensadores tiene una desviación estándar que no permite mediciones más precisas del valor real de R que un ADC de 10 bits, a pesar de que la resolución de tiempo del controlador podría ser 1000 veces mejor. No creo que la variación de la duración de la carga pueda reducirse comprando mejores partes (por ejemplo, 1% de capacitores). Tal vez observar el voltaje de los capacitores con mejores medios (12bit ADC, pin de entrada digital) podría mejorar los resultados.

Como han señalado otros, el condensador es sensible a la temperatura. Los cambios de + - 10 grados K (simplemente tocando el capacitor) producen resultados visibles y cambian las mediciones.

Si un controlador no tiene un ADC incorporado, se puede sustituir una entrada digital para observar el voltaje de los condensadores. Esto puede emular un ADC, que se hizo en el pasado, como han dicho otros.

La constante de tiempo del capacitor tau = R * C permite crear una herramienta de medición realmente simple para capacitancia o resistencia: deltaT = microsseconds () - startTime; ohms = deltaT / microFarad; O microFarad = deltaT / ohms;

Con el propósito de leer un RTD como el Pt1000 en un ADC de 10 bits usando un divisor de voltaje (1k - Pt1000) se obtienen 84 pasos discretos para un cambio de 100K, que es tan bueno como la solución RC, pero tiene menos desventajas . Sorprendentemente, es posible (en ArduinoUno) mejorar mucho más allá de la resolución del ADC utilizando un promedio de señal de más de 200 valores ( enlace ). Esto aumenta la resolución de (1.2K 10bit nativos) a aproximadamente 0.1K (!) (Usando una resistencia constante en lugar de la Pt1000 para pruebas). Una ganancia tan alta en precisión por promedio de señal es inesperada y no puedo explicarlo. Esto finalmente es mucho mejor que la solución R-C. (Andy señaló esto e hizo referencia a este documento: enlace )

    
respondido por el cat

Lea otras preguntas en las etiquetas