Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

7.2.

Obtención de modelo matemático

A continuación vamos se realizara un procedimiento por el cual se podra obtener las


matrices de estado un modelo previamente cargado en Simulink.

1- Cargo modelo previamente generado. El modelo debe estar ubicado en el directorio


de trabajo (Current Directory)

Clase_N12_Ejemplo

2- De la librería Source extraigo el elemento In1 y de la librería Sinks el elemento Out1


(en versión 6 de Matlab se encuentran en la librería Señales y Sistemas).
3- Interconecto

4- Guardo los cambios como Clase_N13_Ejemplo


5- Vuelvo a la pantalla de comandos
6- Ejecuto el siguiente comando, para obtener las matrices del sistema generado.

[A,B,C,D]=linmod('Clase_N13_Ejemplo')
Warning: Using a default value of 0.2 for maximum step size. The simulation step size
will be limited to be less than this value.
> In dlinmod at 176
In linmod at 54

A=

0 -10 -40
1 0 0
0 -1 -5

B=

10
0
1

C=

0 1 0

D=

Obtengo la función de transferencia del sistema completo.

[num,den]=ss2tf(A,B,C,D)

num =

0 -0.0000 10.0000 10.0000

den =

1.0000 5.0000 10.0000 10.0000

printsys(num,den)

num/den =

-6.2172e-015 s^2 + 10 s + 10
----------------------------
s^3 + 5 s^2 + 10 s + 10

Ejecuto el siguiente comando

help linmod
LINMOD Obtains linear models from systems of ord. diff. equations (ODEs).
[A,B,C,D]=LINMOD('SYS') obtains the state-space linear model of the
system of ordinary differential equations described in the
block diagram 'SYS' when the state variables and inputs are set
to the defaults specified in the block diagram.

[A,B,C,D]=LINMOD('SYS',X,U) allows the state vector, X, and


input, U, to be specified. A linear model will then be obtained
at this operating point.

[A,B,C,D]=LINMOD('SYS',X,U,PARA) allows a vector of parameters to


be set. PARA(1) sets the perturbation level (obsolete in R12 unless
using the 'v5' option - see below). For systems that are functions of
time PARA(2) may be set with the the value of t at which the linear
model is to be obtained (default t=0). Set PARA(3)=1 to remove extra
states associated with blocks that have no path from input to output.

[A,B,C,D]=LINMOD('SYS',X,U,'v5') uses the full-model-perturbation


algorithm that was found in MATLAB 5.x. The current algorithm
uses pre-programmed linearizations for some blocks, and should be more
accurate in most cases. The new algorithm also allows for special
treatment of problematic blocks such as the Transport Delay and
the Quantizer. See the mask dialog of these blocks for more
information and options.

[A,B,C,D]=LINMOD('SYS',X,U,'v5',PARA,XPERT,UPERT) uses the


full-model-perturbation algorithm that was found in MATLAB 5.x.
If XPERT and UPER are not given, PARA(1) will set the perturbation level
according to:
XPERT= PARA(1)+1e-3*PARA(1)*ABS(X)
UPERT= PARA(1)+1e-3*PARA(1)*ABS(U)
The default perturbation level is PARA(1)=1e-5.
If vectors XPERT and UPERT are given they will be used as the perturbation
level for the systems states and inputs.

See also: linmodv5, linmod2, dlinmod, trim

Reference page in Help browser


doc linmod

Al pedir la ayuda del comando utilizado previamente para generar las matrices de
estado, se aprecia que este comando permite no tan solo obtener el modelo matricial,
sino que permitiría linealizar el modelo si este no fuera lineal. En el ejemplo realizado el
modelo era lineal, a continuación se analizara un caso en el que el modelo cargado en
Simulink no lo es.
7.3. Linealización con Simulink

Dadas las siguientes ecuaciones:

e(t) = R*i(t) + L di(t)/dt

Mdy2/dt2 = Mg – i2(t)/y(t)

Se desea obtener el modelo matemático linealizado, Para ello las ecuaciones antes
mencionadas se pueden representar con el siguiente diagrama en bloque.

Mdy(t)2/dt2
e(t) 1/(R+LS) i(t) ( )2 * -

/ +

Mg

y(t)
1/M 1/S2

El mismo se puede representar en Simulink siguiendo los pasos detallados:

1-Insertar los siguientes bloques:

Bloques In / Out, elementos necesarios para generar una comunicación con el espacio
de trabajo en el momento de obtener el modelo matemático. Ubicados en la librería
Source / Sinks .

Bloques State-Space, para representar la primera ecuación con variable de estados, y el


bloque Integrator. Ubicados en la librería Continuos.

Bloques Sum, Gain y Divide (Product versiones anteriores) . Ubicados en la librería


Math Operations.

Bloque Constant, ubicado en librería Source.

Bloque Fcn ubicado en la libreria User Defined Funtions

(El bloque de ganancia, lo podemos omitir ya que el valor de la ganancia es 1)


2- Configuración de los bloques. La configuración de la mayoría de los bloques que
insertamos, ya se ha visto, de forma que se detallara bloques que usamos por primera
vez:

Configuración del bloque Fcn:

Al hacer doble click sobre el bloque nos aparece la siguiente ventana

En el campo Expression cargaremos la función que deseamos realizar, tomando como


nombre de nuestra variable de entrada “u”.
Configuración de bloque Product:

Al hacer doble click sobre el bloque aparecerá la siguiente ventana.


En el campo Number of input ingresaremos la cantidad de entradas que tiene el
multiplicador, o en el caso de querer usar un divisor, como es nuestro caso se ingresara
la operación que realizara cada entrada, asignando una entrada por cada operación.

El campo Multiplication, define el tipo de operación, elemento a elemento o matricial.

Este modelo representa el ejemplo de un sistema de suspensión magnética. Los datos


del mismo son:

R= 1 ohm
L= 0.01Hy
M= 1Kg
g=32.2 m/s2

Lo que nos da las siguientes matrices de estado para el bloque en cuestión

A= -1/0.01
B= 1/0.01
C= 1
D= 0

Hacemos doble click en el bloque State Space y cargamos las variables


Hacemos doble click en el bloque Constant
3- Interconectamos todos los bloques.

4- Guardamos el nuevo modelo con el nombre de “Clase_N13_Ejemplo_N2”

5- Una ves que el modelo este guardado ejecutamos volvemos a la pantalla de


comandos y ejecutamos el siguiente comando

[A,B,C,D]=linmod('Clase_N13_Ejemplo_N2')

Warning: Using a default value of 0.2 for maximum step size. The simulation step size
will be
equal to or less than this value. You can disable this diagnostic by setting 'Automatic
solver
parameter selection' diagnostic to 'none' in the Diagnostics page of the configuration
parameters dialog
> In dlinmod at 195
In linmod at 60
Warning: Division by zero in 'Clase_N13_Ejemplo_N2/Divide'
> In dlinmod at 231
In linmod at 60

A=

0 0 1
0 -100 0
NaN 0 0

B=
0
100
0

C=

1 0 0

D=

6-Para entender lo que nos esta diciendo pedimos ayuda al asistente,

help NaN

NaN Not-a-Number.
NaN is the IEEE arithmetic representation for Not-a-Number.
A NaN is obtained as a result of mathematically undefined
operations like 0.0/0.0 and inf-inf.

See also INF.

Analizando esto nos damos cuenta que es a raíz de que no definimos el punto en donde
se debe linealizar el sistema, por este motivo el programa lo toma como cero. Al ser
cero, esto produce que halla una división por cero, lo que genera el NaN.
Para salvar este problema, definimos un vector con el punto alrededor del cual se
linealizara el sistema y lo ingresamos.

De la matriz C puedo ver que la variable x1 representa la salida. (y)


Y de la matriz B puedo ver que la variable X2 representa la entrada (i)
Por lo tanto x3 es (y’)

Y de las condiciones iniciales que nos dan (y(0)=0.5 ), determinamos el punto alrededor
del cual vamos a linealizar.

Del ejercicio del libro

x1(0) = y(0) =x
x2(0) = sqrt(M*g*y(0))
x3(0) = dy(0)/dt

7-Defino el vector "x" con los valores alrededor de los cuales el sistema será linealizado
y el vector “u” de la fuerza de control.

x= [ 0.5 sqrt(32.2*0.5) 0];


u=0;
8-Luego de esto uso el comando extendido para incluir los vectores recientemente
creados.

[A,B,C,D]=linmod('Clase_N13_Ejemplo_N2',x,u)

Warning: Using a default value of 0.2 for maximum step size. The simulation step size
will
be equal to or less than this value. You can disable this diagnostic by setting 'Automatic
solver parameter selection' diagnostic to 'none' in the Diagnostics page of the
configuration parameters dialog
> In dlinmod at 195
In linmod at 60

A=

0 0 1.0000
0 -100.0000 0
64.4000 -16.0499 0

B=

0
100
0

C=

1 0 0

D=

Hemos obtenido un sistema linealizado.

You might also like