Está en la página 1de 5

Sistemas de Control I

Practica de laboratorio 03

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


SIMULINK
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).

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:
𝑑ℎ 1
= (𝑞̇ − 𝑞̇ 0 ) (1)
𝑑𝑡 𝜌𝐴 𝑖
𝑞̇ 0 = 𝐾√ℎ (2)

Donde 𝑞𝑖 y 𝑞0 son los caudales másicos de entrada y salida, respectivamente y ℎ es la


altura del nivel de agua. Los parámetros del sistema son: 𝜌 = 1𝑘g⁄𝑚3 , 𝐴 = 1𝑚2 y 𝐾 =
1 = 𝑘g/seg⁄𝑚1⁄2 . El estado de equilibrio se fija alrededor del punto ℎ0 = 1 ,
calculando el caudal de entrada en estado estacionario se obtiene 𝑞𝑖0 = 𝑘g⁄𝑠𝑒g.

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:
Antes de continuar, guardamos 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:

clc
%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:

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.

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:

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

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=

u=

-1

y=

dx =

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 más 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 facilitar la identificación de
los estados, es recomendable los parámetros stateName y blockName.

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