Diagramas de bloques#

Diagrama de bloques: concepto#

Una forma esquem谩tica de representar los sistemas de control es a trav茅s de los diagramas de bloques. En dicho diagrama identificamos los principales componentes como bloques, omitiendo detalles y mostrando la direcci贸n principal de la informaci贸n y la relaci贸n de causalidad entre componente y otro.

En la siguiente figura podemos ver el diagrama de bloques gen茅rico del sistema de control realimentado.

sistema de control general

Figura 14 Diagrama de control general de sistema controlado#

Decimos que este sistema est谩 realimentado, por que podemos ver que usamos la salida, que para este caso en particular es la medici贸n de temperatura, para calcular y/o modificar la entrada al sistema. En este diagrama de bloques el resultado del sensor de salida se compara, mediante una resta con el sensor de la referencia.

Ejemplo de sistema de control representado por diagrama de bloques#

En la siguiente figura mostramos como ejemplo de diagrama de bloques el sistema de control de una caldera controlado por un termostato.

sistema de control general

Figura 15 Diagrama de control de temperatura#

Diagramas de bloques como representaci贸n matem谩tica#

Los diagramas de bloques, no solo pueden ser conceptuales, sino que tambi茅n pueden ser usados para representar matem谩ticamente los sistemas.

En un diagrama de bloques cada bloque del diagrama representa matem谩ticamente una parte del sistema, y las lineas son las se帽ales de entrada y de salida de cada una de las partes del sistema. As铆 el sistema es dividido en subsistemas m谩s peque帽os y f谩ciles de resolver.

Reducci贸n de los diagramas de bloques usando algebra de bloques#

Podemos encontrar diversos sistemas de control, representados con diagramas de bloques complejos. Dichos diagramas los podemos reducir a un simple bloque empleando las reglas del algebra de bloques.

A continuaci贸n demostraremos estas reglas mediante operaciones algebraicas y mediante el uso de Python.

El uso de Python para esto queda totalmente opcional para el alumno y no ser谩 calificado. En Python usaremos sympy.

# opcionaL
import sympy as sp
sp.init_printing(use_latex=True)

Bloques en serie#

Bloques en serie

Figura 16 Bloques en serie#

\[ G(s) = \frac{Y(s)}{U(s)} = \frac{G2(s).X(s)}{U(s)} = \frac{G2(s).(G1(s).U(s))}{U(s)} = {G1(s).G2(s)} \]
# opcionaL
(U, X, Y, G1, G2) = sp.symbols('U, X, Y, G1, G2')
unknowns =  X, Y

eqs = [# Blocks
       X - G1*U,
       Y - G2*X]
sol = sp.solve(eqs, unknowns)
sol[Y]/U
../../../../_images/79ecb6e0043cceae361b85d78c3b91f5aa891cd5df8365d63a5d1a6d318e0e4a.png

Bloques en paralelo#

Bloques en serie

Figura 17 Bloques en paralelo#

\[ G = \frac{Y(s)}{U(s)} = \frac{X1(s)+X2(s)}{U(s)} = \frac{G1(s).U(s)+G2(s).U(s)}{U(s)} = \frac{(G1(s)+G2(s)).U(s)}{U(s)} = G1(s) + G2(s) \]
# opcionaL
(U, X1, X2, Y, G1, G2) = sp.symbols('U, X1, X2, Y, G1, G2')
unknowns =  X1, X2, Y

eqs = [# Bloques
       X1 - G1*U,
       X2 - G2*U,
    # Sumadores
        Y - (X1 + X2)]
sol = sp.solve(eqs, unknowns)
sol[Y]/U
../../../../_images/ec2d9f8f9f6cdb51ddb6849e72cd666616c1ca9de1e2db3832a466133ff80d0b.png

Sistema realimentado#

\[X1(s) = U(s) - X2(s) = U(s) - Y(s).G2(s) \]
\[Y(s) = X1(s).G1(s) = \left(U(s) - Y(s).G2(s)\right).G1(s) = U(s).G1(s) - Y(s).G2(s).G1(s)\]
\[Y.(1+G1(s).G2(s)) = U(s).G1(s)\]
\[G = \frac{Y(s)}{U(s)} =\frac{G1(s)}{(1+G1(s).G2(s))}\]
que es esto

Figura 18 Bloques realimentados#

# opcionaL
eqs = [# Bloques
       X2 - G2*Y,
        Y - G1*X1,
    # Sumadores
        X1 - (U - X2)]
sol = sp.solve(eqs, unknowns)
sol[Y]/U
../../../../_images/6b69ba4dddf9363f998121b40299a61d02f7d5c574296f630bff60bc243b2adb.png

Tomando la realimentaci贸n positiva en vez de negativa resulta

# opcionaL
eqs = [# Bloques
       X2 - G2*Y,
        Y - G1*X1,
    # Sumadores
        X1 - (U + X2)]
sol = sp.solve(eqs, unknowns)
sol[Y]/U
../../../../_images/60d6c29ff3451931ec39eb54f0f2a257509309512682bf32b013902e03d54ca4.png

Otras transformaciones 煤tiles en el algebra de diagramas de bloque#

transformaciones 煤tiles

Figura 19 Transformaciones 煤tiles#

Ejemplo de diagrama de bloques#

Tenemos el diagrama de bloques de la figura, el cual queremos reducir.

que es esto

Figura 20 Ejemplo de simplificaci贸n de diagrama de bloques#

Resoluci贸n a mano#

En las siguientes dos figuras mostramos dos reducciones sucesivas al diagrama del ejemplo.

ejemplo para simplificar

Figura 21 Primer paso de simplificaci贸n#

ejemplo para simplificar

Figura 22 Segundo paso de simplificaci贸n#

Finalmente, en la siguiente figura obtenemos la funci贸n de transferencia \(G(s) = \dfrac{Y(s)}{R(s)}\):

\[ G(s) = \dfrac{Y(s)}{R(s)}=\dfrac{\dfrac{G_1.G_2}{1-G_1.G_3}}{1+\dfrac{G_1G_2G_4}{1-G_1G_3}}\left(G_5+\frac{G_6}{G_2}\right)\]
\[ G(s)=\dfrac{G_1G_2G_5+G_1G_6}{1-G_1G_3+G_1G_2G_4} \]

(opcional) Resoluci贸n con Python#

Definimos un s铆mbolo de Sympy por cada una de las se帽ales y bloques que se encuentran en el sistema. Esto se hace de la siguiente manera

(R, G1s, G2s, G3s, G4s, G5s, G6s, 
S1s, S2s, G1, G2, G3, G4, G5, G6, Y) = sp.symbols('R, G1s, G2s, G3s, G4s, G5s,'
                                                 'G6s, S1s, S2s, G1, G2,G3, G4, G5, G6, Y')

Se definen las inc贸gnitas del diagrama de bloques. Lo que se conoce del sistema son los bloques y las se帽ales de entrada. Por lo tanto, lo que se desconoce, y se quiere averiguar, son las se帽ales que no son entradas. Es decir:

unknowns =  G1s, G2s, G3s, G4s, G5s, G6s, S1s, S2s, Y

Finalmente tenemos que escribir las ecuaciones que vemos en el diagrama de bloques. Cada bloque define la se帽al de salida como producto de su transferencia por su entrada y cada sumador define su salida como suma o resta de sus entradas. Para el diagrama anterior se formulan las siguientes ecuaciones:

eqs = [# Blocks
       G1s - G1*S2s,
       G2s - G2*G1s,
       G6s - G6*G1s,
       G5s - G5*G2s,
       G4s - G4*G2s,
       G3s - G3*G1s,
       # Sums
       S2s - (S1s + G3s),
       S1s - (R - G4s),
       Y - (G6s + G5s),
       ]
sol = sp.solve(eqs, unknowns)
sol
../../../../_images/3a7de086bed49e4e6b1201296da069c7ca042de3cf14ef18fee683fc13525353.png

Si queremos saber cuanto va a valer la salida un funci贸n de \(R\) la obtenemos de la siguiente manera:

sol[Y].factor()
../../../../_images/52a1211c64ea8de129f99d63473c9bcdb4d8d7048f141982a1edd7907b6e694c.png

En cambio si queremos la funci贸n transferencia entre la salida \(Y\) y la entrada \(R\) podemos hacer:

G=sol[Y]/R
G.factor()
../../../../_images/805763702063bc141a898589ec43a3824c5df2b43058b4b25cd27e7f6f71cb12.png

Tambi茅n podemos obtener la transferencia entre dos se帽ales cualesquiera del diagrama anterior. Por ejemplo podemos obtener la transferencia entre \(Y\) y \(S2s\).

Si queremos tener la funci贸n transferencia en \(s\), debemos sustituir cada bloque por sus transferencia, (pongo valores cualquiera como funciones transferencias \(G_1 \ldots G_6\):

s=sp.symbols('s')
G=(sol[Y]/R).factor().subs([(G1,1/s),(G2,1/(s+1)),(G3,1/(s+2)**2),
                                     (G4,(s+10)/(s+1)),(G5,(1/(s+3))),
                             (G6,(1/(s**2+2*s+1)))])
G.factor()
../../../../_images/959aa0e66f73835d1d48dbfe7f2b1769f6e27ea542c4cc3ed719d8a7721eaf06.png
(sol[Y]/R).factor()
../../../../_images/805763702063bc141a898589ec43a3824c5df2b43058b4b25cd27e7f6f71cb12.png