Está en la página 1de 5

Modelado y Linealización de Sistemas No Lineales usando MATLAB y SIMULINK

1 Introducción
En este documento discutiremos la forma de emplear Simulink para modelar la conducta dinámica de
sistemas no lineales y obtener modelos dinámicos lineales de su correspondiente representación no
lineal.
La información obtenida puede servir para diversos propósitos, como explorar la conducta dinámica de
un sistema dado, o bien, el diseño de controladores usando alguna representación lineal del sistema a
controlar (ya sea en forma de espacio de estado o de función de transferencia).

2 Modelado

El modelo que usaremos para mostrar la forma de realizar las actividades anteriores en SIMULINK se
refiere al control de nivel de aguan en un tanque con un único caudal de entrada y salida:

dh 1
= ( q&i − q&o ) ec.1
dt ρ A
q&o = K h ec.2
Donde qi y qo son los caudales másicos de entrada y salida, respectivamente y h es la altura del nivel de
agua. Los parámetros del sistema son: ρ = 1 kg/m3, A = 1 m2 y K = 1 kg/s m1/2. El estado de equilibrio se
fija alrededor del punto h0 = 1, calculando el caudal de entrada en estado estacionario se obtiene qi0 = 1
kg/s.
3 Diagrama de Bloques en SIMULINK

Para representar el modelo dinámico del núcleo del reactor dado por las ecuaciones 1 y 2 en Simulink
empezamos ejecutando desde el Workspace de Matlab la siguiente instrucción:

>> simulink
esta instrucción invoca el programa Simulink donde aparece la biblioteca básica de funciones. Cree un
nuevo modelo y aparecerá el área de trabajo Es recomendable comenzar colocando los bloques
integradores, tantos como ecuaciones, para este caso solo un integrador. Desde el bloque de funciones
continuas arrastrar el bloque del integrador y soltarlo en el área de trabajo de Simulik, luego con el
botón derecho del mouse copiaremos el bloque del integrador haciendo clic sobre el bloque integrador y
soltando donde se desee ubicar el nuevo bloque. Colocar flechas de entrada/salida, y etiquetar las
flechas con la información pertinente tal como se muestra a continuación:
figura 1
Antes de continuar, guardar el trabajo con el nombre ctrl_nivel_no_lineal.
A continuación definiremos las constantes que sean necesarias creando desde el workspace de Matlab
un nuevo M-File. En este tipo de archivos ejecutables desde Matlab se puede crear programas y
funciones o simplemente definir constantes. Dentro del archivo escribir las siguientes líneas:
%Constantes
rho = 1 %[kg/m3]
A = 1 %[m2]
K=1
%Condicion de equilibrio
h0 = 1
qi0 = 1

Luego salvar como dinámica_tanque.


Siguiendo con el modelo colocaremos un bloque sumador (de la librería Math Operations) a la entrada
del integrador anterior (la salida de este sumador será el lado derecho de la ecuación 1) tal como se
muestra en la figura siguiente:
figura 2

Ahora agregamos los bloques necesarios para construir la parte derecha de la ecuación 1, haciendo
doble clic sobre los bloques es posible cambiar algunos parámetros, en los bloques de ganancia colocar
el nombre de la variable que corresponda según las definiciones que se hicieron en el M-File, hacer lo
mismo con el bloque de la constante. Luego unir los bloques como muestra la siguiente figura (hint: para
unir los bloques puede ser útil seleccionar el bloque origen, presionar la tecla ctrl y hacer clic sobre el
bloque destino, también es útil para copiar bloques, hacer clic con el botón derecho del mouse arrastrar
y soltar):

figura 3

De la misma forma que antes, completamos el modelo de control de nivel del tanque agregando los
bloques de entrada y salida (inport/outport), en la siguiente figura se ve el modelo terminado:
Figura 4

4 Linealización del Sistema No Lineal


Antes de proceder a explicar el procedimiento de linealización debemos mencionar que dicho proceso
normalmente se acostumbra realizarlo alrededor de algún estado estacionario del proceso en cuestión.
Por lo tanto, antes de linealizar el proceso debemos primero evaluar el estado estacionario
4.1 Estado estacionario del proceso (antes de usar Matlab, hallar las condiciones a mano)

Para obtener el estado estacionario de un sistema cualquiera modelado en Simulink usamos el comando
trim (hacer help trim para ver los parámetros que necesita y devuelve) el cual es parte de Matlab.
Entonces desde la ventana de comandos de Matlab, o bien directamente en el M-File, tecleamos la
siguiente instrucción:
xo = [h0];
uo = 0;
yo = 0;
ix = [h0];
[x,u,y,dx] = trim('ctrl_nivel_no_lineal',xo,uo,yo,ix)

donde:
xo = estimado inicial para evaluar el estado estacionario
uo = valor fijo de la entrada
yo = estimado inicial de las salida
ix = valor fijo de los estados
iu = variable de entrada cuyo valor permanece constante
ejecutando el comando anterior obtenemos la siguiente respuesta de Matlab:
x=
1
u=
1
y=
1
dx =
0
Observar que la derivada en el punto hallado es dx = 0, esto indica que el punto es un punto
estacionario.
Nota: Antes de continuar, nos detendremos un instante a imaginar un sistema de mayor complejidad,
supongamos que en lugar de una única variable de estado, x, existen dos o mas variables, es decir, dos o
mas integradores. Deberíamos preguntarnos como hace Simulink para ordenar las variables de estado.
Es posible extraer la estructura de las variables de estado x del modelo usando el siguiente comando.
x = Simulink.BlockDiagram.getInitialState('ctrl_nivel_no_lineal');
Donde x, es una estructura del tipo:
x.signals
struct array with fields:
values
dimensions
label
blockName
stateName
inReferencedModel
sampleTime
Si accedemos al blockName (ejecutando x.signals.blockName) veremos los nombres de todos los bloques
integradores del modelo, según el orden que les da Simulink. Algunos parámetros pueden ser
configurados desde el modelo, para facilita el la identificación de los estados, es recomendable los
parámetros stateName y blockName.

4.2 Linealización
Una vez que hemos calculado un estado estacionario del sistema estamos listos para proceder a
linealizar el modelo no lineal original. Para este propósito usaremos el estado estacionario evaluado
anteriormente. Tecleando la siguiente instrucción en Matlab (hacer un help de linmod):
[A,B,C,D] = linmod('ctrl_nivel_no_lineal',x)

Con este resultado se puede construir un bloque de espacio de estado y validar los resultados de la
linealización. También es posible obtener el sistema linealizado en función transferencia.

También podría gustarte