Está en la página 1de 56

1.

Cruise Control (control crucero)


1.1 modelamiento
Los comandos clave de MATLAB utilizados en este tutorial son: ss , tf

Contenido
 Configuración física
 Ecuaciones del sistema
 Parámetros del sistema
 Modelo de espacio de estado
 Modelo de función de transferencia
Configuración física
El control de crucero automático es un excelente ejemplo de un sistema de control de retroalimentación que
se encuentra en muchos vehículos modernos. El propósito del sistema de control de crucero es mantener una
velocidad constante del vehículo a pesar de las perturbaciones externas , como los cambios en el viento o el
grado de la carretera. Esto se logra midiendo la velocidad del vehículo, comparándola con
la velocidad deseada o de referencia , y ajustando automáticamente el acelerador de acuerdo con una ley de
control .

Consideramos aquí un modelo simple de la dinámica del vehículo, que se muestra en el diagrama de cuerpo
libre (FBD) anterior. El vehículo, de masa m, es actuado por una fuerza de control, u. La fuerza u representa la
fuerza generada en la interfaz carretera / neumático. Para este modelo simplificado asumiremos que podemos
controlar esta fuerza directamente y descuidaremos la dinámica del tren motriz, los neumáticos, etc., que
entran en la generación de la fuerza. Se supone que las fuerzas resistivas, bv, debido a la resistencia a la
rodadura y al arrastre del viento, varían linealmente con la velocidad del vehículo, v, y actúan en la dirección
opuesta al movimiento del vehículo.
Ecuaciones del sistema
Con estas suposiciones, nos queda un sistema de amortiguador de masa de primer orden . Sumando las
fuerzas en la dirección x y aplicando la segunda ley de Newton, llegamos a la siguiente ecuación del sistema:
(1) m v́ +bv=u
Como estamos interesados en controlar la velocidad del vehículo, la ecuación de salida se elige de la
siguiente manera
(2)
Parámetros del sistema
Para este ejemplo, supongamos que los parámetros del sistema son:
(m) masa del vehículo 1000 kg
(b) coeficiente de amortiguación 50 Ns / m
Modelo de espacio de estado
Los sistemas de primer orden tienen solo un único modo de almacenamiento de energía, en este caso la
energía cinética del automóvil, y por lo tanto solo se necesita una variable de estado, la velocidad. La
representación de espacio de estado es por lo tanto:

(3)
(4)
Ingresamos este modelo de espacio de estado en MATLAB usando los siguientes comandos:

m = 1000;
b = 50;

A = -b / m;
B = 1 / m;
C = 1;
D = 0;

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

Modelo de función de transferencia


Tomando la transformada de Laplace de la ecuación diferencial gobernante y asumiendo condiciones iniciales
cero, encontramos que la función de transferencia del sistema de control de crucero es:

(5)
Ingresamos el modelo de función de transferencia en MATLAB usando los siguientes comandos:

s = tf ( 's' );
P_cruise = 1 / (m * s + b);
1.2 análisis del sistema
Los comandos clave de MATLAB utilizados en este tutorial son: ss , paso

Contenido
 Modelo del sistema y parámetros
 Especificaciones de rendimiento
 Respuesta de paso de bucle abierto
 Polos / ceros de bucle abierto
 Diagrama Bode de bucle abierto
Modelo del sistema y parámetros
El modelo de función de transferencia para el problema de control de crucero se proporciona a
continuación. Consulte la página Cruise Control: System Modeling para la derivación.

(1)
Los parámetros utilizados en este ejemplo son los siguientes:
(m) masa del vehículo 1000 kg
(b) coeficiente de amortiguación 50 Ns / m
(u) fuerza de control nominal 500 N
Especificaciones de rendimiento
El siguiente paso es crear algunos criterios de diseño que el sistema compensado debería lograr. Cuando el
motor da una fuerza de 500 Newton, el automóvil alcanzará una velocidad máxima de 10 m / s (22 mph), vea
la sección de respuesta de paso de bucle abierto a continuación. Un automóvil debería poder acelerar hasta
esa velocidad en menos de 5 segundos. En esta aplicación, es suficiente un 10% de exceso y un 2% de error
de estado estable en la velocidad.
Teniendo en cuenta lo anterior, hemos propuesto los siguientes criterios de diseño para este problema:
 Tiempo de subida <5 s
 Sobregiro <10%
 Error de estado estable <2%
Respuesta de paso de bucle abierto (lazo abierto)
La respuesta de lazo abierto del sistema, sin ningún control de realimentación, a una fuerza de entrada de
paso de 500 Newtons se simula en MATLAB de la siguiente manera:

m = 1000;
b = 50;
u = 500;

s = tf ( 's' );
P_cruise = 1 / (m * s + b);

step (u * P_cruise)
Vemos que el sistema de bucle abierto no presenta sobreimpulsos u oscilaciones (características de los
sistemas de primer orden) y alcanza la velocidad deseada de estado estacionario de 10 m / s; sin embargo, el
tiempo de subida es demasiado lento, ~ 60 s. Por lo tanto, necesitamos diseñar un controlador de
retroalimentación que acelere la respuesta significativamente sin afectar negativamente a las otras métricas
de rendimiento dinámico.
Polos / ceros de bucle abierto
El sistema de control de crucero tiene un solo polo en s = -b / m que podemos ver trazado en el plano s
usando los siguientes comandos de MATLAB:

pzmap (P_cruise)
eje ([- 1 1 -1 1])
Observamos que el sistema de circuito abierto es estable y no oscila ya que el polo es real y
negativo. Además, la velocidad de respuesta está determinada por la magnitud de este polo, b / m : cuanto
mayor es la magnitud, más rápido se acerca el sistema al valor de estado estacionario. Como normalmente no
podemos cambiar los parámetros del sistema para cambiar la respuesta dinámica del sistema, debemos
diseñar controladores que alteren los polos y ceros del sistema de circuito cerrado para cumplir con las
especificaciones de rendimiento deseadas.
Diagrama Bode de bucle abierto
También estamos interesados en la respuesta de frecuencia de bucle abierto del sistema que encontramos
utilizando el siguiente comando MATLAB:

bode (P_cruise)
Vemos que las representaciones de Bode exhiben las características definitivas de los sistemas de primer
orden , que incluyen una magnitud de -3 dB y una fase de -45 grados a la frecuencia de esquina de w = b / m
= 0.05 rad / sy -20 dB / dec roll- apagado a altas frecuencias.
1.3 diseño del controlador PID
Los comandos clave de MATLAB utilizados en este tutorial son: tf , step , feedback

Contenido
 Modelo del sistema y parámetros
 Especificaciones de rendimiento
 Descripción general de PID
 Control proporcional
 Control PI
 Control PID
Modelo del sistema y parámetros
El modelo de función de transferencia para el problema de control de crucero se proporciona a
continuación. Consulte la página Cruise Control: System Modeling para la derivación.

(1)
Los parámetros utilizados en este ejemplo son los siguientes:
(m) masa del vehículo 1000 kg
(b) coeficiente de amortiguación 50 Ns / m
(r) velocidad de referencia 10 m / s
Especificaciones de rendimiento
 Tiempo de subida <5 s
 Sobregiro <10%
 Error de estado estable <2%
Descripción general de PID
El diagrama de bloques de un sistema de retroalimentación de unidad típico se muestra a continuación.

Recuerde de la Introducción: página de diseño del controlador PID , la función de transferencia de un


controlador PID es

(2)
Podemos definir un controlador PID en MATLAB usando la función de transferencia directamente:

Kp = 1;
Ki = 1;
Kd = 1;

s = tf ( 's' );
C = Kp + Ki / s + Kd * s

C =

s ^ 2 + s + 1
-----------
s

Función de transferencia en tiempo continuo.

Alternativamente, podemos usar el objeto del controlador pid de MATLAB para generar un controlador de
tiempo continuo equivalente de la siguiente manera:

C = pid (Kp, Ki, Kd)

C =

1
Kp + Ki * --- + Kd * s
s

con Kp = 1, Ki = 1, Kd = 1

Controlador PID de tiempo continuo en forma paralela.

Control proporcional
Lo primero que debe hacer en este problema es encontrar una función de transferencia de bucle cerrado con
un control proporcional ( ) agregado.
Al reducir el diagrama de bloque de realimentación de unidad, la función de transferencia de bucle cerrado
con un controlador proporcional se convierte en:

(3)
Recuerde de la introducción: la página de diseño del controlador PID , un controlador proporcional,,
disminuye el tiempo de subida, lo cual es deseable en este caso.
Por ahora, use igual a 100 y una velocidad de referencia de 10 m / s. Crea una nueva m-file e ingresa los
siguientes comandos.

m = 1000;
b = 50;
r = 10;

s = tf ( 's' );
P_cruise = 1 / (m * s + b);

Kp = 100;
C = pid (Kp);

T = feedback (C * P_cruise, 1)

t = 0: 0,1: 20;
step (r * T, t)
t: ([0 20 0 10])
T =

100
------------
1000 s + 150

Función de transferencia en tiempo continuo.

Tenga en cuenta que hemos utilizado el comando de retroalimentación (feedback) MATLAB para
simplificar la reducción del diagrama de bloques del sistema de circuito cerrado. Verifique por sí mismo que el
resultado concuerda con la función de transferencia de bucle cerrado, T, derivada anteriormente.
Ejecutar el archivo m en MATLAB debería darle la respuesta de paso anterior. Como puede ver en la gráfica,
ni el error de estado estacionario ni el tiempo de subida satisfacen nuestros criterios de diseño.
Puede aumentar la ganancia proporcional,, para reducir el tiempo de subida y el error de estado
estacionario. Cambie el archivo m existente de modo que sea igual a 5000 y vuelva a ejecutarlo en la
ventana de comandos de MATLAB. Deberías ver el siguiente diagrama.

Kp = 5000;
C = pid (Kp);
T = retroalimentación (C * P_cruise, 1);

paso (r * T, t)
eje ([0 20 0 10])
El error de estado estacionario ahora es esencialmente cero, y el tiempo de subida se ha reducido
sustancialmente. Sin embargo, esta respuesta no es realista porque un sistema de control de crucero real
generalmente no puede cambiar la velocidad del vehículo de 0 a 10 m / s en menos de 0,5 segundos debido a
las limitaciones de potencia del motor y la transmisión.
Las limitaciones de los actuadores se encuentran con mucha frecuencia en la práctica en la ingeniería de
sistemas de control y, en consecuencia, siempre se debe considerar la acción de control requerida al proponer
un nuevo controlador. Discutiremos este tema mucho más en tutoriales posteriores.
La solución a este problema en este caso es elegir una ganancia proporcional más baja , que dará un
tiempo de subida razonable y agregar un controlador integral para eliminar el error de estado estacionario.
Control PI
La función de transferencia de bucle cerrado de este sistema de control de crucero con un controlador PI
( ) es:

(4)
Recuerde de la Introducción: página de diseño del controlador PID , la adición de un controlador integral al
sistema elimina el error de estado estable. Por ahora, deje igual a 600 e igual a 1 y vea qué le sucede a
la respuesta. Cambie su archivo m a lo siguiente.

Kp = 600;
Ki = 1;
C = pid (Kp, Ki);

T = retroalimentación (C * P_cruise, 1);

paso (r * T, t)
eje ([0 20 0 10])
Ahora ajuste tanto la ganancia proporcional , como la ganancia integral,, para obtener la respuesta
deseada. Cuando ajusta la ganancia integral , le sugerimos que comience con un valor pequeño, ya que
una gran puede desestabilizar la respuesta. Cuando es igual a 800 y es igual a 40, la respuesta al
paso será similar a la siguiente:

Kp = 800;
Ki = 40;
C = pid (Kp, Ki);

T = retroalimentación (C * P_cruise, 1);

paso (r * T, t)
eje ([0 20 0 10])
Control PID
Para este ejemplo en particular, no fue necesaria la implementación de un controlador derivado para obtener
el resultado requerido. Sin embargo, es posible que desee ver cómo trabajar con un control PID para futuras
referencias. La función de transferencia de bucle cerrado para este sistema de control de crucero con un
controlador PID ( ) es:

(5)
Deje igual a 1, igual a 1 e igual a 1 e ingrese los siguientes comandos en un nuevo archivo m.

Kp = 1;
Ki = 1;
Kd = 1;
C = pid (Kp, Ki, Kd);

T = retroalimentación (C * P_cruise, 1);

Trazar la respuesta de paso y ajustar todos , y hasta que obtenga resultados


satisfactorios. Dejaremos esto como un ejercicio para que trabajes.
Sugerencia: Por lo general, elegir ganancias apropiadas requiere un proceso de prueba y error. La mejor
manera de atacar este proceso tedioso es ajustar una variable ( , o ) a la vez y observar cómo
cambiar una variable influye en la salida del sistema. Las características de , y se resumen en
la Introducción: diseño del controlador PID página.
1.4 Root Locus Controller Design
Los comandos clave de MATLAB utilizados en este tutorial son: tf , rlocus , feedback , step

Contenido
 Modelo de sistema
 Parámetros del sistema
 Especificaciones de rendimiento
 Control proporcional
 Controlador de retardo
Modelo de sistema
El modelo de función de transferencia para el problema de control de crucero se proporciona a
continuación. Consulte la página Cruise Control: System Modeling para la derivación.

(1)
Parámetros del sistema
Para este ejemplo, supongamos que los parámetros del sistema son
(m) masa del vehículo 1000 kg
(b) coeficiente de amortiguación 50 Ns / m
(r) velocidad de referencia 10 m / s
y el diagrama de bloques de un sistema típico de retroalimentación de unidad se muestra a continuación.

Especificaciones de rendimiento
 Tiempo de subida <5 sec
 Sobregiro <10%
 Error de estado estable <2%
Control proporcional
Recordemos desde la página Introducción: Diseño de controlador de locus de raíz, el gráfico de locus de raíz
muestra las ubicaciones de todos los polos de lazo cerrado posibles cuando una única ganancia varía de cero
a infinito. Por lo tanto, solo se considerará un controlador proporcional, para resolver este problema. La
función de transferencia de bucle cerrado se convierte en:

(2)
Además, desde la página Introducción: Diseño de controlador de locus de raíz , sabemos que el sgrid
de comando de MATLAB se puede usar para mostrar una región aceptable del trazado de locus de raíz. Para
usar sgrid , primero se deben determinar la relación de amortiguación , y la frecuencia natural . Las
siguientes dos ecuaciones se usarán para encontrar la relación de amortiguación y la frecuencia natural:

(3)

(4)
dónde
 = Frecuencia natural [rad \ s]
 = Relación de amortiguamiento
 = Tiempo de subida [s]
 = Sobreimpulso máximo
Uno de nuestros criterios de diseño es tener un tiempo de subida de menos de 5 segundos. Desde la primera
ecuación, vemos que la frecuencia natural debe ser mayor que 0.36. También utilizando la segunda ecuación,
vemos que la relación de amortiguamiento debe ser mayor a 0.6, ya que el sobreimpulso máximo debe ser
menor al 10%.
Ahora, estamos listos para generar un diagrama de locus raíz y usar sgrid para encontrar una región
aceptable en el locus raíz. Crea una nueva m-file e ingresa los siguientes comandos.

m = 1000;
b = 50;
r = 10;

s = tf ( 's' );
P_cruise = 1 / (m * s + b);

rlocus (P_cruise)
eje ([- 0.6 0 -0.6 0.6]);
sgrid (0.6, 0.36)
Las dos líneas punteadas en un ángulo indican las ubicaciones de la relación de amortiguamiento constante
( = 0.6); la relación de amortiguamiento es mayor a 0.6 entre estas líneas y menos de 0.6 fuera de las
líneas. La semi-elipse indica las ubicaciones de frecuencia natural constante ( = 0.36); la frecuencia natural
es mayor a 0.36 fuera de la semi-elipse, y más pequeña que 0.36 adentro.
Luego podemos encontrar una ganancia para colocar los polos de lazo cerrado en la región deseada
mediante el uso del comando rlocfind . Agregue el código [Kp, postes] = rlocfind (P_cruise) 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, debería ver un mensaje pidiéndole que elija un punto en el diagrama del lugar de la
raíz. Dado que desea elegir un punto entre líneas punteadas ( > 0.6) y fuera de la semielípsula ( > 0.36),
haga clic en el eje real justo fuera de la semi-elipse (alrededor de -0.4) como lo indica la marca cruzada en el
siguiente figura.
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 =

-0.4002 + 0.0019i

Kp =

350.2419

polos =

-0.4002

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 utilizar como la
ganancia para el compensador y la respuesta de paso de bucle cerrado se puede generar de la siguiente
manera.

Kp = 350.2419;
sys_cl = feedback (Kp * P_cruise, 1);
t = 0: 0,1: 20;
paso (r * sys_cl, t)
Con la ganancia Kp que acaba de elegir, el tiempo de subida y los criterios de rebasamiento se han
cumplido; sin embargo, permanece un error de estado estacionario de más del 10%.
Controlador de retardo
Para reducir el error de estado estacionario, se agregará un controlador de retardo al sistema. La función de
transferencia del controlador de retardo es:

(5)
La función de transferencia de bucle cerrado (sin incluir ) ahora se convierte en:

(6)
Finalmente, incluyendo la ganancia de bucle , la función de transferencia de bucle cerrado se convierte en:

(7)
Si lee la sección "Retardador de Lag o Retardo de Fase utilizando Rocus-Locus" en la página de Diseño de
Compensador de Retardo y Retardo , el polo y el cero de un controlador de rezago deben colocarse muy
juntos. Además, establece que el error de estado estable se reducirá por un factor de . Por estas
razones, deje igual a 0.3 e igual a 0.03.
Crea un nuevo archivo m e ingresa los siguientes comandos.

zo = 0.3;
po = 0.03;

s = tf ( 's' );
C_lag = (s + zo) / (s + po);

rlocus (C_lag * P_cruise);


eje ([- 0.6 0 -0.4 0.4])
sgrid (0.6.0.36);

Usando nuevamente el comando rlocfind , podemos elegir una nueva ganancia de bucle . Ingrese el
código [Kp, postes] = rlocfind (C_lag * P_cruise) en la ventana de comandos y haga clic en el
eje real alrededor de -0.4 como se muestra en la siguiente figura.
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 =

-0.4002 - 0.0012i

Kp =

1.2936e + 03

polos =

-0.9733
-0.4003

Luego podemos generar la nueva respuesta de paso en bucle cerrado de la siguiente manera.

Kp = 1293,6;
sys_cl = feedback (Kp * C_lag * P_cruise, 1);
t = 0: 0,1: 20;
paso (r * sys_cl, t)
eje ([0 20 0 12])
Como puede ver, el error de estado estacionario se ha reducido a casi cero. El sobreimpulso es el resultado
del cero agregado en el controlador de retardo. Por ahora, todos los criterios de diseño se han cumplido y no
se necesitan más iteraciones; Sin embargo, usted debe experimentar con diferentes y valores para ver lo
que su efecto es sobre la respuesta del sistema de circuito cerrado.
1.5 métodos de dominio de frecuencia para
el diseño del controlador

Los comandos clave de MATLAB utilizados en este tutorial son: tf , feedback , step

Contenido
 Modelo de sistema
 Parámetros del sistema
 Especificaciones de rendimiento
 Diagrama de Bode y respuesta de bucle abierto
 Controlador proporcional
 Compensador de retraso
Modelo de sistema
El modelo de función de transferencia para el problema de control de crucero se proporciona a
continuación. Consulte la página Cruise Control: System Modeling para la derivación.

(1)
Parámetros del sistema
Para este ejemplo, supongamos que los parámetros del sistema son
(m) masa del vehículo 1000 kg
(b) coeficiente de amortiguación 50 Ns / m
(r) velocidad de referencia 10 m / s
(u) fuerza de control nominal 500 N
y el diagrama de bloques de un sistema típico de retroalimentación de unidad se muestra a continuación.

Especificaciones de rendimiento
 Tiempo de subida <5 sec
 Sobregiro <10%
 Error de estado estable <2%
Diagrama de Bode y respuesta de bucle abierto
El primer paso para resolver este problema utilizando la respuesta de frecuencia es determinar qué función de
transferencia de bucle abierto usar. Al igual que para el método de diseño Root-Locus, solo usaremos un
controlador proporcional para resolver el problema. El diagrama de bloques y la función de transferencia de
bucle abierto se muestran a continuación.

(2)
Para usar un diagrama de Bode, la respuesta de bucle abierto debe ser estable. Deje igual a 1 por ahora y
vea cómo se ve la respuesta de bucle abierto. Crea una nueva m-file e ingresa los siguientes comandos.

m = 1000;
b = 50;
u = 500;

Kp = 1;
s = tf ( 's' );
P_cruise = 1 / (m * s + b);
C = Kp;
paso (u * C * P_cruise)
Como puede ver, el sistema de bucle abierto es estable; por lo tanto, podemos seguir adelante y generar el
diagrama de Bode. Cambie la m-file anterior al eliminar el comando step y agregar el siguiente comando.

bode (C * P_cruise);
Controlador proporcional
Consulte la Introducción: Métodos de dominio de frecuencia para la página Diseño de controlador , y veamos
qué características del sistema podemos determinar a partir del diagrama de Bode anterior.
El error de estado estable se puede encontrar a partir de la siguiente ecuación:

(3)
Para este sistema, la ganancia de baja frecuencia es -34dB = 0.02; por lo tanto, el error de estado
estacionario debe ser del 98%. Podemos confirmar esto generando una respuesta de paso de bucle cerrado
de la siguiente manera.

r = 10;
sys_cl = feedback (C * P_cruise, 1);
paso (r * sys_cl);
Necesitamos aumentar la ganancia de baja frecuencia para mejorar el error de estado
estacionario. Específicamente, el error debe ser <2%; por lo tanto, 1 / (1+ ) <0.02 > 49 = 33.8
dB. Dado que, la ganancia de baja frecuencia es -34 dB y el límite de error de estado estacionario necesita
que tengamos una ganancia de baja frecuencia de 33.8 dB, para alcanzar el error de estado estable deseado
usando solo control proporcional, se requiere a > (34 dB + 33.8 dB) = 67.8 dB = 2455. Veamos el diagrama
de Bode del sistema de bucle abierto compensado.

Kp = 2500;
C = Kp;

bode (C * P_cruise);
Como se puede ver en el diagrama de Bode anterior, la magnitud de baja frecuencia es ahora, 34 dB. Ahora
simulemos la respuesta escalonada del sistema de ciclo cerrado con esta ganancia.

sys_cl = feedback (C * P_cruise, 1);


paso (r * sys_cl);
El error de estado estacionario cumple los requisitos; sin embargo, el tiempo de subida es mucho más corto
de lo necesario y no es razonable en este caso, ya que el automóvil no puede acelerar hasta 10 m / s en 2
segundos. Por lo tanto, intentaremos usar una ganancia proporcional más pequeña para reducir la acción de
control requerida junto con un compensador de retardo para reducir el error de estado estacionario.
Compensador de retraso
Si echa un vistazo a la sección "Retardador de retardo o retardo de fase usando respuesta de frecuencia" de
la página Diseño de compensador de adelanto y rezago, el compensador de retardo agrega ganancia a bajas
frecuencias mientras mantiene la frecuencia de ancho de banda en el mismo lugar. Esto es realmente lo que
necesitamos: mayor ganancia de baja frecuencia para reducir el error de estado estable y mantener la misma
frecuencia de ancho de banda para mantener el tiempo de subida deseado. La función de transferencia del
controlador de retardo es:

(4)
Si lee la sección "Retardador de demora o retardo de fase utilizando Rocus-Locus" en la página Diseño de
compensación deadelanto y rezago, el polo y el cero de un controlador de desfase deben colocarse muy
juntos. Además, establece que el error de estado estable se reducirá por un factor de . Por estas
razones, deje igual a 0.1 e igual a 0.02. La ganancia proporcional, = 1000 fue elegida por ensayo y
error.

Kp = 1000;
zo = 0.1;
po = 0.02;

C_lag = (s + zo) / (s + po);


bode (Kp * C_lag * P_cruise);
Confirmemos el rendimiento generando una respuesta de paso de ciclo cerrado.

sys_cl = feedback (Kp * C_lag * P_cruise, 1);


t = 0: 0,1: 20;
paso (r * sys_cl, t);
Como puede ver, hay un sobreimpulso muy leve, el error de estado estacionario es cercano a cero y el tiempo
de subida es inferior a 5 segundos. El sistema ahora cumple con todos los requisitos de diseño. No se
necesita más iteración.
1.6 Métodos de estado-espacio para el
diseño del controlador

En este tutorial, diseñaremos un controlador y un observador para el sistema de control de crucero utilizando
el modelo de espacio de estado.
Los comandos clave de MATLAB utilizados en este tutorial son: ss , feedback

Contenido
 Ecuaciones de espacio de estado
 Requerimientos de diseño
 Diseño de control con colocación de polos
 Entrada de referencia
Ecuaciones de espacio de estado
Las ecuaciones de movimiento en forma de estado de espacio son las siguientes:

(1)
(2)
dónde
(m) masa del vehículo 1000 kg
(b) coeficiente de amortiguación 50 Ns / m
(u) fuerza de control nominal 500 N
(v) velocidad del vehículo donde y = v es la salida del sistema
Requerimientos de diseño
 Tiempo de subida <5 s
 Sobregiro <10%
 Error de estado estable <2%
Para ver la configuración del problema original, vea la página Cruise Control: System Modeling .
Diseño de control con colocación de polos
El esquema de un sistema de realimentación de estado completo se muestra a continuación.
dónde
 K = matriz de ganancia de retroalimentación de estado
 u = r - Kx = r - Kv = entrada de control
Recuerde de la página Tutorial de estado-espacio , podemos usar una técnica de "colocación de polos" para
obtener el resultado deseado. Los polos de un sistema de circuito cerrado se pueden encontrar a partir de la
ecuación característica: el determinante de la matriz [sI- (AB * K)]. Si los polos del sistema se pueden colocar
en la ubicación deseada diseñando una matriz de control apropiada (K), se puede obtener la salida
deseada. En este tutorial, los polos se elegirán primero, luego utilizaremos MATLAB para encontrar la matriz
de control correspondiente (K).
Ahora, necesitamos determinar dónde colocar polos para nuestro sistema. Como nuestra matriz [sI- (AB * K)]
es 1x1, solo tenemos un polo para colocar. Deje que el polo esté en -1.5 (arbitrario). Al igual que en el Tutorial
de estado-espacio, el lugar decomando de MATLAB se utilizará para encontrar la matriz de control K. Cree
un nuevo archivo-m e ingrese los siguientes comandos. Ejecutar el archivo m en la ventana de comandos de
MATLAB debería proporcionarle la matriz de control y la respuesta al paso que se muestran a continuación.

m = 1000;
b = 50;
t = 0: 0,1: 10;
u = 500 * unos (tamaño (t));

A = [-b / m];
B = [1 / m];
C = [1];
D = [0];
sys = ss (A, B, C, D);

x0 = [0];

p1 = -1.5;

K = lugar (A, B, [p1])

sys_cl = ss (AB * K, B, C, D);


lsim (sys_cl, u, t, x0);
eje ([0 10 0 0.35])

K =
1450
Como puede ver, el tiempo de subida es satisfactorio, pero el error de estado estacionario es demasiado
grande.
Entrada de referencia
Una vez más, desde la página Tutorial de estado-espacio , se puede usar un factor de escala llamado Nbar (el
esquema se muestra a continuación) para eliminar el error de estado estacionario. Podemos usar
la función rscale para calcular el factor de escala. Descárguelo aquí, rscale.m . La entrada ya está multiplicada
por 500, y queremos que la velocidad de estado estable sea de 10 m / seg, por lo que también debemos tener
en cuenta estos factores.

Copie los siguientes comandos en un archivo m y ejecútelo en la ventana de comandos de MATLAB. Debería
obtener la respuesta de paso que se muestra a continuación.
Nbar = escala de r (sys, K) * 10/500;
sys_cl = ss (AB * K, B * Nbar, C, D);

lsim (sys_cl, u, t, x0);


eje ([0 10 0 11])

Como puede ver, el error de estado estacionario ha sido eliminado. El tiempo de subida es inferior a 5
segundos y el rebasamiento es, de hecho, cero. Todos los requisitos de diseño están satisfechos.

1.7 diseño de controlador digital


En esta versión de control digital del problema de control de crucero, vamos a utilizar el método de diseño de
locus de raíz para diseñar el controlador digital.
Los comandos clave de MATLAB utilizados en este tutorial
son: tf , c2d , rlocus , zgrid , feedback , step

Contenido
 Modelo de sistema
 Parámetros del sistema
 Especificaciones de rendimiento
 Función de transferencia de tiempo discreto
 Sitio de raíz en el plano z
 Compensación usando un controlador digital
Modelo de sistema
El modelo de función de transferencia para el problema de control de crucero se proporciona a
continuación. Consulte la página Cruise Control: System Modeling para la derivación.

(1)
Parámetros del sistema
Para este ejemplo, supongamos que los parámetros del sistema son
(m) masa del vehículo 1000 kg
(b) coeficiente de amortiguación 50 Ns / m
(r) velocidad de referencia 10 m / s
(u) fuerza de control nominal 500 N
Especificaciones de rendimiento
Necesitamos diseñar un controlador para cumplir con los siguientes criterios de diseño para este problema:
 Tiempo de subida <5 s
 Sobregiro <10%
 Error de estado estable <2%
Función de transferencia de tiempo discreto
El primer paso para realizar un análisis discreto de un sistema es encontrar la función de transferencia
equivalente de tiempo discreto de la porción continua. Convertiremos la función de transferencia anterior (Y (s)
/ U (s)) en una función de transferencia de tiempo discreto utilizando la función MATLAB c2d . Para usar esta
función, necesita especificar tres argumentos: sistema, tiempo de muestreo ( Ts ) y el 'método' . El tiempo
de muestreo ( Ts ), en unidades de sec / muestra, debe ser menor que , donde es la
frecuencia de ancho de banda de bucle cerrado. Para el método, utilizaremos la retención de orden cero
( 'zoh' ).
Deje que el tiempo de muestreo sea igual a 1/50 de segundo; esto es suficientemente rápido suponiendo que
la frecuencia del ancho de banda es de 1 rad / seg. Ahora ingrese los siguientes comandos en un archivo m y
ejecútelo en la ventana de comandos.

m = 1000;
b = 50;
u = 500;

s = tf ( 's' );
P_cruise = 1 / (m * s + b);

Ts = 1/50;

dP_cruise = c2d (P_cruise, Ts, 'zoh' )

dP_cruise =

1.999e-05
---------
z - 0.999

Tiempo de muestra: 0.02 segundos


Función de transferencia de tiempo discreto.

Sitio de raíz en el plano z


Recuerda desde la página del Tutorial de Control Digital , la función MATLAB zgrid puede usarse para
encontrar una región aceptable del locus raíz discreto que da la ganancia deseada (
). El comando zgrid requiere dos argumentos: Frecuencia natural ( ) y relación de amortiguación (
). Estos dos argumentos se pueden encontrar a partir del tiempo de subida y los requisitos de rebasamiento y
las siguientes dos ecuaciones.

(2)

(3)
dónde,
 = Relación de amortiguamiento
 = Frecuencia natural (rad / seg)
 = Tiempo de subida
 = Sobreimpulso máximo
Dado que nuestros requisitos de tiempo de subida y sobreimpulso son 5 segundos y 10%, respectivamente,
podemos determinar que la frecuencia natural ( ) debe ser mayor que 0.36 rad / seg y la relación de
amortiguamiento ( ) debe ser mayor que 0.6.
Generemos el locus raíz y usemos el comando zgrid para encontrar la región aceptable del locus raíz. Pero
antes de hacerlo, si se refiere al Tutorial de Control Digital , el argumento de frecuencia natural
para zgrid debe estar en unidades de rad / sample, entonces let = 0.36 = 0.0072 rad / sample. Ahora
agregue los siguientes comandos al archivo m anterior y vuelva a ejecutarlo. Deberías obtener la siguiente
trama.

Wn = 0,0072;
zeta = 0.6;

rlocus (dP_cruise)
zgrid (zeta, Wn)
eje ([-1 1 -1 1])
La región del plano complejo que nos interesa es la que está cerca del punto (1,0), por lo que debe acercarse
a este punto. Vuelva a ejecutar usando el siguiente comando de eje y su figura debería aparecer ahora como
se muestra a continuación.

eje ([0.95 1 -.1 .1])

La línea de puntos a la derecha, indica las ubicaciones de frecuencia natural constante ( ), y la frecuencia
natural es mayor a 0.0072 fuera de la línea. La otra línea de puntos indica las ubicaciones de la relación de
amortiguamiento constante ( ), y la relación de amortiguamiento es mayor a 0.6 dentro de la línea. La línea
vertical dentada es una porción del círculo unitario que se calcula a baja resolución (de ahí la irregularidad).
En el gráfico anterior, puede ver que parte del lugar de la raíz está dentro de la región deseada. Busquemos
una ganancia específica ( ) usando la función rlocfind de MATLAB y luego obtenga la respuesta de
paso correspondiente. Al ejecutar el comando [K, poles] = rlocfind (dP_cruise) en la ventana de
comandos de MATLAB, se generará un aviso que le indicará que seleccione un punto en el lugar de la
raíz. Recuerde que si elige un polo que está demasiado dentro del círculo unitario, entonces la respuesta al
escalón será demasiado rápida para indicar una aceleración física irracional. Por lo tanto, debe elegir el polo
que está cerca de la intersección de la frecuencia natural constante y el eje real. Seleccione el punto cerca de
0.99 como lo muestra la marca cruzada en el siguiente gráfico de locus de raíz.
Después de seleccionar un punto, debería ver la siguiente salida en la ventana de comandos de MATLAB que
indica el punto que eligió, el punto en el locus raíz más cercano a ese punto (el polo) y la ganancia que
coloca el polo de bucle cerrado en esa ubicación .
Seleccione un punto en la ventana de gráficos

selected_point =

0.9900 - 0.0003i

K =

451.1104

polos =

0.9900

Luego, para ver la respuesta de paso de bucle cerrado, agregue el siguiente código a su archivo m.

K = 451.1104;
sys_cl = feedback (K * dP_cruise, 1);
r = 10;
figura
paso (r * sys_cl, 10);
Esta respuesta satisface los requisitos de tiempo de subida y sobreimpulso. Pero el error de estado
estacionario es aproximadamente 11%. Para obtener el error de estado estacionario deseado, modificaremos
el controlador digital.
Compensación usando un controlador digital
Recuerde de la página continua del Control de Crucero: Locus de Raíz , se agregó un compensador de
retardo al sistema para obtener la respuesta deseada. En esta versión de control digital del problema de
control de crucero, modificaremos el controlador digital existente agregando una compensación de retraso
adicional del formulario que se muestra a continuación.

(4)
Hay una guía para los compensadores digitales de plomo y retraso de diseño y una guía para el diseño de
los compensadores de tiempo y plomo de tiempo continuo . El método de diseño discreto descrito dice que el
cero del compensador de retardo debe elegirse para (aproximadamente) cancelar uno de los polos de la
planta, siempre que sea estable. Por lo tanto, elegimos el cero para estar en = 0.999.
Para reducir el error de estado estacionario, notamos que la ganancia de baja frecuencia del sistema de
control de tiempo discreto con un compensador de retardo aumenta en un factor de . Para
reducir el error de estado estacionario por un factor de 5, elegimos = 0.9998. Para obtener una ganancia de
1 a frecuencia cero, el numerador se multiplica por = 0.2 antes de usar el locus
raíz. Tenga en cuenta que todo el compensador se multiplica por la ganancia de bucle determinada desde el
lugar de la raíz.
Ahora tenemos la función de transferencia de compensador de tiempo discreto. Generemos el locus raíz y
obtengamos la respuesta al paso. Primero crea una nueva m-file e ingresa los siguientes comandos.

m = 1000;
b = 50;
u = 500;
s = tf ( 's' );
P_cruise = 1 / (m * s + b);
Ts = 1/50;
dP_cruise = c2d (P_cruise, Ts, 'zoh' );

z = tf ( 'z' , Ts);
C = 0,2 * (z - 0,999) / (z - 0,9998);

Wn = 0,0072;
zeta = 0.6;

rlocus (C * dP_cruise)
zgrid (zeta, Wn)
eje ([0.98 1 -0.01 0.01])

Luego ingrese el comando [K, poles] = rlocfind (C * dP_cruise) en la línea de comando y


nuevamente elija una ubicación de polo cerca de 0.99 como lo indican las marcas de cruz en la siguiente
figura.
Después de seleccionar un punto, debería ver la siguiente salida en la ventana de comandos de MATLAB que
indica el punto que eligió, el punto en el locus raíz más cercano a ese punto (el polo) y la ganancia que
coloca el polo de bucle cerrado en esa ubicación .
Seleccione un punto en la ventana de gráficos

selected_point =

0.9900 - 0.0000i

K =

2.4454e + 03

polos =

0.9900
0.9900

Finalmente, para ver la respuesta de paso de ciclo cerrado, agregue el siguiente código a su archivo m.

K = 2,4454e + 03;
sys_cl = feedback (K * C * dP_cruise, 1);
r = 10;
paso (r * sys_cl, 10);
Esta respuesta aumenta tan rápido como antes, pero el error de estado estacionario se ha reducido al
2%. Este sistema satisface todos los requisitos de diseño al tiempo que requiere una cantidad razonable de
esfuerzo de control.
Nota: un problema de diseño no necesariamente tiene una respuesta única. Para practicar, puede probar
otros compensadores para obtener una mejor respuesta que la que se muestra arriba.
1.8 Simulink Modeling

Contenido
 Configuración física y ecuaciones del sistema
 Construyendo el modelo
 Respuesta de bucle abierto
Configuración física y ecuaciones del sistema
El modelo del sistema de control de crucero es relativamente simple. Si se supone que la resistencia a la
rodadura y la resistencia aerodinámica son proporcionales a la velocidad del automóvil, entonces el problema
se reduce al simple sistema de masa y amortiguador que se muestra a continuación.

Utilizando la segunda ley de Newton, la ecuación que rige para este sistema se convierte en:
(1)
donde u es la fuerza generada entre la interfaz carretera / neumático y se puede controlar directamente. Para
este ejemplo, supongamos que
m = 1000 kg
b = 50 N.sec / m
u = 500 N
Construyendo el modelo
Este sistema se modelará sumando las fuerzas que actúan sobre la masa e integrando la aceleración para
dar la velocidad. Abre Simulink y abre una nueva ventana de modelo. Primero, modelaremos la integral de la
aceleración.

(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 "vdot" y la línea de salida "v" como se muestra a continuación. Para
agregar una etiqueta de este tipo, haga doble clic en el espacio vacío justo encima de la línea.
Dado que la aceleración (dv / dt) es igual a la suma de las fuerzas divididas por la masa, dividiremos la señal
entrante por la masa.
 Inserte un bloque de ganancia (de la biblioteca de operaciones matemáticas) conectado a la línea de
entrada del bloque de integración y dibuje una línea que conduzca a la entrada del bloque de ganancia.
 Edite el bloque de ganancia haciendo doble clic en él y cambie su valor a "1 / m".
 Cambie la etiqueta del bloque de Ganancia a "inercia" haciendo clic en la palabra "Ganancia" debajo
del bloque.
Ahora, agregaremos las fuerzas que están representadas en la ecuación (1). Primero, agregaremos la fuerza
de amortiguación.
 Adjunte un bloque Sum (de la biblioteca de operaciones matemáticas) a la línea que conduce al
bloque de ganancia de inercia.
 Cambia los signos del bloque Sum a "+ -".
 Inserta un bloque de ganancia debajo del bloque de inercia, selecciónalo haciendo un solo clic sobre
él, y selecciona Voltear bloque en el menú Girar e Invertir (o escribe Ctrl-I ) para voltearlo de izquierda
a derecha.
 Establezca el valor del bloque en "b" y cambie el nombre de este bloque a "amortiguación".
 Toque una línea (mantenga presionada la tecla Ctrl durante el dibujo) fuera de la salida del bloque
del integrador y conéctela a la entrada del bloque de ganancia de amortiguación.
 Dibuje una línea desde la salida del bloque de ganancia de amortiguación a la entrada negativa del
bloque de suma.
La segunda fuerza que actúa sobre la masa es la entrada de control, u. Aplicaremos una entrada por pasos.
 Inserte un bloque de pasos (de la biblioteca de Fuentes) y conéctelo con una línea a la entrada
positiva del bloque de suma.
 Para ver la velocidad de salida, inserte un bloque de Scope (desde la biblioteca de Sinks) conectado
a la salida del integrador.
 Para proporcionar una entrada de paso apropiada de 500 en el tiempo igual a cero, haga doble clic
en el Bloque de pasos y establezca el Tiempo de paso en "0" y el Valor final en "u".
Puede descargar un archivo de modelo para el sistema completo haciendo clic 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 en el menú Simulación e ingrese "120" en el campo Tiempo de paro. 120
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:

m = 1000;
b = 50;
u = 500;

Ejecute la simulación (presione Ctrl-T o seleccione Ejecutar desde el menú de Simulación ). Cuando finalice
la simulación, debería ver la siguiente salida.
Observando lo anterior, nos gustaría mejorar la respuesta del sistema de control de crucero. El modelo creado
aquí se empleará para el diseño y análisis de controladores dentro de Simulink en la página Cruise Control:
Simulink Controller Design .
1.9 Simulink Controller Design

Contenido
 Extrayendo un modelo lineal en MATLAB
 Implementando el control PI
 Respuesta de circuito cerrado
En la página Cruise Control: Simulink Modeling creamos un modelo Simulink del sistema de control de
crucero. Puede volver a crear el modelo o descargarlo haciendo clic derecho aquí y seleccionando Guardar
enlace como . En esta sección, mostraremos cómo implementar un controlador de realimentación en
Simulink para cumplir con las especificaciones de rendimiento para el sistema.
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 .
 Reemplace el Bloque de pasos y el Bloque de alcance con un bloque In1 y un bloque Out1,
respectivamente (estos bloques se pueden encontrar en la biblioteca Puertos y subsistemas). Esto define
la entrada y salida del sistema para el proceso de extracción.

Guarde su archivo como "ccmodel.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:

m = 1000;
b = 50;
u = 500;
[A, B, C, D] = linmod ( 'ccmodel' )
cruise_ss = ss (A, B, C, D);

A =
-0.0500
B =
1.0000e-03
C =
1
D =
0
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. Multiplicaremos el numerador por 500 para simular una entrada por pasos
de 500 N. Ingrese el siguiente comando en MATLAB.

paso (u * cruise_ss)

Implementando el control PI
En la página Cruise Control: PID Control , se diseñó un controlador PI con y para dar la
respuesta deseada. Implementaremos esto en Simulink al contener primero 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 Puertos y subsistemas a la ventana de su
nuevo modelo.
 Haga doble clic en este bloque. Verá una ventana en blanco que representa los contenidos del
subsistema (que está actualmente vacío).
 Abra su modelo previamente guardado del sistema de control de crucero, ccmodel.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. Cierra
esta ventana.
 Ahora debería ver los terminales de entrada y salida en el bloque del subsistema. Nombre este
bloque "modelo de planta".
Ahora, construiremos un controlador PI alrededor del modelo de la planta. Primero, retroalimentaremos la
producción de la planta.
 Dibuje una línea que se extienda desde la salida de la planta.
 Inserta un bloque Sum y asigna "+ -" a sus entradas.
 Toque una línea de la línea de salida y dibújela a la entrada negativa del bloque Sum.

La salida del bloque Sum proporcionará la señal de error. A partir de esto, generaremos componentes
proporcionales e integrales.
 Inserta un bloque de Integrador después del bloque Sum y conéctalos con una línea.
 Inserte y conecte un bloque de ganancia después del bloque de integración para proporcionar la
ganancia integral.
 Etiquete este integrador "Ki" y asígnele un valor de "Ki".
 Inserta un nuevo bloque de Ganancia y conéctalo con una línea que sale de la salida del bloque
Sum.
 Marque esta ganancia "Kp" y asígnele un valor de "Kp".
Ahora agregaremos los componentes proporcionales e integrales y aplicaremos la suma a la planta.
 Inserte un bloque Sum entre el bloque Ki y el modelo de planta y conecte las salidas de los dos
bloques de ganancia a las entradas del bloque Sum.
 Conecte la salida del bloque Sum a la entrada del bloque de la planta.

Finalmente, aplicaremos una entrada por pasos y veremos la salida con un bloque de Scope.
 Adjunte un bloque de pasos a la entrada libre del bloque Sum de retroalimentación.
 Adjunte un bloque de alcance a la salida de la planta.
 Haga doble clic en el bloque de pasos y configure Step Time en "0" y el valor final en "u". Esto
permite que la magnitud de entrada se modifique fuera de Simulink.
Puede descargar nuestra versión del modelo de sistema de circuito cerrado haciendo clic aquí y
seleccionando Guardar enlace como .
En este ejemplo, construimos un controlador PI a partir de bloques fundamentales. Como alternativa,
podríamos haber utilizado un bloque de función de transferencia (de la biblioteca continua) para implementar
esto en un solo paso, como se muestra a continuación.

Puede descargar este modelo haciendo clic aquí y seleccionando Guardar enlace como .
Respuesta de circuito cerrado
Para simular este sistema, primero, se debe establecer un tiempo de simulación
apropiado. Seleccione Parámetros en el menú Simulación e ingrese "10" en el campo Tiempo de paro. Los
requisitos de diseño incluyen un tiempo de subida de menos de 5 segundos, por lo que simulamos durante 10
segundos para ver la salida. Los parámetros físicos ahora deben establecerse. Ejecute los siguientes
comandos en el indicador de MATLAB:

m = 1000;
b = 50;
r = 10;
Kp = 800;
Ki = 40;

Ejecute la simulación (presione Ctrl-T o seleccione Ejecutar desde el menú de Simulación ). Cuando finalice
la simulación, debería ver la siguiente salida.