Anda di halaman 1dari 69

Los comandos clave de MATLAB utilizados en este tutorial

son: ss , step
Contenido
 Configuración física
 Parámetros del sistema
 Ecuaciones de movimiento
 Modelos de función de transferencia
 Ingresando ecuaciones en MATLAB
Configuración física

Diseñar un sistema de suspensión automotriz es un problema de


control interesante y desafiante. Cuando se diseña el sistema de
suspensión, se usa un modelo de 1/4 (una de las cuatro ruedas)
para simplificar el problema a un sistema de amortiguador de
muelles múltiple en 1-D. Un diagrama de este sistema se
muestra a continuación. Este modelo es para un sistema de
suspensión activo donde se incluye un actuador que puede
generar la fuerza de control U para controlar el movimiento del
cuerpo del bus.
Parámetros del sistema
(M1) 1/4 bus masa corporal 2500 kg
(M2) masa de suspensión 320 kg
(K1) constante de resorte del sistema de
suspensión 80,000 N / m
(K2) constante de resorte de rueda y neumático
500,000 N / m
(b1) constante de amortiguación del sistema de
suspensión 350 Ns / m
(b2) constante de amortiguación de rueda y
neumático 15,020 Ns / m
(U) fuerza de control
Ecuaciones de movimiento
De la imagen de arriba y de la ley de Newton, podemos obtener
las ecuaciones dinámicas de la siguiente manera:
(1)
(2)
Modelos de función de transferencia
Supongamos que todas las condiciones iniciales son cero, de
modo que estas ecuaciones representan la situación en la que la
rueda del vehículo sube un bache. Las ecuaciones dinámicas
anteriores se pueden expresar en forma de funciones de
transferencia tomando la Transformada de Laplace. La derivación
específica de las ecuaciones anteriores a las funciones de
transferencia G1 (s) y G2 (s) se muestra a continuación donde
cada función de transferencia tiene una salida de, X1-X2 y
entradas de U y W, respectivamente.
(3)
(4)
(5)

(6)
(7)
o
(8)
Encuentre el inverso de la matriz A y luego multiplique con las
entradas U (s) y W (s) en el lado derecho de la siguiente manera:
(9)

(10)

Cuando queremos considerar la entrada de control U (s)


solamente, establecemos W (s) = 0. Así obtenemos la función de
transferencia G1 (s) como se muestra a continuación:
(11)
Cuando queremos considerar la entrada de perturbación W (s)
solamente, establecemos U (s) = 0. Así obtenemos la función de
transferencia G2 (s) como se muestra a continuación:
(12)
Ingresando ecuaciones en MATLAB
Podemos generar los modelos de funciones de transferencia
anteriores en MATLAB ingresando los siguientes comandos en la
ventana de comandos de MATLAB.

M1 =
2500;
M2 = 320;
K1 = 80000;
K2 = 500000;
b1 = 350;
b2 = 15020;

s = tf ( 's' );
G1 = ((M1 + M2) * s ^ 2 + b2 * s + K2) / ((M1 *
s ^ 2 + b1 * s + K1) * (M2 * s ^ 2 + (b1 + b2) *
s + ( K1 + K2)) - (b1 * s + K1) * (b1 * s +
K1));
G2 = (-M1 * b2 * s ^ 3-M1 * K2 * s ^ 2) / ((M1
* s ^ 2 + b1 * s + K1) * (M2 * s ^ 2 + (b1 + b2)
* s + (K1 + K2)) - (b1 * s + K1) * (b1 * s +
K1));
Suspensión: análisis del sistema
Los comandos clave de MATLAB utilizados en este tutorial
son: ss , step
Contenido
 Modelo de sistema
 Parámetros del sistema
 Requerimientos de diseño
 Respuesta de paso de bucle abierto
Modelo de sistema
Los modelos de espacio de estado y función de transferencia del
problema de suspensión de bus se obtuvieron en la
página Suspensión: Modelado del sistema .
Parámetros del sistema
(M1) 1/4 bus masa corporal 2500 kg
(M2) masa de suspensión 320 kg
(K1) constante de resorte del sistema de
suspensión 80,000 N / m
(K2) constante de resorte de rueda y neumático
500,000 N / m
(b1) constante de amortiguación del sistema de
suspensión 350 Ns / m
(b2) constante de amortiguación de rueda y
neumático 15,020 Ns / m
(U) fuerza de control
Requerimientos de diseño
Un buen sistema de suspensión de autobuses debería tener una
capacidad de agarre en carretera satisfactoria, al tiempo que
proporciona comodidad cuando se conduce sobre baches y
agujeros en la carretera. Cuando el autobús está
experimentando cualquier disturbio en la carretera (es decir,
baches, grietas y pavimento desigual), el cuerpo del autobús no
debe tener grandes oscilaciones, y las oscilaciones se deben
disipar rápidamente. Como la distancia X1-W es muy difícil de
medir y la deformación del neumático (X2-W) es insignificante,
usaremos la distancia X1-X2 en lugar de X1-W como salida en
nuestro problema. Tenga en cuenta que esta es una
aproximación.
La perturbación del camino (W) en este problema se simulará
mediante una entrada de paso. Este paso podría representar el
autobús que sale de un bache. Queremos diseñar un controlador
de retroalimentación para que la salida (X1-X2) tenga un
sobreimpulso menor al 5% y un tiempo de estabilización menor a
5 segundos. Por ejemplo, cuando el autobús recorre un escalón
de 10 cm, el cuerpo del autobús oscilará dentro de un rango de
+/- 5 mm y volverá a un recorrido suave en 5 segundos.
Respuesta de paso de bucle abierto
Podemos usar MATLAB para mostrar cómo funciona el sistema
de bucle abierto original (sin ningún control de
retroalimentación). Agregue los siguientes comandos en el
archivo m y ejecútelo en la ventana de comandos de MATLAB
para ver la respuesta de la entrada de fuerza accionada por un
paso, U (s). Tenga en cuenta que el comando de paso generará
las entradas de paso de unidad para cada entrada.

M1 =
2500;
M2 = 320;
K1 = 80000;
K2 = 500000;
b1 = 350;
b2 = 15020;

s = tf ( 's' );
G1 = ((M1 + M2) * s ^ 2 + b2 * s + K2) / ((M1 *
s ^ 2 + b1 * s + K1) * (M2 * s ^ 2 + (b1 + b2) *
s + ( K1 + K2)) - (b1 * s + K1) * (b1 * s +
K1));

step (G1)
A partir de este gráfico de la respuesta de bucle abierto para una
fuerza accionada por un escalón unitario, podemos ver que el
sistema está amortiguado por debajo. Las personas sentadas en
el autobús sentirán una pequeña cantidad de oscilación. Además,
el autobús tarda un tiempo inaceptablemente largo para alcanzar
el estado estable (el tiempo de establecimiento es muy
grande). Ahora ingrese los siguientes comandos para ver la
respuesta para una entrada de perturbación por pasos, W (s),
con una magnitud de 0.1 m.

G2 = (-M1 * b2 * s ^ 3-M1 * K2 * s ^ 2) / ((M1


* s ^ 2 + b1 * s + K1) * (M2 * s ^ 2 + (b1 + b2)
* s + (K1 + K2)) - (b1 * s + K1) * (b1 * s +
K1));

step (0.1 * G2)

De este gráfico de la respuesta de bucle abierto para una


perturbación de paso de 10 cm, podemos ver que cuando el
autobús pasa una protuberancia de 10 cm en la carretera, el
cuerpo del autobús oscilará durante un tiempo inaceptablemente
largo (~ 50 segundos) con una inicial amplitud de 8 cm. Las
personas sentadas en el autobús no se sentirán cómodas con tal
oscilación debido al gran sobreimpulso y al largo tiempo de
asentamiento.
La solución a estos problemas es agregar un controlador de
retroalimentación al sistema para mejorar el rendimiento. El
esquema del sistema de circuito cerrado es el siguiente, que se
analizará con mucho más detalle en las secciones de diseño del
controlador.
Suspensión: análisis del sistema
Los comandos clave de MATLAB utilizados en este tutorial
son: ss , step
Contenido
 Modelo de sistema
 Parámetros del sistema
 Requerimientos de diseño
 Respuesta de paso de bucle abierto
Modelo de sistema
Los modelos de espacio de estado y función de transferencia del
problema de suspensión de bus se obtuvieron en la
página Suspensión: Modelado del sistema .
Parámetros del sistema
(M1) 1/4 bus masa corporal 2500 kg
(M2) masa de suspensión 320 kg
(K1) constante de resorte del sistema de
suspensión 80,000 N / m
(K2) constante de resorte de rueda y neumático
500,000 N / m
(b1) constante de amortiguación del sistema de
suspensión 350 Ns / m
(b2) constante de amortiguación de la rueda y el
neumático 15,020 Ns / m
(U) fuerza de control
Requerimientos de diseño
Un buen sistema de suspensión de autobuses debería tener una
capacidad de agarre en carretera satisfactoria, al tiempo que
proporciona comodidad cuando se conduce sobre baches y
agujeros en la carretera. Cuando el autobús está
experimentando cualquier disturbio en la carretera (es decir,
baches, grietas y pavimento desigual), el cuerpo del autobús no
debe tener grandes oscilaciones, y las oscilaciones se deben
disipar rápidamente. Como la distancia X1-W es muy difícil de
medir y la deformación del neumático (X2-W) es insignificante,
usaremos la distancia X1-X2 en lugar de X1-W como salida en
nuestro problema. Tenga en cuenta que esta es una
aproximación.
La perturbación del camino (W) en este problema se simulará
mediante una entrada de paso. Este paso podría representar el
autobús que sale de un bache. Queremos diseñar un controlador
de retroalimentación para que la salida (X1-X2) tenga un
sobreimpulso menor al 5% y un tiempo de estabilización menor a
5 segundos. Por ejemplo, cuando el autobús recorre un escalón
de 10 cm, el cuerpo del autobús oscilará dentro de un rango de
+/- 5 mm y volverá a un recorrido suave en 5 segundos.
Respuesta de paso de bucle abierto
Podemos usar MATLAB para mostrar cómo funciona el sistema
de bucle abierto original (sin ningún control de
retroalimentación). Agregue los siguientes comandos en el
archivo m y ejecútelo en la ventana de comandos de MATLAB
para ver la respuesta de la entrada de fuerza accionada por un
paso, U (s). Tenga en cuenta que el comando de paso generará
las entradas de paso de unidad para cada entrada.

M1 = 2500;
M2 = 320;
K1 = 80000;
K2 = 500000;
b1 = 350;
b2 = 15020;
s = tf ( 's' );
G1 = ((M1 + M2) * s ^ 2 + b2 * s + K2) / ((M1 *
s ^ 2 + b1 * s + K1) * (M2 * s ^ 2 + (b1 + b2) *
s + ( K1 + K2)) - (b1 * s + K1) * (b1 * s +
K1));

step (G1)

A partir de este gráfico de la respuesta de lazo abierto para una


fuerza accionada por un escalón unitario, podemos ver que el
sistema está amortiguado por debajo. Las personas sentadas en
el autobús sentirán una pequeña cantidad de oscilación. Además,
el autobús tarda un tiempo inaceptablemente largo para alcanzar
el estado estable (el tiempo de establecimiento es muy
grande). Ahora ingrese los siguientes comandos para ver la
respuesta para una entrada de perturbación por pasos, W (s),
con una magnitud de 0.1 m.
G2 = (-M1 * b2 * s ^ 3-M1 * K2 * s ^ 2) / ((M1 *
s ^ 2 + b1 * s + K1) * (M2 * s ^ 2 + (b1 + b2) *
s + (K1 + K2)) - (b1 * s + K1) * (b1 * s + K1));

step (0.1 * G2)

De este gráfico de la respuesta de bucle abierto para una


perturbación de paso de 10 cm, podemos ver que cuando el
autobús pasa una protuberancia de 10 cm en la carretera, el
cuerpo del autobús oscilará durante un tiempo inaceptablemente
largo (~ 50 segundos) con una inicial amplitud de 8 cm. Las
personas sentadas en el autobús no se sentirán cómodas con tal
oscilación debido al gran sobreimpulso y al largo tiempo de
asentamiento.
La solución a estos problemas es agregar un controlador de
retroalimentación al sistema para mejorar el rendimiento. El
esquema del sistema de circuito cerrado es el siguiente, que se
analizará con mucho más detalle en las secciones de diseño del
controlador.
Suspensión: diseño del controlador PID
Los comandos clave de MATLAB utilizados en este tutorial
son: tf , feedback , step , rlocus
Contenido
 Agregar un controlador PID
 Trazando la respuesta de circuito cerrado
 Elegir las ganancias para el controlador PID
Del problema principal, las ecuaciones dinámicas en forma de
función de transferencia son las siguientes:
(1)
(2)
dónde,
(3)
y el esquema del sistema es el siguiente donde F (s) G1 (s) = G2
(s).
Para el problema original y la derivación de las ecuaciones y
esquemas anteriores, consulte la página Suspensión: Modelado
del sistema .
Queremos diseñar un controlador de realimentación para que
cuando la perturbación de la carretera (W) se simule mediante
una entrada de paso unitario, la salida (X1-X2) tenga un tiempo
de estabilización inferior a 5 segundos y un sobreimpulso inferior
al 5%. Por ejemplo, cuando el autobús recorre un escalón de 10
cm, el cuerpo del autobús oscilará dentro de un rango de +/- 5
mm y dejará de oscilar en 5 segundos.
El modelo de sistema se puede representar en MATLAB creando
un nuevo archivo m e ingresando los siguientes comandos
(consulte el problema principal para obtener detalles sobre cómo
obtener esos comandos).

m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;

nump = [(m1 + m2) b2 k2];

denp = [(m1 * m2) (m1 * (b1 + b2)) + (m * b1)


2
(m1 * (k1 + k2)) + (m2 * k1) + (b1 * b2 (b1 *
k2) + (b2 * k1) k1 * k2]; )
G1 = tf (nump, denp);

num1 = [- (m1 * b2) - (m1 * k2) 0 0];


den1 = [(m1 * m2) (m1 * (b1 + b2)) + (m * b1)
2
(m1 * (k1 + k2)) + (m2 * k1) + (b1 * b2 (b1 *
k2) + (b2 * k1) k1 * k2]; )
G2 = tf (num1, den1);

numf =
num1; denf
= nump;
F = tf (numf, denf);
Agregar un controlador PID
Recuerde que la función de transferencia para un controlador
PID es:
(4)
donde está la ganancia proporcional, es la ganancia integral,
y es la ganancia derivada. Supongamos que necesitaremos las
tres ganancias en nuestro controlador. Para comenzar, podemos
comenzar adivinando una ganancia para cada uno: =
208025, = 832100 y = 624075. Esto puede implementarse en
MATLAB agregando el siguiente código en su archivo m:

Kd = 208025;
Kp = 832100;
Ki = 624075;
C = pid (Kp, Ki, Kd);
Ahora simulemos la respuesta del sistema (la distancia X1-X2) a
una perturbación por pasos en la carretera. Desde el esquema
anterior, podemos encontrar la función de transferencia desde la
perturbación de la carretera W hasta la salida (X1-X2), y simular:

sys_cl = F * feedback(G1, C);


Trazando la respuesta de circuito cerrado
Ahora hemos creado la función de transferencia de bucle cerrado
en MATLAB que representará la planta, la perturbación y el
controlador. Veamos cómo es la respuesta escalonada de ciclo
cerrado para este sistema antes de comenzar el proceso de
control. Tenga en cuenta que vamos a usar un paso de 0.1 m
como nuestra perturbación, para simular esto, todo lo que
tenemos que hacer es multiplicar sys_cl por 0.1. Agregue el
siguiente código a su archivo m. Debería ver la respuesta (X1-X2)
en un paso W como este:

t = 0: 0,05: 5;
step (0.1 * sys_cl, t) title ( 'Respuesta a control PID' )
un pasode0.1mbajo

En el gráfico, el porcentaje de exceso es de 9 mm, que es mayor


que el requisito de 5 mm, pero el tiempo de asentamiento se
cumple, menos de 5 segundos. Para elegir la ganancia adecuada
que arroje un resultado razonable desde el principio,
comenzamos eligiendo un polo y dos ceros para el controlador
PID. Un polo de este controlador debe estar en cero y uno de los
ceros tiene que estar muy cerca del polo en el origen, en 1. El
otro cero, vamos a poner más lejos del primer cero, en 3, en
realidad podemos ajustar el la posición del segundo cero para
que el sistema cumpla con el requisito. Añadir el siguiente
comando en el archivo-m, para que pueda ajustar la ubicación de
la segunda cero y elegir la ganancia para tener una idea
aproximada de lo ganancia que debe utilizar para , y .

z1 = 1;
z2 = 3;
p1 = 0;
s = tf ( 's' );
C = ((s + z1) * (s + z2)) / (s + p1);
rlocus (C * G1)
title ( 'root locus con controlador PID' )
Agregue el código [k, poles] = rlocfind (C * G1) al
final de su archivo-m para ayudarlo a elegir una ganancia de
bucle específica. Después de ejecutar en la ventana de
comandos, vaya al gráfico del lugar de la raíz y seleccione un
punto cercano a los indicados por las marcas de la cruz en el
siguiente gráfico.

Después de hacer esto, debería ver el siguiente resultado en la


ventana de comandos de MATLAB.
Seleccione un punto en la ventana de gráficos

selected_point =

-4.0047 + 9.6694i

k =

5.2714e + 04
poles =

1.0e + 02 *
-2.1838 + 0.0000i
-0.0415 + 0.0967i
-0.0415 - 0.0967i
-0.0670 + 0.0000i
-0.0061 + 0.0000i

Tenga en cuenta que los valores devueltos en la ventana de


comandos de MATLAB pueden no ser exactamente iguales, pero
al menos deben tener el mismo orden de magnitud.
Explicaremos el método del locus raíz con más detalle en la
página Suspensión: Diseño de controlador de locus raíz .
Elegir las ganancias para el controlador PID
Ahora que tenemos la función de transferencia en lazo cerrado,
el control del sistema es simplemente una cuestión de sintonía
de las , y las ganancias. En la figura anterior, podemos ver
que el sistema tiene una amortiguación mayor que la requerida,
pero el tiempo de asentamiento es muy corto. Esta respuesta
aún no satisface el requisito de sobreimpulso del 5%. Como se
mencionó antes, esto puede rectificarse mediante el ajuste de
las , y las ganancias para obtener una mejor
respuesta. Vamos a aumentar , y en un factor de 2 para
ver qué va a pasar. Volver a su archivo-m y se multiplican
, , por 2 y vuelva a ejecutar el programa, debe obtenerse el
siguiente diagrama.

Kd = 2 *
Kd; Kp = 2
* Kp; Ki =
2 * Ki;
C = pid (Kp, Ki, Kd);
sys_cl = F * feedback (G1, C);
step (0.1 * sys_cl, t)
title ( 'Respuesta a un paso de 0.1 m con PID de
alta ganancia' )

Para comparar este gráfico con el gráfico del controlador PID de


baja ganancia, puede cambiar el eje:

axis ([0 5 -.01 .01])


Ahora vemos que el exceso de porcentaje y el tiempo de
establecimiento cumplen con los requisitos del sistema. El
exceso de porcentaje es de aproximadamente el 5% de la
amplitud de la entrada y el tiempo de establecimiento es de 2
segundos, que es menor que el requisito de 5 segundos.
Para este problema, resulta que el método de diseño PID
controla adecuadamente el sistema. Esto se puede ver mirando
el diagrama del lugar de la raíz. Tal tarea se puede lograr
simplemente cambiando solo las ganancias de un controlador
PID. Siéntase libre para jugar con los tres parámetros, , y ,
como hemos sugerido, pero lo más probable es obtener la
respuesta a cualquiera de los dos tiene un gran exceso por
ciento o un largo tiempo de sedimentación.
Suspensión: diseño de controlador de
locus raíz
Los comandos clave de MATLAB utilizados en este tutorial
son: tf , roots , rlocus , sgrid , step
Contenido
 Trazando el locus raíz
 Agregar un filtro de muesca
 Encontrar la ganancia del locus raíz
 Trazando la respuesta de circuito cerrado
Del problema principal, las ecuaciones dinámicas en forma de
función de transferencia son las siguientes:
(1)
(2)
dónde,
(3)
y el esquema del sistema es el siguiente donde F (s) G1 (s) = G2
(s).
Para el problema original y la derivación de las ecuaciones y
esquemas anteriores, consulte la página Suspensión: Modelado
del sistema .
Queremos diseñar un controlador de realimentación para que
cuando la perturbación de la carretera (W) se simule mediante
una entrada de paso unitario, la salida (X1-X2) tenga un tiempo
de estabilización inferior a 5 segundos y un sobreimpulso inferior
al 5%. Por ejemplo, cuando el autobús recorre un escalón de 10
cm, el cuerpo del autobús oscilará dentro de un rango de +/- 5
mm y dejará de oscilar en 5 segundos.
El modelo de sistema se puede representar en MATLAB creando
un nuevo archivo m e ingresando los siguientes comandos
(consulte el problema principal para obtener detalles sobre cómo
obtener esos comandos).

m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;

nump = [(m1 + m2) b2 k2];


denp = [(m1 * m2) (m1 * (b1 + b2)) + (m2 * b1)
(m1 * (k1 + k2)) + (m2 * k1) + (b1 * b2) (b1 *
k2) + (b2 * k1) k1 * k2];
G1 = tf (nump, denp);

num1 = [- (m1 * b2) - (m1 * k2) 0 0];


den1 = [(m1 * m2) (m1 * (b1 + b2)) + (m2 * b1)
(m1 * (k1 + k2)) + (m2 * k1) + (b1 * b2) (b1 *
k2) + (b2 * k1) k1 * k2];
G2 = tf (num1, den1);

numf = num1;
denf = nump;
F = tf (numf, denf);
Ahora estamos listos para diseñar un controlador utilizando el
método de diseño de locus raíz.
Primero veamos cuáles son los polos de bucle abierto del
sistema:

R = raíces (denp)
R =
-23.9758 + 35.1869i
-23.9758 -35.1869i
-0.1098 + 5.2504i
-0.1098 - 5.2504i
Por lo tanto, los polos dominantes son las raíces -0.1098 +/-
5.2504i, que están cerca del eje imaginario con una pequeña
relación de amortiguamiento.
Trazando el locus raíz
La idea principal del diseño de locus de raíz es estimar la
respuesta de bucle cerrado a partir del gráfico de locus de raíz
de bucle abierto. Al agregar ceros y / o polos al sistema original
(agregando un compensador), se modificará el locus raíz y, por
lo tanto, la respuesta de circuito cerrado. Primero veamos el
locus raíz para la planta. En su archivo m, agregue el siguiente
comando y luego ejecute el archivo, debe obtener el diagrama de
locus raíz a continuación:

rlocus (G1)
z = -log (0.05) / sqrt (pi ^ 2 + (log (0.05) ^
2))
sgrid (z, 0)
z =
0.6901

Nota de la especificación, que requiere el máximo


sobreimpulso, , sea menor que 5% y el coeficiente de
amortiguamiento, , se puede encontrar a partir de la ecuación
aproximada coeficiente de
amortiguamiento, . El comando sgrid se
utiliza para superponer la línea de porcentaje de exceso deseado
en el lugar de raíz de primer plano; puedes encontrar más
información de la lista de comandos.
Del diagrama anterior, vemos que hay dos pares de polos y
ceros muy juntos. Estos polos y ceros están casi en el eje
imaginario, pueden hacer que el sistema de bus sea
marginalmente estable, lo que podría causar un
problema. Tenemos que hacer que todos los polos y ceros se
muevan en el semiplano izquierdo tanto como sea posible para
evitar un sistema inestable. Tenemos que poner dos ceros muy
cerca de los dos polos en el eje imaginario del sistema no
compensado para la cancelación de polos y ceros. Además,
colocaremos otros dos polos más a la izquierda en el eje real
para obtener una respuesta rápida.
Agregar un filtro de muesca
Probablemente necesitemos dos ceros cerca de los dos polos en
el eje complejo para dibujar el locus de la raíz, llevando esos
polos a los ceros del compensador en lugar de a los ceros de la
planta en el eje imaginario. También necesitaremos dos postes
situados muy a la izquierda para tirar del lugar hacia la
izquierda. Parece que un filtro de muesca (controlador de 2
derivaciones) probablemente hará el trabajo. Probemos poniendo
los polos en 30 y 60 y los ceros en 3 +/- 3.5i. En su archivo m,
agregue las siguientes líneas de código:

z1 = 3 +
3.5i; z2 = 3-
3.5i; p1 =
30;
p2 = 60;
numc = conv ([1 z1], [1 z2]);
denc = conv ([1 p1], [1 p2]);
C = tf (numc, denc);

rlocus (C * G1)
Ahora cambiemos el eje para ver los detalles del lugar de la raíz.

axis ([- 40 10 -30 30])


z = -log (0.05) / sqrt (pi ^ 2 + (log (0.05) ^
2))
sgrid (z, 0)
z =
0.6901
Encontrar la ganancia del locus raíz
Ahora que hemos movido el locus raíz a través de la línea de
relación de amortiguamiento del 5%, podemos elegir una
ganancia que satisfaga los requisitos de diseño. Recuerde que
queremos que el tiempo de establecimiento y el sobreimpulso
sean lo más pequeños posible. En general, para obtener un
pequeño sobreimpulso y una respuesta rápida, debemos
seleccionar una ganancia correspondiente a un punto en el lugar
raíz cerca del eje real y lejos del eje imaginario o el punto donde
el locus raíz cruza la línea de relación de amortiguamiento
deseada. Pero en este caso, necesitamos la cancelación de
polos y ceros cerca del eje imaginario, por lo que debemos
seleccionar una ganancia correspondiente a un punto en el lugar
raíz cerca de los ceros y la línea de exceso de porcentaje. Hay
un método para hacer esto con el comando rlocfind en
MATLAB. Agrega el código[k, postes] = rlocfind (C *
G1) al final de su archivo-m para ayudarlo a elegir una ganancia
de bucle específica. Después de ejecutar en la ventana de
comandos, vaya al gráfico del lugar de la raíz y seleccione un
punto cercano a los indicados por las marcas de la cruz en el
siguiente gráfico.
Después de hacer esto, debería ver el siguiente resultado en la
ventana de comandos de MATLAB.
Seleccione un punto en la ventana de gráficos

selected_point =

-2.8357 + 12.8306i

k =

1.0888e + 08

poles =

1.0e + 02 *
-0.6323 + 6.2136i
-0.6323 - 6.2136i
-0.0294 + 0.1306i
-0.0294 - 0.1306i
-0.0292 + 0.0367i
-0.0292 - 0.0367i

Tenga en cuenta que el valor devuelto por la ventana de


comandos de MATLAB puede no ser exactamente el mismo, pero
al menos debe tener el mismo orden de magnitud. Este valor
devuelto se puede usar como ganancia para el compensador.
Recuerde que el esquema del sistema es el siguiente:
y la función de transferencia de bucle cerrado se puede derivar
de la siguiente manera:

k = 1.0888e + 08;
sys_cl = F * feedback (G1, k * C);

Trazando la respuesta de circuito cerrado


Veamos cómo se ve la respuesta escalonada en lazo cerrado con
este compensador. Tenga en cuenta que vamos a usar un paso
de 0.1 m como la perturbación. Para simular esto, simplemente
multiplique sys_cl por 0.1. Agregue los siguientes comandos en
la m-file y ponga% marks delante de todos los comandos
rlocus y rlocfind .

t = 0: 0,01: 2;
step (0.1 * sys_cl, t)
title ( 'Respuesta de paso de bucle cerrado con
filtro de muesca' )
De esta gráfica vemos que cuando el autobús encuentra un
escalón de 0.1 m en la carretera, la desviación máxima del
cuerpo del autobús de la rueda (o la carretera) es de
aproximadamente 3.75 mm, y las oscilaciones se asientan en 2
segundos. Por lo tanto, esta respuesta es satisfactoria.
Suspensión: diseño del controlador de
respuesta de frecuencia
Los comandos clave de MATLAB utilizados en este tutorial
son: tf , conv , bode , margin , feedback , step
Contenido
 Trazando la respuesta de frecuencia en MATLAB
 Agregar control de plomo
 Trazando la respuesta de circuito cerrado
Del problema principal, las ecuaciones dinámicas en forma de
función de transferencia son las siguientes:
(1)
(2)
dónde,
(3)
y el esquema del sistema es el siguiente donde F (s) G1 (s) = G2
(s).

Para el problema original y la derivación de las ecuaciones y


esquemas anteriores, consulte la página Suspensión: Modelado
del sistema .
Queremos diseñar un controlador de realimentación para que
cuando la perturbación de la carretera (W) se simule mediante
una entrada de paso unitario, la salida (X1-X2) tenga un tiempo
de estabilización inferior a 5 segundos y un sobreimpulso inferior
al 5%. Por ejemplo, cuando el autobús recorre un escalón de 10
cm, el cuerpo del autobús oscilará dentro de un rango de +/- 5
mm y dejará de oscilar en 5 segundos.
El modelo de sistema se puede representar en MATLAB creando
un nuevo archivo m e ingresando los siguientes comandos
(consulte el problema principal para obtener detalles sobre cómo
obtener esos comandos).

m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;
nump = [(m1 + m2) b2 k2];
denp = [(m1 * m2) (m1 * (b1 + b2)) + (m * b1)
2
(m1 * (k1 + k2)) + (m2 * k1) + (b1 * b2 (b1 *
k2) + (b2 * k1) k1 * k2]; )
G1 = tf (nump, denp);

num1 = [- (m1 * b2) - (m1 * k2) 0 0];


den1 = [(m1 * m2) (m1 * (b1 + b2)) + (m * b1)
2
(m1 * (k1 + k2)) + (m2 * k1) + (b1 * b2 (b1 *
k2) + (b2 * k1) k1 * k2]; )
G2 = tf (num1, den1);

numf =
num1; denf
= nump;
F = tf (numf, denf);
Trazando la respuesta de frecuencia en MATLAB
La idea principal del diseño basado en frecuencia es utilizar el
diagrama de Bode de la función de transferencia de bucle abierto
para estimar la respuesta de bucle cerrado. Agregar un
controlador al sistema cambia el diagrama de Bode de bucle
abierto para que la respuesta de bucle cerrado también
cambie. Primero dibujemos el diagrama de Bode para la función
de transferencia de bucle abierto original. Agregue la siguiente
línea de código a su archivo m y vuelva a ejecutar. Debería
obtener el siguiente diagrama de Bode:

w = logspace (-1,2);
Bode (G1, w)
Para la conveniencia de representar sistemas con diferentes
frecuencias naturales del sistema, normalizamos y escalamos
nuestros hallazgos antes de trazar el diagrama de Bode, de
modo que la asíntota de baja frecuencia de cada término esté a 0
dB. Esta normalización al ajustar la ganancia, hace que sea
más fácil agregar los componentes del diagrama de Bode. El
efecto de es mover la curva de magnitud hacia arriba
(aumentar ) o hacia abajo (disminuir ) en una cantidad ,
pero la ganancia ,, no tiene ningún efecto en la curva de
fase. Por lo tanto, desde la gráfica anterior, debe ser igual a
100 dB o 100,000 para mover la curva de magnitud hasta 0 dB a
0.1 rad / s. Regrese a su archivo m y agregue la siguiente línea
de código a su archivo m antes del bodecomando y
repetición. Debería obtener el siguiente diagrama de Bode:

K = 100000;
bode (K * G1, w)
Agregar control de plomo
Del diagrama de Bode anterior, vemos que la curva de fase es
cóncava a aproximadamente 5 rad / seg. Primero, trataremos de
agregar una fase positiva alrededor de esta región, de modo que
la fase se mantenga por encima de la línea de -180 grados. Dado
que un margen de fase grande conduce a un pequeño
sobreimpulso, querremos agregar al menos 140 grados de fase
positiva en el área cercana a 5 rad / seg. Como un controlador
principal no puede agregar más de 90 grados, usaremos un
controlador de dos conductores.
Para obtener y , se pueden usar los siguientes pasos:
1. Determine la fase positiva necesaria: dado que queremos
140 grados en total, necesitaremos 70 grados de cada
controlador.
2. Determine la frecuencia a la que se debe agregar la
fase: en nuestro caso, esta frecuencia debe ser de 5.0 rad / seg.
3. Determine la constante a de la siguiente ecuación: Esto
determina el espacio requerido entre el cero y el polo para la fase
máxima deseada agregada.
(4)
4. Determine y a partir de la siguiente ecuación: Estos
determinan las frecuencias de esquina para que la fase máxima
se agregue a la frecuencia deseada.
(5)
(6)
Ahora pongamos nuestro controlador de 2 conductores en el
sistema y veamos cómo es el diagrama de Bode. Agregue el
siguiente código a su archivo m, y agregue un% delante
del comando bode anterior (si hay uno). Debería obtener el
siguiente diagrama de Bode:

a = (1-sin (70/180 * pi)) / (1 + sin (70/180 *


pi));
w = 5;
T = 1 / (w * sqrt (a));
aT = sqrt (a) / w;
numc = conv ([T 1], [T 1]);
denc = conv ([aT 1], [aT 1]);
C = tf (numc, denc);
margen (K * C * G1)
De esta gráfica, vemos que la porción cóncava de la gráfica de
fase está ahora por encima de -180 grados, y el margen de fase
es lo suficientemente grande para los criterios de
diseño. Veamos cómo responde la salida (la distancia X1-X2) a
un bache en la carretera (W). Recuerde que el esquema del
sistema es:

y la función de transferencia de bucle cerrado se puede derivar


de la siguiente manera:

sys_cl = F * feedback (G1, K * C);

Trazando la respuesta de circuito cerrado


Veamos cómo es la respuesta al paso ahora. Tenga en cuenta
que estamos utilizando un paso de 0.1 m como
perturbación. Para simular esto, simplemente multiplique el
sistema por 0.1. Agregue el siguiente código en m-file y vuelva a
ejecutarlo. ¡No olvide poner% mark delante de todos los
comandos de bode y margin!

t = 0: 0,01: 5;
step (0.1 * sys_cl, t)
axis ([0 5 -.01 .01])
La amplitud de la respuesta es mucho menor que el requisito de
exceso de porcentaje y el tiempo de establecimiento también es
inferior a 5 segundos. Como podemos ver que la amplitud de la
respuesta de la salida es inferior a 0,0001 mo el 1% de la
magnitud de entrada después de 4 segundos. Por lo tanto,
podemos decir que el tiempo de establecimiento es de 4
segundos desde el gráfico anterior. Desde la gráfica anterior de
Bode, vemos que aumentar la ganancia aumentará la frecuencia
de cruce y, por lo tanto, la respuesta será más
rápida. Aumentaremos la ganancia y veremos si podemos
obtener una mejor respuesta. Vuelva a su archivo m y
cambie numc como se muestra a continuación para generar el
siguiente gráfico.

numc = 4 * conv ([T 1], [T 1]);


denc = conv ([aT 1], [aT 1]);
C = tf (numc, denc);
sys_cl = F * feedback(G1, K * C);
t = 0: 0,01: 5;
step (0.1 * sys_cl, t)
axis ([0 5 -.01 .01])

A partir de este gráfico, podemos ver que el exceso porcentual


es aproximadamente 0,15 mm menor que el trazado anterior y el
tiempo de establecimiento también es inferior a 5 segundos. Esta
respuesta ahora es satisfactoria y no se necesita más iteración
de diseño.
Suspensión: Diseño de controlador de
espacio de estado
Los comandos clave de MATLAB utilizados en este tutorial
son: ss , step
Contenido
 Diseñando el controlador de realimentación de estado
completo
 Trazando la respuesta de circuito cerrado
Desde el problema principal, las ecuaciones dinámicas en forma
de espacio de estado son las siguientes donde Y1 = X1 - X2.

(1)

(2)

(3)
Para el problema original y la derivación de las ecuaciones y
esquemas anteriores, consulte la página Suspensión: Modelado
del sistema .
Queremos diseñar un controlador de realimentación para que
cuando la perturbación de la carretera (W) se simule mediante
una entrada de paso unitario, la salida (X1-X2) tenga un tiempo
de estabilización inferior a 5 segundos y un sobreimpulso inferior
al 5%. Por ejemplo, cuando el autobús recorre un escalón de 10
cm de alto, el cuerpo del autobús oscilará dentro de un rango de
+/- 5 mm y dejará de oscilar en 5 segundos.
El modelo del sistema se puede representar en MATLAB
creando un nuevo archivo m e ingresando los siguientes
comandos (consulte el problema principal para obtener detalles
sobre cómo obtener esos comandos). Necesitamos definir las
matrices A, B, C, D ingresando lo siguiente en el archivo m:

m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;

A = [0 1 0 0
- (b1 * b2) / m1) + (b1 / m2) (m1 * m2) 0 ((b1 / m1) * ((b1 /
/ m1) + (b2 / m2))) - (k1 / m1) - (b1
b2 / m2 0 - m2)) 1
k2 / m2 0 ((b1 / m1)
- m2)) 0]; + (b1 / m2) + (b2 / ((k1 / m1) + (k1 / m2) + (k2 /
B = [0 0
1 / m1 (b1 * b2) / (m1 * m2)
0 - (b2 / m2)
(1 / m1) + (1 / m2) - (k2 / m2)]; C = [0 0 1 0];
D = [0 0];
sys = ss (A, B, C, D);

Diseñando el controlador de realimentación de estado completo


Primero, diseñemos un controlador de realimentación de estado
completo para el sistema. Asumiendo por ahora que todos los
estados se pueden medir (esta suposición probablemente no sea
cierta, pero es suficiente para este problema), el esquema del
sistema se muestra a continuación.

El polinomio característico para este sistema de circuito cerrado


es el determinante de (sI- (AB [1,0] 'K)). Tenga en cuenta que no
es sI- (A-BK) porque el controlador K solo puede controlar la
entrada de fuerza u pero no la perturbación de la carretera W.
Recuerde que nuestra matriz B es una matriz de 4 x 2, y solo
necesitamos la primera columna de B para controlar U.
Para este ejemplo, tenemos que usar la acción integral para
lograr un error de estado estacionario cero, por lo que
agregamos un estado adicional que es int (X1-X2) = int (Y1). En
realidad, el bus finalmente alcanzará un equilibrio que produce
un error de estado estacionario cero. Los nuevos estados son X1,
X1_dot, Y1, Y1_dot e Y2. También las matrices de espacio de
estados, A, B y C, se convierten en las siguientes después de la
adición del nuevo estado.

Aa = [0 1 0 0 0
- (b1 * b2) / (m1 * m2) 0 ((b1 / m1) * ((b1 /
m1) + (b1 / m2) + (b2 / m2))) - (k1 / m1) - (b1
/ m1) 0
b2 / m2 0 - ((b1 / m1) + (b1 / m2) + (b2 /
m2)) 1 0
k2 / m2 0 - ((k1 / m1) + (k1 / m2) + (k2 /
m2)) 0 0
0 0 1 0 0];
Ba = [0 0
1 / m1 (b1 * b2) / (m1 * m2)
0 - (b2 / m2)
(1 / m1) + (1 / m2) - (k2 / m2)
0 0];
Ca = [0 0 1 0 0];
Da = [0 0];
sys = ss (Aa, Ba, Ca, Da);

En realidad, hay un atajo para MATLAB para lograr el mismo


resultado.

Aa = [[A, [0 0 0 0] ']; [C, 0]];


Ba = [B; [0 0]];
Ca = [C, 0];
Da = D;
sys = ss (Aa, Ba, Ca, Da);
Agregue el código de MATLAB anterior en el archivo m. En este
caso, tratamos el problema como un diseño de controlador
PID. El control integral se obtiene del nuevo estado. El control
proporcional se obtiene de una ganancia en Y1 o X1-X2. El
control derivativo directo de la salida no es posible, ya que la
derivada de Y1 o X1-X2 no es un estado. En cambio, usamos la
derivada de X1, que está disponible para comentarios. (Mientras
que X1 puede ser difícil de medir, X1_dot podría obtenerse
integrando la salida de un acelerómetro montado en el bus). Es
similar a agregar más amortiguación a la velocidad de oscilación
de la suspensión del bus. Agregue el siguiente código de
MATLAB para el controlador K en el archivo m:

K = [0 2.3e6 5e8 0 8e6]


K =
0 2300000 500000000 0 8000000
Llegamos a este valor de la matriz K por prueba y error,
ajustando la ganancia para la derivada de X1, Y1 e integral de
Y1, como se mencionó anteriormente.
Trazando la respuesta de circuito cerrado
Mirando nuevamente el esquema anterior, vemos que después
de agregar la matriz K al sistema, las ecuaciones de espacio de
estado se convierten en:
(4)
(5)
Ahora podemos obtener la respuesta de circuito cerrado
simplemente agregando el siguiente código en el archivo
m. Tenga en cuenta que tenemos que multiplicar la matriz B por
1.1 para simular la perturbación de paso alto de 0.1 m.

t = 0: 0,01: 2;
sys_cl = ss (Aa-Ba (:, 1) * K, -0.1 * Ba, Ca,
Da);
step (sys_cl * [0; 1], t)
title ( 'Respuesta de lazo cerrado a un paso de
0.1 m' )
De la trama vemos que se cumplen los requisitos de porcentaje
de rebasamiento y tiempo de establecimiento. Además, el error
de estado estable se acerca a cero también. Por lo tanto,
concluiremos que la respuesta es satisfactoria. Siéntase libre de
jugar con la ganancia para la matriz K.
Suspensión: diseño de controlador digital
Los comandos clave de MATLAB utilizados en este tutorial
son: ss , step , c2d , sdata , tfdata , roots , place
Contenido
 Selección del tiempo de muestreo
 Conversión continua a discreta
 Agregar control integral
 Diseñando el controlador
 Simulando la respuesta de circuito cerrado
En este ejemplo, diseñaremos un controlador digital de espacio
de estado para el ejemplo de control de suspensión de
bus. Primero convertiremos el modelo de tiempo continuo a un
modelo de tiempo discreto, y luego usaremos el método de
colocación de polos para diseñar el controlador. Desde la
página Suspensión: Modelado del sistema . el modelo de espacio
de estado del sistema es donde Y1 = X1-X2.

(1)

(2)

(3)
Dónde:
(m1) 1/4 bus masa corporal 2500 kg
(m2) masa de suspensión 320 kg
(k1) constante de resorte del sistema de
suspensión 80,000 N / m
(k2) constante de resorte de rueda y neumático
500,000 N / m
(b1) constante de amortiguación del sistema de
suspensión 350 Ns / m
(b2) constante de amortiguación de la rueda y el
neumático 15,020 Ns / m
(U) fuerza de control
Los requisitos de diseño son:
 Sobreimpulso: Salida (X1-X2) menos del 5% de la
perturbación (W)
 Tiempo de asentamiento: menos de 5 segundos
Selección del tiempo de muestreo
El primer paso en el diseño de un controlador de tiempo discreto
es convertir la planta continua a su equivalente de tiempo
discreto. En primer lugar, tenemos que elegir un tiempo de
muestreo apropiado, . En este ejemplo, la selección del tiempo
de muestreo es muy importante ya que un paso en la superficie
del camino afecta muy rápidamente la salida. Físicamente, lo que
sucede es que la superficie de la carretera levanta bruscamente
la rueda, comprimiendo el muelle, K2 y el amortiguador,
b2. Como la masa de la suspensión es relativamente baja y el
resorte bastante rígido, la masa de la suspensión aumenta
rápidamente, lo que aumenta el X2 casi de inmediato. Dado que
el controlador solo puede ver el efecto de la perturbación
después de un período de muestreo completo, tenemos que
elegir un tiempo de muestreo, , suficientemente corto para que
la salida (X1-X2) no exceda el requisito del 5% en un período de
muestreo. Para elegir el período de muestreo, debemos
examinar de cerca el comienzo de la respuesta al paso. Si
recuerda desde la página Suspensión: Análisis del sistema , la
salida rápidamente se vuelve negativa en respuesta a una
perturbación escalonada y luego comienza a
oscilar. Simularemos solo el comienzo de esta respuesta
configurando la entrada de vector de tiempo para la función de
paso en un rango de 0 a 005. La respuesta a una entrada de
paso de 1 m se simula multiplicando la matriz B por .1. Crea un
nuevo archivo m e ingresa el siguiente código:

m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;

A = [0 1 0 0
- (b1 * b2) / (m1 * m2) 0 ((b1 / m1) * ((b1
/ m1) + (b1 / m2) + (b2 / m2))) - (k1 / m1) -
(b1 / m1)
b2 / m2 0 - ((b1 / m1) + (b1 / m2) + (b2 /
m2)) 1
k2 / m2 0 - ((k1 / m1) + (k1 / m2) + (k2 /
m2)) 0];
B = [0 0
1 / m1 (b1 * b2) / (m1 * m2)
0 - (b2 / m2)
(1 / m1) + (1 / m2) - (k2 / m2)];
C = [0 0 1 0];
D = [0 0];

sys = ss (A, B, C, D);


step (sys * [0; 1] *. 1,0: 0,0001: .005);

Este gráfico muestra que el resorte, K1 se comprime muy rápido


y excede nuestro requisito de 5 mm en respuesta a un paso de
1.1 m después de poco más de 0.001 s. Por lo tanto,
estableceremos T = .0005s para dar al controlador la oportunidad
de responder.
Conversión continua a discreta
Ahora que hemos seleccionado un tiempo de muestreo,
podemos convertir la planta en tiempo discreto. MATLAB se
puede usar para convertir el modelo de espacio de estado
anterior, sys , a un modelo de espacio de estado
discreto, d_sys , utilizando
el comando c2d . El comando c2d toma tres argumentos: el
sistema de tiempo continuo, el tiempo de muestreo , y el tipo de
circuito de retención. En este ejemplo, utilizaremos la retención
de orden cero ('zoh'). Consulte la Introducción: tutorial de diseño
de controlador digital .
Agregue el siguiente código a su archivo m. Al ejecutar en la
ventana de comandos, MATLAB debería devolver lo siguiente,
que representa el nuevo modelo de espacio de estado de tiempo
discreto.

T = .0005;
d_sys = c2d (sys, T, 'zoh' )
d_sys =

A =
x1 x2 x3 x4
x1 1 0.0005 -3.126e-06 -1.802e-08
x2 -0.003461 1 -0.01244 -7.313e-05
x3 0.02338 5.852e-06 0.976 0.000494
x4 0.7705 0.0001935 -0.9112 0.9998

B =
u1 u2
x1 4.999e-11 8.506e-07
x2 1.999e-07 0.003461
x3 4.375e-10 -0.02338
x4 1.762e-06 -0.7705

C =
x1 x2 x3 x4
y1 0 0 1 0

D =
u1 u2
y1 0 0

Sample Time: 0.0005 segundos


Discrete-time state-space model.
Agregar control integral
En este ejemplo, necesitaremos agregar un integrador al sistema
para conducir la respuesta de estado estacionario a
cero. Añadiremos este integrador en serie con la planta. Esto
tendrá el efecto de agregar otro estado a la planta. Un integrador
en un espacio de estado de tiempo discreto se puede
representar como una aproximación trapezoidal de integración
en cada período de muestra de la siguiente manera:
(4)
(5)
Para agregar esto, agregue los siguientes comandos en su
archivo m:

Ai =
1; Bi
= T;
Ci =
1;
Di = T / 2;
[As, Bs, Cs, Ds] = ssdata (d_sys);
Aa = [As, zeros (4,1);
Bi * Cs, Ai];
Ba = [Bs;
0,0];
Ca = [Cs, 0];
Da = Ds;

d_sys_int = ss (Aa, Ba, Ca, Da, T);


Diseñando el controlador
La estructura del controlador es similar a la estructura del
controlador de espacio de estado de tiempo continuo. Ahora
usaremos el comando de lugar para calcular la matriz de
ganancia, K, que, en retroalimentación, nos dará los polos de
lazo cerrado deseados.
Primero tenemos que decidir dónde colocar los polos de lazo
cerrado. Dado que tenemos que colocar los cinco polos de lazo
cerrado, podemos ser muy selectivos acerca de a dónde van. En
particular, podemos colocarlos para cancelar todos los ceros de
la planta, así como darnos la respuesta deseada. Primero,
encontraremos los ceros de la planta convirtiendo las ecuaciones
de estado digitales de la planta en una función de transferencia,
y luego encontrando las raíces del numerador. Utilizaremos
el comando tfdata que toma un sistema ( d_sys ) como su
argumento y genera un numerador y denominador de la función
de transferencia. Como el sistema de suspensión ( d_sys )
tiene dos entradas, solo se debe seleccionar una entrada.
Observe cómo se selecciona la primera entrada en el siguiente
código.
Agregue el siguiente código a su archivo m:

sys1 = d_sys_int * [1; 0]; % seleccione


la primera entrada
[num, den] = tfdata (sys1, 'v' );
z = roots (num)

z =
-0.9929 + 0.0000i
0.9986 + 0.0065i
0.9986 - 0.0065i
Seleccionaremos estos tres ceros como tres de nuestros polos
de lazo cerrado deseados. Uno de los otros dos se seleccionará
en .9992 ya que un polo allí se asienta en aproximadamente
10000 muestras (o 5 segundos). El último polo se seleccionará
en z = .5 ya que es lo suficientemente rápido para ser
insignificante. Agregue el siguiente código a su archivo m:

p1 = z (1);
p2 = z (2);
p3 = z (3);
p4 = .9992;
p5 = .5;

K = place (Ad, Bd * [1; 0], [p1 p2 p3 p4 p5])


K =
1.0e + 09 *
0.0534 0.0000 1.0898 0.0011 1.8286
Simulando la respuesta de circuito cerrado
Podemos usar el comando de paso para simular la respuesta
de circuito cerrado. Como multiplicar el vector de estado por K en
nuestro controlador solo devuelve una sola señal, U, tenemos
que agregar una fila de ceros a K multiplicándolo por [1 0] '. Esto
es idéntico a lo que se hizo en el diseño continuo para
compensar el hecho de que hay dos entradas a la planta, pero
solo una es una entrada de control. Simularemos con una
perturbación negativa de 0.1 m en el camino para darnos una
deflexión positiva del autobús por razones estéticas. Ingrese el
siguiente código en su archivo m:

d_sys_c = ss (Ad- * 0] * Bd Cd Dd,


l T); Bd [1; K, , ,
step 1 * * 1] 5);
(-. d_sys_cl [0; ,

En esta gráfica, podemos ver que el sobreimpulso es inferior a 5


mm y la respuesta se estabiliza en 5 segundos. Cambiar los ejes
permite una mejor visión de la respuesta inicial de la suspensión.
d_sys_cl = ss (Ad-Bd * [1; 0] * K, Bd, Cd, Dd,
T);
step(-. 1 * d_sys_cl * [0; 1], 5);
axis ([0 0.1 -.01 .01])

Suspensión: Simulink Modeling


Contenido
 Configuración física
 Requerimientos de diseño
 Construyendo el Modelo
 Respuesta de bucle abierto
Configuración física
Diseñar un sistema de suspensión automotriz es un problema de
control interesante y desafiante. Cuando se diseña el sistema de
suspensión, se usa un modelo de 1/4 (una de las cuatro ruedas)
para simplificar el problema a un sistema de amortiguador de
muelles múltiple en 1-D. Un diagrama de este sistema se
muestra a continuación.

Los parámetros del sistema son los siguientes.


(m1) masa corporal 2500 kg
(m2) masa de suspensión 320 kg
(k1) constante de resorte del sistema de
suspensión 80,000 N / m
(k2) constante de resorte de rueda y neumático
500,000 N / m
(b1) constante de amortiguación del sistema de
suspensión 350 Ns / m
(b2) constante de amortiguación de la rueda y el
neumático 15,020 Ns / m
(u) fuerza de control = fuerza del controlador
que vamos a diseñar
Requerimientos de diseño
Un buen sistema de suspensión automotriz debería tener una
capacidad de agarre en carretera satisfactoria, al tiempo que
proporciona comodidad cuando se conduce sobre baches y
agujeros en la carretera. Cuando el vehículo está
experimentando alguna alteración en la carretera (es decir,
agujeros en el recipiente, grietas y pavimento irregular), la
carrocería del vehículo no debería tener grandes oscilaciones, y
las oscilaciones deberían disiparse rápidamente. Como la
distancia X1-W es muy difícil de medir y la deformación del
neumático (X2-W) es insignificante, usaremos la distancia X1-X2
en lugar de X1-W como salida en nuestro problema. Tenga en
cuenta que esta es una estimación.
La perturbación del camino (W) en este problema se simulará
mediante una entrada de paso. Este paso podría representar el
vehículo que sale de un bache. Queremos diseñar un controlador
de retroalimentación para que la salida (X1-X2) tenga un
sobreimpulso menor al 5% y un tiempo de estabilización menor a
5 segundos. Por ejemplo, cuando el vehículo corre sobre un
escalón de 10 cm de alto, la carrocería del vehículo oscilará
dentro de un rango de +/- 5 mm y volverá a un recorrido suave
en 5 segundos.
Construyendo el Modelo
Este sistema se modelará sumando las fuerzas que actúan sobre
ambas masas (cuerpo y suspensión) e integrando las
aceleraciones de cada masa dos veces para dar velocidades y
posiciones. La ley de Newton se aplicará a cada masa. Abre
Simulink y abre una nueva ventana de modelo. Primero,
modelaremos las integrales de las aceleraciones de las masas.
(1)
(2)
 Inserta un bloque de Integrador (de la biblioteca Continua) y
dibuja líneas hacia y desde sus terminales de entrada y
salida.
 Etiquete la línea de entrada "a1" (para la aceleración) y la
línea de salida "v1" (para la velocidad) Para agregar dicha
etiqueta, haga doble clic en el espacio vacío justo encima de
la línea.
 Inserta otro bloque Integrator y conéctalo a la salida del
primero.
 Dibuja una línea desde su salida y etiquétala como "x1"
(para la posición).
 Inserte un segundo par de integradores debajo del primero
con las líneas etiquetadas "a2", "v2" y "x2".
A continuación, comenzaremos a modelar la ley de Newton. La
ley de Newton para cada una de estas masas se puede expresar
como:
(3)
(4)
Estas ecuaciones se pueden representar con bloques de
ganancia (para 1 / M1 y 1 / M2) y dos bloques de suma.
 Inserte dos bloques de ganancia, (de la biblioteca de
operaciones matemáticas) uno conectado a las entradas de
cada uno de los pares integradores.
 Edite el bloque de ganancia correspondiente a M1 haciendo
doble clic en él y cambiando su valor a "1 / m1".
 Cambia la etiqueta de este bloque de Ganancia a "Masa 1"
haciendo clic en la palabra "Ganancia" debajo del bloque.
 Del mismo modo, edite el otro valor de Ganancia a "1 / m2" y
su etiqueta a "Masa 2". (Es posible que desee cambiar el
tamaño de los bloques de ganancia para ver los contenidos.
Para ello, haga clic en el bloque para resaltarlo y arrastre
una de las esquinas hasta el tamaño deseado).
Hay tres fuerzas que actúan en M1 (un muelle, un amortiguador
y la entrada, u) y cinco fuerzas que actúan en M2 (dos muelles,
dos amortiguadores y la entrada, u).
 Inserte dos bloques de Agregar (de la biblioteca de
Operaciones matemáticas), uno unido por una línea a cada
uno de los bloques de Ganancia.
 Edite los signos del bloque Agregar correspondiente a M1 en
"+ -" para representar las tres fuerzas (dos de las cuales
serán negativas).
 Edite los signos del otro Agregar bloque a "++ - ++" para
representar las cinco fuerzas, una de las cuales será
negativa.

Ahora, agregaremos las fuerzas que actúan en cada


masa. Primero, agregaremos la fuerza del resorte 1. Esta fuerza
es igual a una constante, k1 multiplicada por la diferencia X1-X2.
 Inserta un bloque Add después del par superior de
integradores.
 Edite sus signos en "+ -" y conecte la señal "x1" a la entrada
positiva y la señal "x2" a la entrada negativa.
 Dibuje una línea que conduzca desde la salida del bloque
Agregar.
 Inserta un bloque de Ganancia encima del bloque "Masa 1".
 Gíralo de izquierda a derecha haciendo un solo clic sobre él
y seleccionando Flip Block en el menú Girar e Invertir (o
presionar Ctrl-I ).
 Edite el valor de esta ganancia en "k1" y etiquete el bloque
"Primavera 1".
 Toque una línea en la salida del último bloque Agregar y
conéctelo a la entrada de este bloque de Ganancia.
 Conecte la salida de este bloque de Ganancia (la fuerza del
resorte) a la segunda entrada del bloque Agregar Masa
1. Esta entrada debe ser negativa, ya que el resorte 1 se
detiene en masa 1 cuando X1> X2.
 Toque una línea en la línea de fuerza del resorte y conéctela
a la segunda entrada del bloque Agregar masa 2. Esta
entrada es positiva ya que el resorte 1 se detiene en masa 2.

Ahora, agregaremos la fuerza de Damper 1. Esta fuerza es igual


a b1 veces V1-V2.
 Inserta un bloque Add debajo del primer integrador de Mass
1.
 Voltéelo de izquierda a derecha y edite sus signos a "+ -".
 Toque una línea de la línea "v1" y conéctela a la entrada
positiva de este bloque Agregar.
 Toque una línea de la línea "v2" y conéctela a la entrada
negativa de este bloque Agregar.
 Inserta un bloque de ganancia a la izquierda de este bloque
Add y voltéalo de izquierda a derecha.
 Edite su valor en "b1" y etiquételo como "Damper 1".
 Conecte la salida del nuevo bloque Agregar a la entrada de
este bloque de ganancia.
 Conecte la salida de este bloque de ganancia (la fuerza del
amortiguador) a la tercera entrada del bloque Agregar masa
1. Esta entrada es negativa, similar a la fuerza de Spring 1
en Mass 1.
 Toque una línea fuera de la línea de fuerza de Damper 1 y
conéctela a la primera entrada (que es positiva) del bloque
Add de Mass 2.
Ahora agregaremos la fuerza del resorte 2. Esta fuerza actúa
solo en la masa 2, pero depende del perfil del suelo, la fuerza de
W. Spring 2 es igual a X2-W.
 Inserta un bloque de pasos en el área inferior izquierda de la
ventana de tu modelo. Ponle la etiqueta "W".
 Edite su tiempo de paso a "0" y su valor final a
"0". (Asumiremos una superficie de carretera plana por
ahora).
 Inserta un bloque Add a la derecha del bloque W Step y
edita sus signos a "- +".
 Conecte la salida del bloque de pasos a la entrada positiva
de este bloque Add.
 Toque una línea de la señal "x2" y conéctela a la entrada
negativa del nuevo bloque Agregar.
 Inserta un bloque de Ganancia a la derecha de este bloque
de Agregar y conecta la salida de Agregar a la entrada de la
nueva Ganancia.
 Cambia el valor de la ganancia a "k2" y etiquétalo como
"Primavera 2".
 Conecte la salida de este bloque (fuerza de Spring 2) a la
cuarta entrada del bloque Add de Mass 2. Esta fuerza se
agrega en el sentido positivo.
A continuación, agregaremos la fuerza de Damper 2. Esta fuerza
es igual a b2 veces V2-d / dt (W). Como no existe una señal que
represente la derivada de W, necesitaremos generar esta señal.
 Inserte un bloque de derivadas (de la biblioteca continua) a
la derecha del bloque de pasos W.
 Toque una línea de la salida de Step y conéctela a la entrada
del bloque Derivative.
 Inserta un bloque Add después del bloque Derivative y edita
sus signos a "+ -".
 Conecte la salida de la Derivada a la entrada positiva del
nuevo bloque Agregar.
 Toque una línea de la línea "v2" y conéctela a la entrada
negativa de este bloque Agregar.
 Conecte la salida de este bloque Add (fuerza del Damper 2)
a la quinta entrada del bloque Add de Mass 2. Esta fuerza
también se agrega con signo positivo.
La última fuerza es la entrada U que actúa entre las dos masas.
 Inserte un bloque de pasos (de la biblioteca de Fuentes) en
la esquina superior izquierda de la ventana del modelo.
 Conecte su salida a la entrada restante del bloque Add de
Mass 1 (con signo positivo).
 Toque una línea de esta señal y conéctela a la entrada
restante del bloque Agregar de Mass 2 (con signo negativo).
 Edite el Step Time de este Step Step a "0" y deje su valor
final "1".
 Etiquete este bloque de pasos "U".
 Finalmente, para ver la salida (X1-X2) inserte un bloque de
alcance (de la biblioteca de Sinks) y conéctelo a la salida del
bloque Add más a la derecha.

Puede descargar un archivo de modelo para el sistema completo


haciendo clic derecho aquí y seleccionando Guardar enlace
como ... .
Respuesta de bucle abierto
Para simular este sistema, primero, se debe establecer un
tiempo de simulación apropiado. Seleccione Parámetros de
configuración del modelo desde el menú Simulacióne ingrese
"50" en el campo Tiempo de paro. 50 segundos es suficiente
para ver la respuesta de bucle abierto. Los parámetros físicos
ahora deben establecerse. Ejecute los siguientes comandos en
el indicador de MATLAB:
m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;
Ejecute la simulación ( Ctrl-T o Ejecutar desde
el menú Simulación ). Cuando finalice la simulación, si hace
doble clic en el bloque Scope, debería ver el siguiente resultado.

Observando lo anterior, nos gustaría mejorar la respuesta de la


suspensión mediante el control de la fuerza de control de la
suspensión U. El modelo creado aquí se empleará para el diseño
y análisis de controladores dentro de Simulink en la
página Suspensión: Diseño del controlador Simulink .
Suspensión: Simulink Controller Design

Contenido
 Modelo Simulink
 Extrayendo un modelo lineal en MATLAB
 Implementación de control de realimentación de estado
completo
 Respuesta de circuito cerrado
Modelo Simulink
El modelo de Simulink para el sistema de suspensión se
desarrolló en la Suspensión: Simulink Modelado sección, y se
puede descargar haciendo clic derecho aquí y
seleccionando Guardar enlace como ... .
Extrayendo un modelo lineal en MATLAB
Se puede extraer un modelo lineal del sistema (en forma de
función de espacio o transferencia de estado) de un modelo de
Simulink a MATLAB. Esto se hace mediante el uso de bloques
In1 y Out1 y la función MATLAB linmod . Vamos a extraer solo
el modelo de la entrada U a la salida X1-X2.
 Primero, reemplace el bloque U Step con un bloque In1.
 Además, reemplace el bloque Scope con un bloque
Out1. (Estos bloques se pueden encontrar en la biblioteca
Ports & Subsystems). Esto define la entrada y salida del
sistema para el proceso de extracción.

Guarde su archivo como "suspmod.slx" (seleccione Guardar


como en el menú Archivo ). MATLAB extraerá el modelo lineal
del archivo de modelo guardado, no de la ventana de modelo
abierta. En el prompt de MATLAB, ingrese los siguientes
comandos. Debería ver la siguiente salida, que proporciona
modelos de espacio de estado y de función de transferencia del
sistema.
[A, B, C, D] = linmod ( 'suspmod' )
[num, den] = ss2tf (A, B, C, D)
A =
1.0e + 03 *
0 0 0.0010 0
0 0 0 0.0010
-0.0320 0.0320 -0.0001 0.0001
0,2500 -1,8125 0,0011 -0,0480
B =
0
0
0.0004
-0.0031
C =
1 -1 0 0
D =
0
num = 0 0 0,0035 0,0188 0,6250

den =

1.0e + 04 *
0.0001 0.0048 0.1851 0.1721 5.0000
Para verificar la extracción del modelo, generaremos una
respuesta de paso de bucle abierto de la función de transferencia
extraída en MATLAB. Ingrese el siguiente comando en
MATLAB. Debería ver la siguiente gráfica que es equivalente a la
salida del Alcance.

step (num, den);


Implementación de control de realimentación de estado
completo
En la página Suspensión: Diseño de controlador de estado-
espacio se diseñó un controlador de realimentación de estado
completo que retroalimenta los siguientes cinco estados:
(1)
El controlador utilizó la siguiente matriz de ganancia de
retroalimentación:
K = [0 2.3E6 5E8 0 8E6]
Para implementar esto en Simulink, contendremos el sistema de
bucle abierto de una página anterior en este bloque de
subsistema.
 Crea una nueva ventana de modelo.
 Arrastre un bloque de subsistema desde la biblioteca de
subsistemas y puertos a su nueva ventana de modelo.
 Haga doble clic en este bloque. Verá una ventana en blanco
que representa los contenidos del subsistema.
 Abra su modelo previamente guardado del sistema de
suspensión del vehículo, suspmod.slx.
 Seleccione Seleccionar todo en el menú Edición (o Ctrl-A ),
y seleccione Copiar en el menú Edición (o Ctrl-C ).
 Seleccione la ventana del subsistema en blanco de su nuevo
modelo y seleccione Pegar en el menú Edición (o Ctrl-
V ). Debería ver su sistema original en esta nueva ventana
de subsistema (puede que necesite usar las barras de
desplazamiento para centrarlo).
 Etiquete el bloque In1 "U" y el bloque Out1 "y1".
 Reemplace el bloque W Step con un bloque In1 y etiquete
este bloque "W".

Ahora generaremos las otras salidas de estado del subsistema.


 Inserte un bloque Out1 debajo del bloque "y1" y etiquételo
como "d / dt (y1)", toque una línea fuera de la línea que
conduce al bloque de ganancia del amortiguador 1 (V1-V2) y
conéctela al d / dt (y1 ) Fuera del bloque.
 Inserte otro bloque Out1 debajo del bloque "d / dt (y1)" Out1
y etiquételo como "x1".
 Toque una línea de la línea "x1" y conéctela a este bloque
Out1.
 Inserte otro bloque Out1 debajo del bloque Out1 "x1" y
etiquételo como "d / dt (x1)".
 Toque una línea de la línea "v1" y conéctela a este bloque
Out1.

Se necesita generar el estado extra final, que es la integral de Y1.


 Inserte un bloque Integrator encima del bloque Out "y1" y
conecte su entrada con una línea girada de la entrada al
bloque Out1 "y1".
 Inserte un bloque Out1, etiquételo como "int (y1)" y conéctelo
a la salida del nuevo bloque Integrator.
Como las salidas de estado se usarán para formar un vector, es
importante que se numeren en el orden correcto.
 Edite el bloque Out1 "x1" y cambie su Número de puerto a
"1".
 Del mismo modo, cambie el número de puerto del bloque "d /
dt (x1)" a "2", "y1" Número de puerto del bloque Out1 a "3",
"d / dt (y1)" Número de puerto del bloque Out1 a "4", y "int
(y1)" Número de puerto del bloque Out1 a "5".
 Los bloques In1 deben numerarse de manera que "U" sea
"1" y "W" sea "2". Algunos de estos números pueden ser
correctos.

 Cierre la ventana Subsistema. Ahora debería ver los


terminales de entrada y salida en el bloque del subsistema.
 Nombre este bloque "Modelo de suspensión".
 Deberías cambiar el tamaño de este bloque para que puedas
leer todas las etiquetas. Para hacer esto, resáltelo haciendo
un solo clic sobre él y arrastre una de las esquinas
resaltadas al tamaño correcto. Tenga en cuenta que el
modelo tiene dos entradas y cinco salidas. Cada entrada y
salida es una señal escalar en este modelo.
Ahora, construiremos un controlador de realimentación de estado
completo alrededor del modelo de la planta. Primero,
necesitamos crear una señal vectorial de las cinco salidas
escalares para multiplicar por la matriz K de ganancia de
retroalimentación.
 Inserte un bloque Mux (de la biblioteca de Enrutamiento de
señal) a la derecha del bloque Modelo de suspensión. El
Mux toma múltiples entradas y las combina en una señal
vectorial. Por defecto, el Mux tiene dos entradas.
 Edite el bloque Mux y cambie el Número de Entradas a "5".
 Cambie el tamaño del mux para que tenga la misma altura
que el bloque del modelo de suspensión.

Ahora, vamos a cerrar el ciclo.


 Inserte un bloque de Ganancia (de la biblioteca de
Operaciones matemáticas) debajo del bloque Modelo de
suspensión y seleccione Matriz (K * u) como tipo de
Multiplicación haciendo doble clic en el bloque de Ganancia.
 Da la vuelta a la ganancia de izquierda a derecha y edita su
valor a "K".
 Inserte un bloque Sum a la izquierda del bloque Modelo de
suspensión.
 Edita sus signos a "+ -".
 Conecte la salida de la ganancia a la entrada negativa del
bloque Sum.
 Conecte la salida del bloque Sum a la entrada "U" del
Modelo de Suspensión.

 Inserte un bloque de pasos y conéctelo a la entrada positiva


del bloque Sum.
 Etiquete el bloque de pasos "r" y edite su tiempo de pasos a
"0" y su valor final a "0" (estamos ordenando que el vehículo
se mantenga nivelado).
 Inserte un bloque de pasos y conéctelo a la entrada "W" del
modelo de suspensión.
 Edite su tiempo de paso a "0" y su valor final a "-.1" (ahora
estamos asumiendo un bache de 10 cm de profundidad).
 Inserte un bloque de alcance y toque una línea de la salida
"y1" del modelo de suspensión y conéctelo al alcance.
Respuesta de circuito cerrado
Para simular este sistema, primero, se debe establecer un
tiempo de simulación apropiado. Seleccione Parámetros de
configuración del modelo desde el menú Simulacióne ingrese
"2" en el campo Tiempo de paro. Los requisitos de diseño
incluyen un tiempo de establecimiento de menos de 5 segundos,
y el sistema realmente se instala en 2 segundos. Los parámetros
físicos ahora deben establecerse. Ejecute los siguientes
comandos en el indicador de MATLAB:

m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;
El último paso es asignar valores a la matriz de ganancia de
retroalimentación K. Ejecute el siguiente comando en el indicador
MATLAB.

K = [0 2.3e6 5e8 0 8e6];


Ejecute la simulación ( Ctrl-T o Ejecutar desde
el menú Simulación ). Cuando finalice la simulación, haga doble
clic en el bloque Scope y verá la siguiente salida.
Esta respuesta concuerda con la que se encuentra en la
página Suspensión: Diseño de controlador de estado-espacio .

Anda mungkin juga menyukai