Contenido principal

Control de temperatura en un intercambiador de calor

Este ejemplo muestra cómo diseñar compensadores de retroalimentación y feedforward para regular la temperatura de un reactor químico por medio de un intercambiador de calor.

Proceso del intercambiador de calor

A continuación, se muestra un reactor químico denominado stirring tank. La entrada superior suministra el líquido al tanque. El líquido en el tanque se debe mantener a una temperatura constante, variando la cantidad de vapor suministrada al intercambiador de calor (tubería inferior) a través de una válvula de regulación. Las variaciones de temperatura del caudal de entrada son la fuente principal de perturbaciones en este proceso.

heatex_01.png

Usar los datos medidos para modelar las dinámicas del intercambiador de calor

Para derivar un modelo de primer orden más tiempo muerto de las características del intercambiador de calor, inyecte una perturbación de paso en el voltaje de la válvula V y registre su efecto en la temperatura del tanque T a lo largo del tiempo. Cargue y represente los datos experimentales.

load("step_data.mat","tData","yData")

plot(tData,yData,"r*-")
xlim([0 200])
ylim([0 1.2])
ylabel("Tank temperature (normalized)")
xlabel ("Time (seconds)")
grid on;
title("Measured Step Response");

hold on
t1 = 23;
t2 = 36;
plot([t1 t1],[0 0.283],"b--",LineWidth=2)
plot([0 t1],[0.283 0.283],"b--",LineWidth=2)
annotation("textbox",[0.22 0.26 0.1 0.1], ...
    String="t1",Color="b",EdgeColor="none")
plot([t2 t2],[0 0.632],"b--",LineWidth=2)
plot([0 t2],[0.632 0.632],"b--",LineWidth=2)
annotation("textbox",[0.28 0.48 0.1 0.1], ...
    String="t2",Color="b",EdgeColor="none")

Figure contains an axes object. The axes object with title Measured Step Response, xlabel Time (seconds), ylabel Tank temperature (normalized) contains 5 objects of type line.

Los valores t1 y t2 son las unidades de tiempo en que la respuesta alcanza el 28,3% y 63,2% de su valor final. Puede utilizar estos valores para calcular la constante de tiempo tau y el retardo puro theta del intercambiador de calor.

tau = 3/2 * ( t2 - t1 )
tau = 
19.5000
theta = t2 - tau
theta = 
16.5000

Verifique estos cálculos comparando la respuesta de primer orden más intervalo inactivo con la respuesta medida.

s = tf("s");
Gp = exp(-theta*s)/(1+tau*s);

Represente la respuesta al escalón de Gp en los mismos ejes que los datos experimentales.

sp = stepplot(Gp,0:1:200);
xlim([0 200])
ylim([0 1.2])
ylabel("Tank temperature (normalized)")
title("Experimental and Simulated Step Response")
grid on

MATLAB figure

La respuesta del modelo y los datos experimentales coinciden. Se podría realizar un experimento de prueba de impacto similar para calcular la respuesta de primer orden con respecto a una perturbación de paso en la temperatura del caudal de entrada. Como ya disponemos de modelos para el intercambiador de calor y la perturbación del caudal de entrada, ya puede diseñar el algoritmo de control.

Control de retroalimentación

La siguiente figura muestra un diagrama de bloques del proceso de lazo abierto.

heatex_02.png

La función de transferencia

Gp(s)=e-14.7s21.3s+1

modela cómo un cambio en el voltaje V que controla la apertura de la válvula de vapor afecta a la temperatura del tanque T, mientras que la función de transferencia

Gd(s)=e-35s25s+1

modela cómo un cambio d en la temperatura del caudal de entrada afecta a T. Para regular la temperatura del tanque T alrededor de un punto de referencia determinado Tsp, puede usar la siguiente arquitectura de retroalimentación para controlar la apertura de la válvula (voltaje V).

heatex_03.png

En esta configuración, el controlador proporcional integral (PI)

C(s)=Kc(1+1τcs)

calcula el voltaje V en función de la diferencia Tsp-T entre la temperatura deseada y la temperatura medida. Puede utilizar las fórmulas ITAE para elegir valores adecuados para los parámetros del controlador.

Kc=0.859(θ/τ)-0.977,τc=(θ/τ)0.680τ/0.674

Kc = 0.859 * (theta / tau)^(-0.977)
Kc = 
1.0113
tauc = ( tau / 0.674 ) * ( theta / tau )^0.680
tauc = 
25.8250
C = Kc * (1 + 1/(tauc*s));

Para saber cuán bien funciona el controlador ITAE, cierre el lazo de retroalimentación y simule la respuesta a un cambio de punto de referencia.

figure
Tfb = feedback(ss(Gp*C),1);
stepplot(Tfb,0:1:200)
hold on
plot(tData,yData,"r*-")
title("Response to Step Change in Temperature Setpoint")
ylabel("Tank temperature (normalized)")
grid on

MATLAB figure

La respuesta es bastante rápida con cierto sobreimpulso. Si observamos los márgenes de estabilidad, se confirma que el margen de ganancia es débil.

figure
margin(Gp*C)
grid on

MATLAB figure

Cuando se reduce la ganancia proporcional Kc se fortalece la estabilidad a expensas del rendimiento.

C1 = 0.9 * (1 + 1/(tauc*s));  % reduce Kc from 1.23 to 0.9
margin(Gp*C1)
grid on

MATLAB figure

figure
stepplot(Tfb,"r",feedback(ss(Gp*C1),1),"b",0:1:200)
title("Response to Step Change in Temperature Setpoint")
ylabel("Tank temperature (normalized)")
legend("Kc = 1.23","Kc = 0.9");
grid on

MATLAB figure

Control feedforward

Recuerde que los cambios en la temperatura del caudal de entrada son la principal fuente de las fluctuaciones de temperatura en el tanque. Para anular estas perturbaciones, una alternativa al control de retroalimentación es la arquitectura de feedforward que se muestra a continuación:

heatex_04.png

En esta configuración, el controlador de feedforward F utiliza medidas de la temperatura del caudal de entrada para ajustar la apertura de la válvula de vapor (voltaje V). Así, el control feedforward anticipa y neutraliza el efecto de los cambios en la temperatura del caudal de entrada.

El cálculo directo muestra que la transferencia total de la perturbación de temperatura d a la temperatura del tanque T es

T=(GpF+Gd)d

La anulación perfecta de perturbaciones requiere

GpF+Gd=0F=-GdGp=-21.3s+125s+1e-20.3s

En realidad, las imprecisiones en el modelado evitan una anulación exacta de perturbaciones, pero el control feedforward ayuda a reducir las fluctuaciones de temperatura debido a perturbaciones en el caudal de entrada. Para tener una mejor idea de cómo funcionaría el esquema de feedforward, aumente el retardo de feedforward ideal en 5 segundos y simule la respuesta a un cambio de escalón en la temperatura del caudal de entrada:

Gd = exp(-35*s)/(25*s+1);
F = -(21.3*s+1)/(25*s+1) * exp(-25*s);
Tff = Gp * ss(F) + Gd;   % d->T transfer with feedforward control

figure
stepplot(Tff)
title("Effect of Step Disturbance in Inflow Temperature")
ylabel("Tank temperature (normalized)")
grid on

MATLAB figure

Control de feedforward-retroalimentación combinado

El control de retroalimentación es adecuado para el seguimiento de puntos de referencia en general, mientras que el control feedforward puede ayudar con la anulación de perturbaciones medidas. Luego, analice las ventajas de combinar ambos esquemas. La arquitectura de control correspondiente se muestra en la siguiente figura.

heatex_05.png

Utilice connect para crear el modelo de lazo cerrado correspondiente de Tsp,d a T. En primer lugar, asigne un nombre a los canales de entrada y salida de cada bloque y, después, use connect para restablecer el diagrama.

Gd.u = "d";
Gd.y = "Td";
Gp.u = "V";
Gp.y = "Tp";
F.u = "d";
F.y = "Vf";
C.u = "e";
C.y = "Vc";
Sum1 = sumblk("e = Tsp - T");
Sum2 = sumblk("V = Vf + Vc");
Sum3 = sumblk("T = Tp + Td");
Tffb = connect(Gp,Gd,C,F,Sum1,Sum2,Sum3,{"Tsp","d"},"T");

Para comparar las respuestas en lazo cerrado con y sin control feedforward, calcule la función de transferencia de lazo cerrado correspondiente para la configuración de solo retroalimentación.

C.u = "e";
C.y = "V";
Tfb = connect(Gp,Gd,C,Sum1,Sum3,{"Tsp","d"},"T");

Compare los dos diseños.

stepplot(Tfb,"b",Tffb,"r--");
title("Closed-loop Step Response to Setpoint and Disturbance Change");
ylabel("Tank temperature (normalized)")
legend("Feedback only","Feedforward + feedback");
grid on

MATLAB figure

Los dos diseños muestran un rendimiento idéntico para el seguimiento del punto de referencia, aunque la incorporación del control feedforward mejora la anulación de perturbaciones. Este resultado también se ve en el diagrama de Bode de lazo cerrado.

figure
bodemag(Tfb,"b",Tffb,"r--",{1e-3,1e1})
legend("Feedback only","Feedforward + feedback",Location="SouthEast");

MATLAB figure

Simulación interactiva

Puede usar la app HeatExchanger para explorar de forma interactiva estrategias de control para el sistema del intercambiador de calor. La app se ha desarrollado usando App Designer y simula el intercambiador de calor con el modelo heatex_sim de Simulink®.

Con esta app puede simular el intercambiador de calor usando un control de lazo abierto, de feedforward, de retroalimentación y de feedforward-retroalimentación combinado. También puede ajustar los parámetros de ganancia y retardo para el controlador de feedforward.

Para ejecutar la app, use el siguiente comando.

HeatExchanger