14/Octubre/2011
Instituto Tecnológico de Morelia José María Morelos y Pavón
Alumno:
09120782 Ramos Albarrán Fernando
Asesor: Dr. Osvaldo Gutiérrez Sánchez
Control I
[REPORTE DE LA PRÁCTICA #5: “REDUCCIÓN DE DIAGRAMAS DE BLOQUES CON MATLAB”.] División de Estudios Profesionales: Ingeniería Eléctrica
RESUMEN Este documento pretende explicar algunas formas de reducir diagramas de bloques con las utilerías de MATLAB. Se plantearán diferentes diagramas de bloques y primeramente se usaran los comandos Series, y , después por medio de operaciones algebraicas, luego por los comandos y , por último se verá una forma general para resolver cualquier sistema con “n” diagramas de bloques. INTRODUCCIÓN MATLAB dispone en la actualidad de un amplio abanico de programas de apoyo especializados, Adicionalmente, existen comandos en MATLAB que facilitan la labor, tediosa en ocasiones, de reducir una representación en diagramas de bloques. Se puede utilizar MATLAB para la reducción de diagrama de bloques. Se dispone de tres métodos 1) Solución a través de los comandos series, paralelo y 2) Solución mediante operaciones algebraicas y 3) Solución mediante los comandos y .
,
DESARROLLO MATLAB tiene órdenes útiles para la reducción de sistemas de control en diagramas de bloques, las instrucciones de MATLAB que se verán en el transcurso de esta práctica son:
%Conexión en cascada de G1(s) y G2(s). %Conexión en paralelo de G1(s) y G2(s). %Conexiones de lazo cerrado. G(s) en la trayectoria directa y %H(s) como realimentación y (signo) es -1 para %realimentación negativa o +1 para retroalimentación positiva. %Agregación de sistemas (juntar varios sistemas). %Interconexión de los argumentos donde G es la matriz de %agregación, Q es una matriz de conexión de elementos, inputs %son las entradas del sistema y outputs son las salidas del %sistema.
Para mejor entendimiento de cada una de las funciones utilizadas en la práctica se recomienda utilizar la ayuda de MATLAB.
Ejemplo: Teniendo el diagrama de bloques de la figura se quiere reducir.
1. Solución a través de los comandos Series,
y
.
'Solución a través de los comandos Series, Parallel, & Feedback'
numg1=[-1] % Define numerador de G1(s). numg1 = -1 deng1=[1] % Define denominador de G1(s). deng1 = 1 numg2=[0 2] % Define numerador de G2(s). numg2 = 0 2 deng2=[1 2] % Define denominador de G2(s). deng2 = 1 2 numg3=-0.125*[1 0.435]% Define numerador de G3(s). numg3 = -0.1250 -0.0544 deng3=conv([1 1.23],[1 0.226 0.0169]) % Define denominador de %G3(s). deng3 = 1.0000 1.4560 0.2949 0.0208 numh1=[-1 0] % Define numerador de H1(s). numh1 = -1 0 denh1=[0 1] % Define denominador de H1(s). denh1 = 0 1 G1=tf(numg1,deng1) % Crea función de Transferencia G1(s). Transfer function: -1
G2=tf(numg2,deng2) % Crea función de Transferencia G2(s). Transfer function: 2 ----s + 2 G3=tf(numg3,deng3) % Crea función de Transferencia G3(s). Transfer function: -0.125 s - 0.05438 -----------------------------------s^3 + 1.456 s^2 + 0.2949 s + 0.02079 H1=tf(numh1,denh1) % Crea función de Transferencia H1(s). Transfer function: -s G4=series(G2,G3) % Calcula el producto de G2 y G3 Transfer function: -0.25 s - 0.1088 -----------------------------------------------s^4 + 3.456 s^3 + 3.207 s^2 + 0.6105 s + 0.04157 G5=feedback(G4,H1) % Calcula retroalimentación Transfer function: -0.25 s - 0.1088 -----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.7193 s + 0.04157 Ge=series(G1,G5) % Calcula producto de G1 con G5 Transfer function: 0.25 s + 0.1088 -----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.7193 s + 0.04157 'T(s) a través de los comandos Series, Parallel, & Feedback' T=feedback(Ge,1) % Calcula retroalimentación Transfer function: 0.25 s + 0.1088 ----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.9693 s + 0.1503
2. Solución a través de operaciones algebraicas. ' Solución a través de operaciones algebraicas ' clear
% Limpia variables.
numg1=[-1]
% Define numerador de G1(s).
numg1 = -1 deng1=[1] deng1 = 1
% Define denominador de G1(s).
numg2=[0 2]
% Define numerador de G2(s).
numg2 = 0
2
deng2=[1 2]
% Define denominador de G2(s).
deng2 = 1
2
numg3=-0.125*[1 0.435] % Define numerador de G3(s). numg3 = -0.1250
-0.0544
deng3=conv([1 1.23],[1 0.226 0.0169]) % Define denominador de %G3(s). deng3 = 1.0000
1.4560
numh1=[-1 0]
0.2949
0.0208
% Define numerador de H1(s).
numh1 = -1
0
denh1=[0 1]
% Define denominador de H1(s).
denh1 = 0
1
G1=tf(numg1,deng1)
% Crea función de Transferencia G1(s).
Transfer function: -1 G2=tf(numg2,deng2)
% Crea función de Transferencia G2(s).
Transfer function: 2 ----s + 2 G3=tf(numg3,deng3)
% Crea función de Transferencia G3(s).
Transfer function: -0.125 s - 0.05438 -----------------------------------s^3 + 1.456 s^2 + 0.2949 s + 0.02079
H1=tf(numh1,denh1)
% Crea función de Transferencia H1(s).
Transfer function: -s G4=G3*G2
% Calcula producto.
Transfer function: -0.25 s - 0.1088 -----------------------------------------------s^4 + 3.456 s^3 + 3.207 s^2 + 0.6105 s + 0.04157 G5=G4/(1+G4*H1)
% Calcula realimentación.
Transfer function: -0.25 s^5 - 0.9728 s^4 - 1.178 s^3 - 0.5014 s^2 - 0.07679 s - 0.004521 --------------------------------------------------------------------------------------------------s^8 + 6.912 s^7 + 18.61 s^6 + 24.36 s^5 + 15.76 s^4 + 4.705 s^3 + 0.7162 s^2 + 0.05529 s + 0.001728
G5=minreal(G5)
% Cancela términos comunes.
Transfer function: -0.25 s - 0.1088 -----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.7193 s + 0.04157 Ge=G5*G1
% Multiplica las F.T. de los lazos internos.
Transfer function: 0.25 s + 0.1088 -----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.7193 s + 0.04157 'T(s) a través de operaciones algebraicas' T=Ge/(1+Ge)
% F.T. de lazo cerrado.
Transfer function: 0.25 s^5 + 0.9727 s^4 + 1.24 s^3 + 0.5558 s^2 + 0.08862 s + 0.004521 ---------------------------------------------------------------------------------------------s^8 + 6.912 s^7 + 18.86 s^6 + 25.58 s^5 + 17.98 s^4 + 6.5 s^3 + 1.361 s^2 + 0.1484 s + 0.00625
T=minreal(T)
% Cancela términos comunes.
Transfer function: 0.25 s + 0.1088 ----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.9693 s + 0.1503
2.1 Solución por medio del programa general de resolución diagramas de bloques (transferfunction) >> transferfunction Introduce el número de bloques que tiene el sistema5 Al definir los bloques debes introducir primero la entrada y al final la salida Introduce los coeficientes del numerador: 1 Indroduce los coeficientes del denominador: 1 Transfer function: 1 Q = 1 Cuantas entradas tiene el subsistema: 1 Introduce la entrada del subsistema: 0 Q = 1 0 Introduce los coeficientes del numerador: -1 Introduce los coeficientes del denominador: 1 Transfer function from input 1 to output... #1: 1 #2:
0
Transfer function from input 2 to output... #1: 0 #2:
-1
Q = 1 2
0 0
Cuantas entradas tiene el subsistema: 2 Introduce la entrada del subsistema: -4 Q = 1 2
0 -4
Introduce la entrada del subsistema: 1 Q = 1 2
0 -4
0 1
Introduce los coeficientes del numerador: 2 Indroduce los coeficientes del denominador: [1 2] Transfer function from input 1 to output... #1: 1 #2:
0
#3:
0
Transfer function from input 2 to output... #1: 0 #2:
-1
#3:
0
Transfer function from input 3 to output... #1: 0 #2:
0
#3:
2 ----s + 2
Q = 1 2 3
0 -4 0
0 1 0
Cuantas entradas tiene el subsistema: 2 Introduce la entrada del subsistema: 2 Q = 1 0 0 2 -4 1 3 2 0 Introduce la entrada del subsistema: -5
Q = 1 2 3
0 -4 2
0 1 -5
Introduce los coeficientes del numerador: -0.125*[1 0.435] Indroduce los coeficientes del denominador: conv([1 1.23],[1 0.226 0.0169]) Transfer function from input 1 to output... #1: 1 #2:
0
#3:
0
#4:
0
Transfer function from input 2 to output... #1: 0 #2:
-1
#3:
0
#4:
0
Transfer function from input 3 to output... #1: 0 #2:
0
#3:
2 ----s + 2
#4:
0
Transfer function from input 4 to output... #1: 0 #2:
0
#3:
0
#4:
-0.125 s - 0.05438 -----------------------------------s^3 + 1.456 s^2 + 0.2949 s + 0.02079
Q = 1 2 3 4
0 -4 2 0
0 1 -5 0
Cuantas entradas tiene el subsistema: 1 Introduce la entrada del subsistema: 3 Q = 1 2 3 4
0 -4 2 3
0 1 -5 0
Introduce los coeficientes del numerador: [-1 0] Indroduce los coeficientes del denominador: 1 Transfer function from input 1 to output... #1: 1 #2:
0
#3:
0
#4:
0
#5:
0
Transfer function from input 2 to output... #1: 0 #2:
-1
#3:
0
#4:
0
#5:
0
Transfer function from input 3 to output... #1: 0 #2:
0
#3:
2 ----s + 2
#4:
0
#5:
0
Transfer function from input 4 to output... #1: 0 #2:
0
#3:
0
#4:
-0.125 s - 0.05438 -----------------------------------s^3 + 1.456 s^2 + 0.2949 s + 0.02079
#5:
0
Transfer function from input 5 to output... #1: 0 #2:
0
#3:
0
#4:
0
#5:
-s
Q = 1 2 3 4 5
0 -4 2 3 0
0 1 -5 0 0
Cuantas entradas tiene el subsistema: 1 Introduce la entrada del subsistema: 4 Q = 1 2 3 4 5
0 -4 2 3 4
0 1 -5 0 0
Define las entradas: 1 Define las salidas: 4 Transfer function: 0.25 s + 0.1087 ----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.9693 s + 0.1503
3. Solución de otro problema diferente con los comandos Append y Connect. ' Solución a través de los comandos Append y Connect' 'G1(s) = (-K1)*(1/(-K2s)) = 1/s' % Imprime etiqueta. G1(s) = (-K1)*(1/(-K2s)) = 1/s numg1=[-1]
% Define numerador de G1(s).
numg1 = -1 deng1=[1 0]
% Define denominador de G1(s).
deng1 = 1
0
G1=tf(numg1,deng1)
% Crea función de Transferencia G1(s).
Transfer function: -1 -s 'G2(s) = (-K2s)*(2/(s+2)'
% Imprime etiqueta.
G2(s) = (-K2s)*(2/(s+2) numg2=[-2 0]
% Define numerador de G2(s).
numg2 = -2
0
deng2=[1 2]
% Define denominador de G2(s).
deng2 = 1
2
G2=tf(numg2,deng2)
% Crea función de Transferencia G2(s).
Transfer function: -2 s ----s + 2 'G3(s) = -0.125(s+0.435)/((s+1.23)(s^2+0.226s+0.0169))' % Imprime G3(s) = -0.125(s+0.435)/((s+1.23)(s^2+0.226s+0.0169)) numg3= - 0.125*[1 0.435]
% Define numerador de G3(s).
numg3 = -0.1250
-0.0544
deng3=conv([1 1.23],[1 0.226 0.0169]) % Define denominador de %G3(s). deng3 = 1.0000
1.4560
G3=tf(numg3,deng3)
0.2949
0.0208
% Crea función de Transferencia G3(s).
Transfer function: -0.125 s - 0.05438 -----------------------------------s^3 + 1.456 s^2 + 0.2949 s + 0.02079 System=append(G1,G2,G3)
% Unir todos los subsistemas.
Transfer function from input 1 to output... -1 #1:
-s
#2:
0
#3:
0
Transfer function from input 2 to output... #1:
0 -2 s
#2:
----s + 2
#3:
0
Transfer function from input 3 to output... #1:
0
#2:
0 -0.125 s - 0.05438
#3:
-----------------------------------s^3 + 1.456 s^2 + 0.2949 s + 0.02079
input=1
% La entrada es el primer subsistema G1(s).
input = 1 output=3
% La salida es el tercer subsistema, G3(s).
output = 3 Q=[1 -3 0
% Subsistema 1, G1(s), obtiene su entrada del % negative de la salida del subsistema 3, %G3(s).
2 1 -3
% Subsistema 2, G2(s), obtiene su entrada del % subsistema 1, G1(s), y el negativo de la %salida % del subsistema 3, G3(s).
3 2 0];
% Subsistema 3, G3(s), obtiene su entrada del % subsistema 2, G2(s).
Q = 1
-3
0
2
1
-3
3
2
0
T=connect(System,Q,input,output) % Conecta los subsistemas. Transfer function: -0.25 s^2 - 0.1088 s - 5.81e-017 ----------------------------------------------------------------s^5 + 3.456 s^4 + 3.457 s^3 + 0.4693 s^2 - 0.06718 s + 1.331e-017 'T(s) a través de los comandos Append & Connect' T(s) a través de los comandos Append & Connect T=tf(T)
% Crea F.T. de lazo cerrado.
Transfer function: -0.25 s^2 - 0.1088 s - 5.81e-017 ----------------------------------------------------------------s^5 + 3.456 s^4 + 3.457 s^3 + 0.4693 s^2 - 0.06718 s + 1.331e-017
T=minreal(T)
% Cancela términos comunes.
Transfer function: -0.25 s - 0.1088 -----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.4693 s - 0.06718
3.1 Solución por medio del programa general de resolución diagramas de bloques (transferfunction) >> transferfunction Introduce el número de bloques del sistema: 3 Al definir los bloques debes introducir primero la entrada y al final la salida Introduce los coeficientes del numerador: [-1] Indroduce los coeficientes del denominador: [1 0]
Transfer function: -1 -s
Q= 1
Cuantas entradas tiene el subsistema: 2 Introduce la entrada del subsistema: -3
Q= 1 -3
Introduce la entrada del subsistema: 0 Q= 1 -3
0
Introduce los coeficientes del numerador: [-2 0] Indroduce los coeficientes del denominador: [1 2]
Transfer function from input 1 to output... -1 #1: -s
#2: 0
Transfer function from input 2 to output... #1: 0
-2 s #2: ----s+2 Q= 1 -3
0
2
0
0
Cuantas entradas tiene el subsistema: 2 Introduce la entrada del subsistema: 1 Q= 1 -3
0
2
0
1
Introduce la entrada del subsistema-3 Q= 1 -3 2
0
1 -3
Introduce los coeficientes del numerador: -0.125*[1 0.435] Indroduce los coeficientes del denominador: conv([1 1.23],[1 0.226 0.0169]) Transfer function from input 1 to output... -1 #1: -s #2: 0 #3: 0 Transfer function from input 2 to output... #1: 0 -2 s #2: ----s+2
#3: 0
Transfer function from input 3 to output... #1: 0 #2: 0
-0.125 s - 0.05438 #3: -----------------------------------s^3 + 1.456 s^2 + 0.2949 s + 0.02079 Q= 1 -3
0
2
1 -3
3
0
0
Cuantas entradas tiene el subsistema: 2 Introduce la entrada del subsistema: 2 Q= 1 -3
0
2
1 -3
3
2
0
Introduce la entrada del subsistema: 0 Q= 1 -3
0
2
1 -3
3
2
0
Define las entradas:1 Define las salidas: 3 Transfer function: -0.25 s - 0.1088 -----------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.4693 s - 0.06718
EJERCICIOS: Hacer un programa general que funcione para resolver diferentes diagramas de bloques y probarlo con la reducción de los diagrama de bloques de las figuras, además de utilizar otros dos diagramas de bloques complejos para probarlo. function T= transferfunction( system, Q ) %Obtiene la función de transferencia de un sistema %de diagrama de bloques numbloq=input('Introduce el número de bloques del sistema: ');%Define el %numero de bloques y lo almacena en numbloq disp('Al definir los bloques debes introducir primero la entrada'); disp('y al final la salida'); for i=1:1:numbloq %En cada bucle entra a un bloque diferente numg=input('Introduce los coeficientes del numerador: '); deng=input('Indroduce los coeficientes del denominador: '); G=tf(numg,deng); %Crea la función de transferencia y la va almacenando system(i,i)=G %en forma de diagonal en una mtriz system Q(i,1)=i %Define la primera columna de la matriz Q para cada bloque numentr=input('Cuantas entradas tiene el subsistema: '); suma=1; for j=1:1:numentr suma=suma+j;%En cada bucle se le suma 1 a j para que se no se tome %en cuenta la columna 1 definida previamente Q(i,suma)=[input('Introduce la entrada del subsistema: ')]%Se guardan %datos en la matriz aumentando el número de columnas %hasta que termine el bucle suma=1; %Se asigna 1 a suma nuevamente, para que entre al ciclo end end x=input('Define las entradas: '); y=input('Define las salidas: '); T=connect(system,Q,x,y);%Se conectan los subsistemas T=tf(T); %Crea la función de transferencia T=minreal(T); %Cancela términos comunes end
Ejercicio 1 Reducir el siguiente diagrama de bloques por el método analítico y utilizando la función transferfunction de Matlab.
Reduciendo el lazo cerrado que conforman
y
, tenemos:
Ahora se desplazará el primer punto de toma a la posición entre
función
y ahora será
y
, pero esto nos altera la
, entonces podemos sacar el paralelo de
tanto:
Ahora
está en serie con
Ahora nos queda
Por ultimo
y reduciéndolos tenemos:
en lazo cerrado con
está en serie con
y reduciéndolos nos queda:
y reduciéndolos tenemos: (
)(
)
con
, por lo
Ahora le asignaremos valores a cada función esto con la finalidad de llegar a una función de transferencia en forma no simbólica y poder comparar los resultados con los que arroga matlab cuando se introduce el mismo diagrama de bloques.
Sustituyendo los valores de las funciones de transferencia en , tenemos:
( ) (( ) (
)
( )( )
)
( )(
( )(
)
) (
(
( ) )
) (
(
)
)
Ejercicio 1, resuelto con transferfunction >> transferfunction Introduce el número de bloques que tiene el sistema = 8 Al definir los bloques debes introducir primero la entrada y al final la salida Q = 1 2 3 4
0 6 2 3
0 -7 0 0
0 1 0 0
5 6 7 8
2 2 3 4
0 0 0 5
0 0 0 0
Define las entradas = 1 Define las salidas = 8
Transfer function: s ------------------------------------------------s^4 + 0.3333 s^3 + 0.3333 s^2 - 0.3333 s - 0.3333
Ejercicio 2
Si movemos el tercer punto de suma hacia la entrada del sistema con el sumador 2, el bloque se ve afectado, por lo que cambia a . Entonces y están en serie, se tiene entonces que:
Con el bloque
El bloque
y el
se tiene una retroalimentación. Se aplica la fórmula:
queda en serie con
Ahora se tiene una retroalimentación con los bloques
y
. Se aplica nuevamente la
fórmula:
(
El bloque
Por último
)(
)
queda en serie con
está en retroalimentación con
Como transferfunction no trabaja con variables simbólicas, nos daremos la tarea de definir un valor numérico para cada bloque de los sistemas dados, para al momento de introducirlos a MATLAB comprobar la correcta programación de la función así como la comprobación de nuestros resultados, mediante la función de transferencia obtenida.
( ) ( )
( )
( )
Ejercicio 2, resuelto con transferfunction Como la salida del programa es muy extensa, solo se mostrará cómo se llenó la matriz de conexiones, al igual el diagrama de cómo se renombraron dichos diagramas. Q= 1 2 3 4 5 6 7 8
0 0 1 -7 2 -8 3 6 4 0 5 0 5 0 4 0
Define las entradas: 1 Define las salidas: 5 Transfer function: s^2 + 1.494e-016 s + 5.678e-016 ------------------------------s^3 + s^2 - s + 6 El resultado es correcto ya que las expresiones están elevadas a las -16, lo cual es prácticamente cero, por lo tanto el termino del numerador es s^2
Ejercicio 3 Reducir el siguiente diagrama de bloques por el método analítico y utilizando la función transferfunction de Matlab.
(
)(
)
Ejercicio 3, resuelto con transferfunction Como la salida del programa es muy extensa, solo se mostrará cómo se llenó la matriz de conexiones, al igual el diagrama de cómo se renombraron dichos diagramas.
>> transferfunction Introduce el número de bloques que tiene el sistema = 6 Al definir los bloques debes introducir primero la entrada y al final la salida
Q = 1 2 3 4 5 6
0 1 2 3 6 4
0 -5 0 0 0 0
0 -3 0 0 0 0
0 -2 0 0 0 0
Define las entradas = 1 Define las salidas = 6
Transfer function: s + 1 --------------------------s^4 + 2 s^3 + 2 s^2 + s + 1 Ejercicio 4
Si movemos el tercer punto de suma hacia la entrada del sistema junto al segundo punto de suma, el bloque se ve afectado y se divide entre :
De la misma forma, el punto de toma que alimenta modificándose como
se mueve, pero hacia la salida,
Por lo tanto los bloques
quedan en serie
Y nos quedan dos retroalimentaciones, primero hacemos la retroalimentación con
Ahora la retroalimentación con
(
)(
Por último queda una retroalimentación con 1.
Ahora le damos valores numéricos a las variables
)
Ejercicio 4, resuelto con transferfunction Q= 1 0 0 2 1 -4 3 -5 2 4 3 0 5 4 0 6 3 0
0 6 0 0 0 0
Define las entradas: 1 Define las salidas: 4 Transfer function: 0.6667 s^2 + 0.6667 s --------------------s^2 + s + 0.3333 CONCLUSIONES Para la programación de transferfunction, se requirió únicamente el comando , ya que dentro del bucle se creó un vector que realizará la misma matriz que realiza el comando , este no fue necesario, porque se ser así se tendría que introducir una condición para cada caso, y así poder dar valores específicos al , ya que no se puede cambiar su sintaxis. Se analizó durante el desarrollo de la práctica, que es posible realizar una función que admita a un vector con “n” elementos y a partir de dicho vector crear una matriz que ponga todos sus elementos en la diagonal principal, sería un caso parecido a la instrucción utilizada en transferfunction como usando un es decir, se puede crear una función “ ” que reconozca a un vector como su entrada
BIBLIOGRAFÍA [1] Dr. Osvaldo Gutiérrez Sánchez, “Control I”, Instituto Tecnológico de Morelia, Departamento de Ingeniería Eléctrica. [2] David Báez López, “MATLAB con Aplicaciones a la Ingeniería, Física y Finanzas”, 1ra. Edición, Editorial Alfaomega, septiembre 2006. [3] Javier García de Jalón, José Ignacio Rodríguez, Alfonso Brazález, “Aprenda Matlab 5.3 como si estuviera en primero”, Perteneciente a la colección: “Aprenda…, como si estuviera en primero”, San Sebastián, Agosto 1999.