Archive for febrero, 2010

Midiendo temperatura II

PT100 y PT1000.

La sondas PT100 y PT1000 son termorresistencias PTC. El valor Ohnmico a 0º es de 100 y 1000 Ω, respectivamente. Además tienen la caracteristica de variar el valor ohnmico proporcionalmente a la temperatura en el rango de medición.

Sonda PT100: Rt = [((0.00389) * 100 )*ºC]+100

Sonda PT1000: Rt = [((0.00389) * 1000 )*ºC]+1000

He preparado una hoja de calculo excel. La primera tabla calcula RT (valor en Ω de la sonda) a diferentes temperaturas y tipo de sonda (PT100 y PT1000).  La segunda tabla nos calcula el valor Ω del conductor en función de la longitud y sección. La tercera el cambio por efecto de la temperatura en el conductor. La última tabla calcula el error en grados por la suma del error del conductor más la temperatura. Aquí podeis descargar la hoja de cálculo.  Las celdas en amarillo son para introducir datos. 

Sondas a 3 y 4 hilos o sondas con compensación.

Para evitar los errores producidos por la resistencia del conductor hay sondas con 3 y 4 hilos.

Básicamente de lo que se trata es de saber cuánta resistencia tenemos en el conductor (midiendo entre los dos terminales +R) y restársela a la resistencia de la sonda -R +R.

Como podemos ver en la tabla para un ejemplo de 100 metros de cable con una sección de 0,25 mm2, tenemos unos 3,6 ºC de error.  Utilizando un tipo de sonda compensada este error quedaría anulado. Tambien se anularía el error producido por las variaciones de temperatura en el conductor.

Se pueden utilizar sondas PT100 a dos hilos en lugar de 3, puenteando las entradas pero lo correcto es que este puente se realice lo más cerca posible de la sonda.

La importancia de una correcta instalación.

Como podemos ver en la tabla, para un incremento de 1ºC sólo se produce un cambio de 0,4 Ω en la sonda. Por este motivo es recomendable realizar todos los empalmes con soldadura de estaño.

Si utilizamos sondas PT100 de dos hilos deberemos calibrar la sonda para compensar la distancia del conductor. Siempre tendremos el error producido por los cambios de temperatura en éste. Podemos decir que el error en la sonda PT1000 es diez veces menor que en la PT100.

Error por calentamiento de la sonda.

Para poder medir el valor ohnmico deberemos aplicar una tensión. Esta tensión produce un calentamiento en la propia sonda produciendo a su vez un error en la medida. En el caso de la sonda PT1000, este calentamiento es diez veces superior. A efectos prácticos no sabría decir de cuánto estamos hablando puesto que parte del calor producido en la sonda es disipado al medio. En este punto es importante la transmisión de temperatura de la sonda al medio.

Como calibrar una sonda de temperatura.

Intentar contrastar una sonda de temperatura con un patrón puede ser una tarea ardua. Quizás, la forma mas simple es introducir la sonda en agua, junto a la sonda patrón, de esta manera evitaremos los problemas ocasionados por estratificaciones y velocidad de respuesta. Lo que de ninguna manera deberíamos hacer es constractar temperaturas con un patrón situando las sondas en diferentes puntos ya que las diferencias pueden llegar a ser considerables.

 

 

Midiendo temperatura I

Algunos datos interesantes en la medida de temperatura:

Errores según norma en sondas de temperatura PT100.

Errores según caracteristicas de fabricante en modulo de entrada PT100 de beckhoff.

Modulos especiales de Beckhoff . Como vemos, en el recuadro marcado en rojo, la versión 0028 presenta un menor error y un mayor resolución.

 Error según fabricante de modulo ADP para PLC FX·U de Mitsubishi para lectura de sondas PT100.

También podemos leer con módulos de 4-20 mA y convertidores. La siguiente figura presenta el máximo error global para un convertidor de PT100 a 4-20mA.

En el caso de leer a través de convertidor tendremos que sumar errores: error en sonda, error en convertidor, error en módulo 4-20mA. La siguiente figura muestra el error según fabricante del módulo KL3454 de Beckhoff.

Otras tecnologías.

Aunque aún estoy un poco verde en este tema, lo voy a estudiar porque me parece interesante. Se trata de la red 1-wire. Son sensores, entre otras cosas de temperatura y humedad, con comunicación 1-wire. La gran ventaja de esto es que en la misma sonda tenemos el sensor, el convertidor a digital y la comunicación. Según el fabricante habla de un ±0.5 ºC de error. Con resulociones de hasta 12 bit (0.0132 ºC).  Os dejo algunos link para abrir boca. Si saco algo en claro ya contaré.

iButtonLink

Maxim

Wiki 1wire

TwinCat

Para quien esté interesado en probar algunas de las cosas que se ven por aquí, os dejo una pequeña introducción para poner en marcha el PLC o, mejor dicho, el SoftPlc. Para abrir  pinchamos en el icono de la barra de tareas, en system manager. 

 

 

El siguiente paso es añadir un proyecto o, dicho de otra forma, el programa con el que queremos trabajar. 

 

Seleccionamos  y activamos la configuración. 

 

Ahora tenemos nuestro PLC en marcha. 

 

La dirección ADS es la dirección Ip con .1.1 añadidos al final. Esta dirección será la que usaremos para direccionar las peticiones desde Vb.net. En los detalles de las variables podemos ver el puerto, grupo y offset. Estos datos son importantes para leer estas variables desde vb.net. Las aplicaciones en Vb.net, pueden recuperar el valor de las variables con el nemónico, pero yo lo haré con la dirección. En fondo verde podemos ver el estado del plc. 

Ya tenemos el PLC en  marcha. Algo asi como poner en tensión un plc y conectarlo al PC. El siguiente paso es mandar el programa desde PLC control y poner en RUN.

FB Derivada

Continuando con los FB que componen un FB PID,  hoy toca la derivada.

FUNCTION_BLOCK FT_DERIV

VAR_INPUT
in : REAL;
K : REAL := 1;
run : BOOL := 1;
END_VAR

 

VAR_OUTPUT
out : REAL;
END_VAR


VAR
old: REAL;
tx: DWORD;
last: DWORD;
init: BOOL;
MaxValue : REAL;

END_VAR

(* lee system time *)
tx := T_PLC_US();

(* init para inicializar  *)
IF NOT init THEN
init := TRUE;
last := tx;
old := in;
ELSIF run AND tx – last > 0 THEN
out := (in – old) / DWORD_TO_REAL(tx – last) * 1000000.0 * K;
last := tx;
old := in;
ELSE
out := 0;
END_IF;

Init se utiliza para hacer una configuración inicial del FB. En programación leader, probablemente utilizariamos un flanco ascendente.

 

Realmente, este Fb nos recuerda bastante al Fb Integral, con la diferencia de que ahora no sumamos al valor anterior. En esencia lo que hace es calcular un valor proporcional a la desviación entre dos lecturas consecutivas. Cada ciclo de scan se lee el valor PV (por ejemplo la temperatura actual) y la compara con el valor en el anterior ciclo de scan. Pero esto tiene un gran inconveniente y me explico. Si leemos una temperatura, normalmente tendremos un decimal. A efectos prácticos, esto se traduce en que la temperatura parecerá estable hasta el instante en que aumente una décima y será en ese instante en el que la derivada nos de un valor > 0. En realidad esto no es cierto y sabemos que la temperatura está aumentando porque en el trancurso de un tiempo, varios minutos, sí se puede observar un incremento más o menos paulativo.

 

Como podemos ver en el grafico, la evolución de la temperatura en el tiempo. La temperatura es la Serie1 en ºC x 10 que suele ser la medida en un entrada analógica de 12 bit. Supongamos que el eje x son los sucesivos ciclos de scan. La linea azul muestra la evolución real de la temperatura.

La derivada esta definida como la variación de temperatura (Y1 – Y0) partido la duración del ciclo de scan T.

(Y1 – Y0) / T.

Analizando las derivadas en cada ciclo de scan con un tiempo de ciclo de 200ms.

1º Ciclo de scan. Se guardan los datos pero no se calcula. Momento actual y valor actual. last y old.

2ºCiclo de scan (100 – 100) / 200 = 0.

3ºCiclo de scan (100-100)/200 = 0.

4ºCiclo de scan (100 – 100) / 200 = 0.

5ºCiclo de scan (101 -100) / 200 = 0,005.

6º y sucesivos ciclos de scan (101- 101)/200 = 0.

Como vemos, la derivada, sólo nos devolverá un valor en el momento del cambio. Pero realmente el cambio se produce continuamente, aunque la resolución de la entrada analógica hace que este cambio se realice en escalones. Si nuestra entrada de temperatura tiene algo de ruido, el resultado en la derivada será totalmente erróneo. Por estos motivos la derivada se suele poner  Tv = 0,  para este tipo de procesos.

La derivada devuelve un valor proporcional a la aceleración en PV.

Con el símil de un coche. La aceleración es la derivada de la velocidad = (V- V0)/t.