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.
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")
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
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.
La función de transferencia
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
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
).
En esta configuración, el controlador proporcional integral (PI)
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 * (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
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
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
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
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:
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
La anulación perfecta de perturbaciones requiere
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
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.
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
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");
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