Laboratorio 02
Laboratorio 02
Laboratorio 02
Laboratorio 02
El elemento Scope permite, al mismo tiempo que representa los resultados de una
simulación, guardar esos resultados en una variable de Matlab, de modo que se
puedan consultar sus valores desde la ventana de comandos.
𝒙
𝒌
F
𝒃 m
En general, el escalón se producirá en el instante cero (no estará retrasado) con lo que
el parámetro step time deberá ser siempre cero; el valor inicial del escalón (initial
value) también será cero; y el valor final (parámetro final value) deberá indicar la
amplitud del escalón, que en este caso particular es cinco.
Ahora haremos click sobre el botón Configuration Properties del elemento Scope,
para abrir la ventana de configuración:
Una vez hecho esto, lanzaremos de nuevo la simulación. El resultado sobre la ventana
de Simulink será el mismo, pero en la ventana de comandos de Matlab podremos
comprobar cómo se han creado dos nuevas variables. Para ello bastará teclear el
comando who:
>> who
Your variables are:
posicion tout
Se han creado dos variables: posicion y tout. La única variable que nos interesa es la
primera de ellas.
Si comprobamos el tamaño de la variable con el comando size, veremos que se trata
de un vector de 2 columnas y 58 filas (este último dato puede variar según los
ordenadores):
>> size(out.posicion)
ans =
58 2
La primera de las columnas contiene instantes de tiempo y la segunda contiene los
valores que toma la variable que se representa en el osciloscopio en cada instante. Si
Supongamos que nos interesa calcular el valor máximo de la señal. Dado que los
valores de la señal están contenidos en la segunda columna de la variable posicion,
bastará con utilizar el comando max de Matlab (se recomienda consultar la ayuda de
Matlab acerca de este comando):
indice =
12
Los valores pueden ser ligeramente distintos en diferentes ordenadores debido a las
precisiones de los cálculos. En cualquier caso, el comando max recorre la segunda
columna de la variable posicion y nos devuelve su valor máximo y cuál es la fila en la
que se produce ese valor (lo que hemos denominado índice). Si queremos comprobar
a qué instante de tiempo corresponde ese máximo, bastará con comprobar el valor
que toma la primera columna de la variable posicion para ese mismo índice (nota: se
utiliza la instrucción format short para mostrar menos cifras decimales).
>> format short
>> out.posicion(indice, :)
ans =
0.9111 0.7883
En resumen, hemos obtenido como resultado que la posición de la masa móvil (x) en
el ejemplo del sistema muelle-amortiguador alcanza un valor máximo de 0.7883
metros en el instante 0.9111 segundos.
𝒙
2𝟎𝟎
𝟏𝟎𝟎
𝟏𝟎 𝟑𝟎 𝟑𝟓 𝒈
La forma más sencilla de introducir una señal como la propuesta es mediante el
bloque From Workspace de la categoría Sources. A continuación, se muestra el
aspecto que debe tener el esquema Simulink de la práctica una vez sustituido el
bloque escalón por el bloque From workspace:
Una vez modificado el esquema Simulink, haremos clic sobre el elemento ‘From
Workspace’ para acceder a sus parámetros de configuración. Aparecerá una ventana
como la que se muestra a continuación:
Primer tramo: entre 0 y 10 segundos. La variable tiempo (vector tmp1) deberá tomar
valores entre 0 y 10 a intervalos de 0.1; y la señal (vector dat1) deberá responder a la
ecuación de la recta x=10t.
La segunda instrucción crea un vector de 200 elementos, tantos elementos como tiene
el vector tmp2, todos ellos con valor 100.
Tercer tramo: entre 30.1 y 35 segundos. La variable tiempo (vector tmp3) deberá
tomar valores entre 30.1 y 35 a intervalos de 0.1; y la señal ( vector dat3) deberá
responder a la ecuación de la recta x=20t-500. Esto lo conseguimos con las siguientes
sentencias de Matlab:
El último paso es crear las variables tmp y dat como concatenación de las variables
tmp1, tmp2, tmp3 y dat1, dat2, dat3 disponibles. Dado que tanto tmp como dat
deben ser vectores columna, se deberán combinar los vectores y trasponer el
resultado, tal y como indican las siguientes sentencias de Matlab (atención a la comilla
final que indica la operación de trasposición):
Una vez comprobado que las variables tmp y dat contienen valores correctos,
generaremos a partir de ellas la variable fuerza necesaria para el bloque From
Workspace. La primera columna deberá contener los tiempos y la segunda los datos,
con lo que las instrucciones Matlab a utilizar serán:
>> fuerza(:,1)=tmp
>> fuerza(:,2)=dat
Con la variable fuerza creada, es posible lanzar la simulación. Dado que la señal está
definida durante 35 segundos, el tiempo de simulación se fijará exactamente en 35
segundos (desde la opción Simulation parameters del menú Simulation). El
resultado sobre el osciloscopio se muestra en la figura siguiente, y se debe apreciar
cómo la salida del sistema (posición) reproduce aproximadamente los valores de la
entrada (fuerza aplicada) con pequeñas oscilaciones.
Donde los valores de las constantes del sistema son las siguientes:
R = 1.25 (resistencia de los devanados del motor).
I = 0.8 (momento de inercia del conjunto).
B = 0.5 (coeficiente de rozamiento viscoso).
KP = 3 (constante de par del motor).
KV = 0.01 (constante de velocidad del motor).
Sobre Simulink, probar con distintos valores de KC hasta encontrar uno que
cumpla las siguientes especificaciones:
Una vez elegido el valor adecuado para KC, calcular con la ayuda de Matlab la
situación de los polos del sistema resultante. Se deberán emplear las
siguientes instrucciones de Matlab: tf para crear las funciones de transferencia;
series y feedback para reducir el diagrama de bloques; y finalmente pole para
determinar la posición de los polos en el sistema resultante.
Solución
R = 1.25;
I = 0.8;
B = 0.5;
Kp = 3;
Kv = 0.01;
G = tf(1,[I,B])
sys1 = 1/R*Kp*G
sys2 = feedback(sys1,Kv)
sys3 = 0.25*sys2*tf(1,[1 0])
sys4 = feedback(sys3,1)
step(sys4,30)
t = 0:0.1:30;
n = length(t)
u = 20./ones(1,n)
lsim(sys4,u,t)
pole(sys4)
Para KC =0.1