- Autor: Johnny Liu, director ejecutivo de Dowway Vehicle
- Fecha de publicación: 29 de abril de 2026
- Categoría: Sistemas de control / Ingeniería automotriz / Simulación
Acerca del autor
Soy Johnny Liu, el director ejecutivo de Vehículo Dowway. Desarrollamos sistemas de propulsión de energía limpia y dinámica vehicular inteligente. Durante más de veinte años, me he dedicado a la suspensión activa de automóviles, la dirección electrónica y la seguridad del chasis. En nuestro taller, nunca fabricamos una pieza física sin antes probarla virtualmente.
Simulink nos ayuda a lograrlo. Nos permite realizar pruebas de seguridad y ensayar nuevos algoritmos de control antes de realizar cualquier trabajo de mecanizado. En esta guía, compartiré los flujos de trabajo exactos que utilizamos para modelar, analizar y controlar sistemas dinámicos.
Table of Contents
Parte 1: Teoría de los sistemas de control
Debemos comprender las matemáticas antes de empezar a mover bloques. La teoría de control divide los modelos en tres formas principales.
1.1 Modelado matemático
Un modelo dinámico muestra cómo cambian el estado y las salidas de un sistema con el tiempo cuando se aplica una entrada.
1. Modelos de entrada-salida
- Ecuaciones diferenciales: Estas fórmulas describen las leyes físicas del sistema en el dominio del tiempo. Algunos ejemplos son los sistemas masa-resorte o las redes eléctricas.
- Funciones de transferencia (FT): Obtenemos estas ecuaciones aplicando la transformada de Laplace a ecuaciones diferenciales lineales e invariantes en el tiempo (LTI), suponiendo que todas las condiciones iniciales son cero: $$G(s) = \frac{Y(s)}{U(s)} = \frac{b_m s^m + b_{m-1} s^{m-1} + \dots + b_0}{a_n s^n + a_{n-1} s^{n-1} + \dots + a_0}$$
- Características de frecuencia: Obtenemos estos resultados intercambiando $s$ con $j\omega$ en la función de transferencia. Esto muestra cómo responde el sistema a entradas sinusoidales a diferentes velocidades.
2. Modelos de espacio de estados
La teoría de control moderna utiliza modelos de espacio de estados. En lugar de tratar el sistema como una caja oculta, hacemos un seguimiento de variables internas llamadas estados. Estos estados definen la energía y el comportamiento del sistema en cualquier momento: $$\dot{x}(t) = Ax(t) + Bu(t)$$$$y(t) = Cx(t) + Du(t)$$
Dónde:
- $x(t)$ es el vector de estado.
- $u(t)$ es el vector de entrada.
- $y(t)$ es el vector de salida.
- $A$ es la matriz del sistema (rige la dinámica interna).
- $B$ es la matriz de entrada (muestra cómo las entradas afectan a los estados).
- $C$ es la matriz de salida (asigna los estados a las salidas medidas).
- $D$ es la matriz de paso directo.
A continuación se muestra una comparación entre las funciones de transferencia y los modelos de espacio de estados:
| Característica | Función de transferencia (FT) | Espacio de estados (SS) |
|---|---|---|
| Compatibilidad del sistema | Solo funciona para configuraciones de entrada única y salida única (SISO) y lineales invariantes en el tiempo (LTI). | Funciona con configuraciones de entrada múltiple y salida múltiple (MIMO), no lineales y variables en el tiempo. |
| Unicidad | Único para cualquier par de entrada-salida dado. | No único. Puedes elegir diferentes estados, lo que cambia tus matrices. |
| Lo completo | Solo muestra el controlable partes. Las cancelaciones de polos y ceros ocultan dinámicas ocultas. | Lo muestra todo. Lo cubre todo. tanto controlables como incontrolables partes, más partes observables y no observables. |
| Cálculo | Utiliza álgebra en el dominio de la frecuencia. | Adecuado para ordenadores y solucionadores de álgebra lineal. |
3. Diagramas de bloques
Conectamos sistemas físicos utilizando tres diseños sencillos:
- Serie (Cascada): Las funciones de transferencia se multiplican: $G_{\text{total}}(s) = G_1(s) \cdot G_2(s)$
- Paralelo: Las funciones de transferencia se suman: $G_{\text{total}}(s) = G_1(s) + G_2(s)$
- Comentario: La fórmula para la retroalimentación de lazo cerrado $H(s)$ es: $$G_{\text{cerrado}}(s) = \frac{G(s)}{1 \mp G(s)H(s)}$$
Indicadores de rendimiento del sistema
Cuando realizamos pruebas de escalón, evaluamos el rendimiento transitorio utilizando cuatro números:
- Sobrepaso ($M_p$): El valor máximo comparado con el valor estable final, expresado como porcentaje: $$M_p = \frac{y(t_p) – y(\infty)}{y(\infty)} \times 100\%$$
- Tiempo de asentamiento ($t_s$): El tiempo que tarda el sistema en estabilizarse y mantenerse dentro de un pequeño margen de error (normalmente del 2 % o del 5 %) de su valor final.
- Hora punta ($t_p$): El tiempo necesario para alcanzar el primer pico de sobreimpulso.
- Tiempo de subida ($t_r$): El tiempo que se tarda en pasar del 10 % al 90 % (o del 0 % al 100 %) del valor final.
1.2 Métodos de análisis
Tenemos que comprobar la estabilidad de un sistema antes de construir un controlador.
1. Análisis en el dominio del tiempo
Aplicamos señales de prueba estándar al sistema. Estas incluyen: impulso unitario, paso unitario, rampa de la unidad, aceleración unitaria, o ondas sinusoidales unitarias.
- Regla de estabilidad: Un sistema LTI es estable si todos sus polos (las raíces del denominador) tienen partes reales negativas. Si tan solo un polo se encuentra en el lado derecho del plano s, el sistema colapsará.
- Herramientas de MATLAB:
zpk: Define un sistema de cero polos y ganancia.raíces: Encuentra las raíces de tu denominador para comprobar la ubicación de los polos.
2. Análisis del lugar de las raíces
Representamos gráficamente cómo se mueven los polos del lazo cerrado en el plano s a medida que cambiamos la ganancia ($K$) de $0$ a $\infty$.
- Para que exista cualquier punto de la gráfica, deben coincidir dos reglas:
- Condición de magnitud: $|KG(s)H(s)| = 1$
- Condición de fase: $\angle G(s)H(s) = (2k+1)\pi$
- Herramientas de MATLAB: Usar
rlocus(sys)para trazar las líneas. Siempre utiliceeje igualJusto después, los ejes horizontal y vertical usan la misma escala. Esto hace que los ángulos se vean correctos.
3. Análisis en el dominio de la frecuencia
Comprobamos cómo un sistema gestiona ondas sinusoidales constantes a diferentes frecuencias.
- Las tramas:
- Diagrama de Nyquist: Un gráfico polar de $G(j\omega)$ en función de la frecuencia ($\omega$) va desde $-\infty$ hasta $+\infty$.
- Trazado de Bode: Dos gráficos separados. El superior muestra la magnitud en decibelios ($20\log_{10}|G(j\omega)|$). El inferior muestra el ángulo de fase en grados.
- Trama de Nichols: Esto coloca ambos gráficos de Bode en una sola pantalla. Representa los decibelios directamente en función del ángulo de fase, utilizando la frecuencia como un marcador oculto a lo largo de la línea.
- Herramientas de MATLAB: Usar
nyquist(),presagiar(), ynichols(). - Cifras clave: Pico de resonancia ($M_r$), frecuencia de resonancia ($\omega_r$), ancho de banda y ganancia de frecuencia cero.
- Comprobaciones de estabilidad (Regla de Nyquist): Su sistema es estable si la línea de Nyquist rodea el punto $(-1, j0)$ en sentido antihorario $N$ veces, donde $N$ es igual a su número de polos inestables de lazo abierto ($P$).
- Margen de ganancia ($G_M$): ¿Cuánta ganancia adicional se puede agregar antes de que el sistema se vuelva inestable?
- Margen de fase ($\Phi_M$): El retardo de fase adicional necesario para desestabilizar el sistema.
- Comando de MATLAB:
margen(sys)Calcula estos márgenes de seguridad por usted.
4. Análisis del espacio de estados
Utilizamos matrices para estudiar sistemas complejos con muchas entradas y salidas.
- Formularios estándar: Puedes asignar una única función de transferencia a diferentes configuraciones de espacio de estados utilizando una matriz de transformación ($x = Pz$). Las cuatro configuraciones principales son:
- Forma canónica controlable (Ayuda a diseñar controladores de retroalimentación de estado).
- Forma canónica observable (ayuda a construir estimadores de estado).
- Forma canónica diagonal (estados desacoplados a lo largo de la diagonal, utilizados cuando los polos son distintos).
- Forma canónica de Jordania (se utiliza cuando los polos se repiten).
- Comandos de MATLAB:
ss(),tf2ss(),zp2ss(),canon(), yJordán().
- Estabilidad de Lyapunov: Un sistema es estable si podemos encontrar una función de energía definida positiva $V(x)$ cuya derivada con respecto al tiempo, $\dot{V}(x)$, sea siempre negativa. Para sistemas lineales, resolvemos la ecuación Ecuación de Lyapunov: $$A^TP + PA = -Q$$ Si elegimos cualquier matriz definida positiva $Q$ y obtenemos una matriz definida positiva única $P$, nuestro sistema es estable.
- Comandos de MATLAB:
lyap(A, Q)olyap2()Resuelve esta ecuación.
- Comandos de MATLAB:
Parte 2: Bloques de simulación de Simulink
Ahora veamos los bloques que utilizamos para construir estos sistemas en Simulink.
2.1 La biblioteca de bloques estándar
1. Subbiblioteca continua
Aquí es donde construimos modelos de tiempo continuo.
- Bloque de espacio de estados: Calcula $\dot{x} = Ax+Bu$ y $y=Cx+Du$. Debe ingresar Matrices A, B, C y D, junto con el vector de estado inicial $x_0$.
- Bloqueo de función de transferencia: Usted ingresa al numerador (num) y denominador (den) vectores como potencias descendentes de $s$.
- Bloque de ganancia de polo cero: Usted ingresa las matrices para ceros (z), polos (p)y la constante de ganancia (K).
- Bloques de controlador PID (1 grado de libertad y 2 grados de libertad): Estos bloques calculan términos proporcionales, integrales y derivativos.
- Parámetros: Se configura el tipo de controlador, su forma (paralelo o ideal), el dominio temporal, los coeficientes ($P, I, D$) y la constante del filtro ($N$). Se pueden establecer estados de inicio y activar los límites superior e inferior. límites de saturación Para evitar que el integrador se sature. En la pestaña Tipos de datos, puede establecer límites. Por defecto, utiliza reglas heredadas sin comprobaciones de límites.
- En qué se diferencia un controlador PID de 2 grados de libertad de un controlador PID de 1 grado de libertad: Un controlador estándar de 1 grado de libertad solo considera el error $e = r – y$. PID de 2 grados de libertad El controlador separa la forma en que rastrea los comandos de la forma en que rechaza el ruido. Utiliza valores de peso $b$ y $c$ en las trayectorias proporcional y derivativa: $$u(t) = P \cdot (b \cdot r – y) + I \cdot \int (r – y) dt + D \cdot \frac{d}{dt}(c \cdot r – y)$$ Esto evita el “golpe derivativo” cuando cambias tu punto de ajuste rápidamente, manteniendo los movimientos de tu actuador suaves.
2. Subbiblioteca de discontinuidades
El hardware físico nunca es perfecto. Utilizamos estos bloques para modelar las limitaciones del mundo real:
- Bloqueo de reacción adversa: Simula el juego en marchas. Puedes configurar el ancho de banda muerta y la salida inicial.
- Bloqueo de zona muerta: La salida del bloque permanece en cero hasta que la entrada supera los límites superior o inferior establecidos.
- Bloque de saturación: Limita la salida. Tú configuras los límites superior e inferior. Siempre encendido. detección de cruce por cero De esta forma, el algoritmo encuentra el momento exacto en que la señal alcanza el límite.
3. Subbiblioteca discreta
Utilizamos estos bloques para modelar procesadores digitales y unidades de control electrónico (ECU).
- Bloque de retardo de unidad ($z^{-1}$): Mantiene el valor de entrada durante un ciclo de reloj y luego lo emite.
- Bloque de retención de orden cero (ZOH): Toma una muestra de una señal continua y mantiene su valor constante durante un tiempo de muestreo determinado ($T_s$).
¿ Consejo: Cómo afectan los ajustes del solucionador a su simulación.
Veamos qué sucede cuando usas un Retardo de la unidad bloquear:
- Si utiliza un solucionador de pasos variables (como ode45): El tamaño de los pasos del solucionador puede cambiar dinámicamente. Esto puede provocar errores de interpolación dentro de los bloques discretos, haciendo que las señales parezcan continuas cuando no deberían serlo.
- Si utiliza un solucionador de paso fijo: Configurar el solucionador en Paso fijo Con un tiempo de muestreo de 1,0 s, todo se ejecuta de forma sincronizada. El bloque Unit Delay mantiene el valor durante exactamente un segundo, creando un gráfico de escalera limpio y discreto en su osciloscopio.
2.2 Uso del bloque de sistema LTI
Si tiene un modelo lineal en su espacio de trabajo de MATLAB, puede importarlo a Simulink utilizando el Bloque del sistema LTI (Se encuentra en la Caja de herramientas del sistema de control).
- Cómo configurarlo:
- Escríbelo directamente: Introduzca el comando TF directamente en el cuadro de parámetros del bloque (como
tf([1 1],[1 5 1])). - Utilice variables del espacio de trabajo: Primero, define tu modelo en un script de MATLAB:
G1 = tf([1 1],[1 5 1]);Luego, simplemente ingreseG1en el bloque LTI. En Dowway Vehicle, utilizamos este método de script para mantener nuestros parámetros organizados. Tenga en cuenta que solo puede establecer estados iniciales si su modelo LTI está en formato de espacio de estados.
- Escríbelo directamente: Introduzca el comando TF directamente en el cuadro de parámetros del bloque (como
Parte 3: Proyectos paso a paso
Vamos a construir y poner en marcha dos sistemas prácticos.
Proyecto 1: Análisis de estabilidad de la función de transferencia
Analizaremos una función de transferencia continua para ver cómo se comporta ante entradas escalón y barridos de frecuencia.
Nuestro modelo de planta:
$$G(s) = \frac{25(s + 17)}{(s + 25)(s + 37)} = \frac{25s + 425}{s^2 + 62s + 925}$$
El script de MATLAB:
Ejecuta este script para generar tus diagramas de Bode, Nyquist y Nichols.
% Project 1: Frequency Response Analysis
clear; clc; close all;
% Define numerator and denominator
num = 25 * [1 17]; % 25s + 425
den = conv([1 25], [1 37]); % s^2 + 62s + 925
% Create Transfer Function
G = tf(num, den);
disp('System Transfer Function:');
printsys(num, den);
% Draw Bode Plot
figure(1)
bode(G)
grid on;
title('System Bode Diagram');
% Draw Nyquist Plot
figure(2)
nyquist(G)
axis equal % Keeps the scale of real and imaginary axes equal
grid on;
title('System Nyquist Plot');
% Draw Nichols Plot
figure(3)
nichols(G)
grid on;
title('System Nichols Chart');
Configuración de Simulink:
- Abra un modelo en blanco en Simulink.
- Agregar un Paso cuadra desde el Fuentes biblioteca. Establezca su tiempo de paso en $0$.
- Agregar un Función de transferencia cuadra desde el Continuo biblioteca. Establecer “Coeficientes del numerador” en
[25 425]y “coeficientes del denominador” a[1 62 925]. - Agregar un Alcance cuadra desde el fregaderos biblioteca.
- Conecta los bloques:
[Step]->[Transfer Fcn]->[Scope]. - Ejecute la simulación durante 1,0 s. El osciloscopio mostrará una respuesta escalón estable y suave, sin oscilaciones.
Proyecto 2: Control de retroalimentación de estado LQR para un péndulo invertido
Un péndulo invertido es inestable y difícil de controlar. Linealizaremos su comportamiento, verificaremos sus propiedades y diseñaremos un péndulo óptimo. Regulador lineal cuadrático (LQR) para mantener el equilibrio.
Nuestro vector estatal:
$$x = \begin{bmatrix} x & \theta & \dot{x} & \dot{\theta} \end{bmatrix}^T$$
Donde $x$ es la posición del carro, $\theta$ es el ángulo del péndulo, $\dot{x}$ es la velocidad del carro y $\dot{\theta}$ es la velocidad angular.
Matrices linealizadas (inestables en lazo abierto):
$$A = \begin{bmatrix} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & -0.524 & -3.129 & 0 \\ 0 & -15.332 & 9.012 & -0.562 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 0 \\ 81.23 \\ -120.1 \end{bmatrix}$$$$C = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & $$ 0 \end{bmatrix}, \quad D = \begin{bmatrix} 0 \\ 0 \end{bmatrix}$$
Esto es un MIMO sistema. La entrada es la fuerza ($u$). Las salidas son la posición del carro ($x$) y el ángulo de inclinación del péndulo ($\theta$).
El script de optimización de MATLAB:
Ejecuta este código para calcular tu matriz de retroalimentación LQR $K$.
% Project 2: Inverted Pendulum LQR Design
clear; clc; close all;
% System Matrices
A = [0, 0, 1, 0;
0, 0, 0, 1;
0, -0.524, -3.129, 0;
0, -15.332, 9.012, -0.562];
B = [0;
0;
81.23;
-120.1];
C = [1, 0, 0, 0; % Output 1: Cart Position
0, 1, 0, 0]; % Output 2: Pendulum Angle
D = [0;
0];
% Create state-space model
sys = ss(A, B, C, D);
% Calculate eigenvalues
E = eig(A);
fprintf('Open-Loop Eigenvalues:\n');
disp(E);
% Test Controllability
OC = ctrb(A, B);
N_C = rank(OC);
fprintf('Controllability Rank: %d\n', N_C);
% Test Observability
OB = obsv(A, C);
N_B = rank(OB);
fprintf('Observability Rank: %d\n', N_B);
% LQR Tuning Matrices
Q = diag([10, 0.01, 0.01, 0.1]);
R = 45;
N = 0;
% Compute feedback gain matrix K
[K, S, e] = lqr(sys, Q, R, N);
fprintf('Calculated LQR Feedback Gain Matrix K:\n');
disp(K);
% Create Closed-Loop System (u = -Kx)
sysT = ss(A - B*K, B, C, D);
% Plot closed-loop step response
figure(1)
step(sysT)
grid on;
legend('Cart Position (x)', 'Pendulum Angle (theta)');
title('Closed-Loop LQR Step Response');
Los valores propios en lazo abierto muestran que el sistema original es inestable. Las matrices de controlabilidad y observabilidad tienen un rango de $4$. Esto significa que nuestro sistema es totalmente controlable y observable, lo que nos permite construir un controlador LQR.
Implementación en Simulink:
Para ejecutar este modelo en Simulink:
- Agregar un Espacio de estados Bloque de la biblioteca continua.
- Configura sus parámetros:
- Colocar A a
A - B*K. - Colocar B a
B. - Colocar do a
do. - Colocar D a
D. (Asegúrese de que su script de MATLAB se haya ejecutado previamente para que estas variables estén activas en su espacio de trabajo).
- Colocar A a
- Conectar un Paso bloque al puerto de entrada.
- Conectar un Alcance bloque al puerto de salida.
- Ejecuta la simulación. Tu osciloscopio trazará dos líneas. La posición del carro se estabiliza suavemente y el ángulo del péndulo vuelve a 0° (posición vertical) tras un breve y controlado movimiento.
Lista de verificación de Johnny para sistemas de control seguros
Para finalizar, aquí está mi lista de verificación personal para construir bucles de control en Simulink:
- Prueba primero la controlabilidad: Antes de perder horas ajustando las ganancias para una planta compleja, ejecute
ctrben MATLAB. Si el rango es demasiado bajo, ningún algoritmo podrá estabilizar su sistema. - Elija el solucionador adecuado: Para sistemas con bloques no lineales como Saturación o Reacción, encender Detección de cruce por cero. Utilice solucionadores de paso variable (como
ode45) para realizar pruebas rápidas, pero cambie a un solucionador de paso fijo cuando esté listo para compilar el código para el hardware real. - Mantén tus variables en un solo lugar: Nunca introduzca números directamente en los campos de parámetros de Simulink. Coloque toda la información en un script de inicialización centralizado de MATLAB. Esto mantendrá su trabajo limpio y organizado.
Avísame si encuentras algún problema de configuración o error en el solucionador. Deja un comentario abajo y podemos hablar de ello.




