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
(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)
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.
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)
m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;
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:
t = 0: 0,05: 5;
step (0.1 * sys_cl, t) title ( 'Respuesta a control PID' )
un pasode0.1mbajo
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.
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
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' )
m1 = 2500;
m2 = 320;
k1 = 80000;
k2 = 500000;
b1 = 350;
b2 = 15020;
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
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.
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
k = 1.0888e + 08;
sys_cl = F * feedback (G1, k * C);
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).
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);
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:
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.
(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);
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);
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];
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
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;
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;
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.
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.
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.