Skip to content

Repository files navigation

Simulación y Control de Actuador Lineal PMDC

Modelado en espacio de estados, diseño de observador de Luenberger y simulación programática del actuador lineal LINAK LA 20 (80 mm, 2500/800 N) con motor PMDC, implementado en MATLAB/Simulink.


Descripción del sistema

El actuador es modelado como un sistema lineal de tercer orden con tres subsistemas acoplados:

Dinámicas mecánica, eléctrica y cinemática del motor:

$$\dot{x} = Ax + B_c v_a + B_d T_c, \quad y = Cx$$

donde el vector de estados es $x = [\omega_m,; i_a,; \theta_m]^T$:

Variable Descripción Unidad
$\omega_m$ Velocidad angular del rotor rad/s
$i_a$ Corriente del devanado de armadura A
$\theta_m$ Posición angular del rotor rad

Entradas:

  • $v_a$ — tensión de armadura (entrada de control)
  • $T_c$ — torque de carga referido al motor (perturbación)

Salida medida: $y = \theta_m$ (encoder en el rotor)

El modelo incluye efectos térmicos: la resistencia de armadura $R_a$ varía con la temperatura del estator $T_s$ mediante el coeficiente $\alpha_{Cu}$, y la dinámica térmica $T_s$ es simulada explícitamente en Simulink.


Estructura del proyecto

├── run.m                                      ← Punto de entrada principal
├── run_flags.m                                ← Flags de configuración de ejecución
│
├── physical_model.m                           ← Modelo en espacio de estados (A, B, C, D)
├── motor_load_params.m                        ← Parámetros físicos del motor y la carga
├── simulation_params.m                        ← Parámetros de simulación (paso, duración)
├── actuator_params.m                          ← Datos de la hoja de datos LINAK LA 20
│
├── polos_controlabilidad_observabilidad_LA.m  ← Análisis de polos, controlabilidad y observabilidad
├── RCE.m                                      ← Diseño del observador de estado completo (Ackermann)
│
├── scenarios.m                                ← Simulación programática multi-escenario
├── adjustment.m                               ← Script de ajuste manual de parámetros
├── load_excel.m                               ← Carga y graficado de resultados desde Excel
│
├── modeloslx.slx                              ← Modelo Simulink
└── scenario_outputs/                          ← Resultados de simulaciones (.xlsx)

Flujo de ejecución

run.m
 ├── physical_model.m          → construye A, B, C, D
 ├── run_flags.m               → configura flags
 ├── polos_controlabilidad_observabilidad_LA.m   → verifica controlabilidad/observabilidad
 ├── RCE.m                     → calcula ganancia del observador K_o (Ackermann)
 ├── [RUN_ADJUSTMENT] adjustment.m   → ajuste de curvas carga-corriente
 ├── [RUN_SCENARIOS]  scenarios.m    → simulación programática + exporta Excel
 └── [RUN_LOAD_EXCEL] load_excel.m   → carga y grafica resultados previos

Requisitos

  • MATLAB R2021a o superior
  • Simulink
  • Control System Toolbox (funciones ss, acker, ctrb, obsv)

Cómo ejecutar

  1. Abrir MATLAB en el directorio del proyecto.
  2. Configurar los flags de ejecución en run_flags.m:
    RUN_ADJUSTMENT = 0;  % ajuste manual de parámetros
    RUN_SCENARIOS  = 1;  % simulación programática (guarda Excel)
    RUN_LOAD_EXCEL = 0;  % visualización de resultados previos
    PRINT_GRAPHS   = 1;  % habilitar gráficas
    PRINT_MESSAGES = 1;  % habilitar mensajes en consola
  3. Ejecutar run.m.

Nota: La simulación completa (RUN_SCENARIOS = 1) puede tardar varios minutos. Los resultados se guardan automáticamente en scenario_outputs/scenario_outputs_YYYY_MM_DD_HH_mm_ss.xlsx.


Contenido técnico

Modelo en espacio de estados

La matriz de estados incorpora las dinámicas acopladas electromagnética-mecánica:

$$A = \begin{bmatrix} -\frac{b_2 + b_1/i_g^2}{J_m + J_{eq}/(i_g^2 r_{ef}^2)} & \frac{k_t}{J_m + J_{eq}/(i_g^2 r_{ef}^2)} & 0 \ -\frac{k_e}{L_a} & -\frac{R_a}{L_a} & 0 \ 1 & 0 & 0 \end{bmatrix}$$

Observador de estado (Luenberger)

Dado que solo se mide la posición angular $\theta_m$, se diseña un observador de orden completo mediante la fórmula de Ackermann. Los polos del observador se ubican significativamente más rápido que los polos del sistema en lazo cerrado.

$$\dot{\hat{x}} = A\hat{x} + Bu + K_o(y - C\hat{x})$$

Control de corriente

Se implementa un controlador proporcional de corriente de armadura con ganancia $R_g = -p_g \cdot L_a$, donde $p_g$ es el polo de lazo cerrado deseado.

Escenarios de simulación

scenarios.m evalúa combinaciones de:

Variable Escenarios
Consigna de posición $y_{cons}$ Escalón, rampas, sigmoide (extensión/retracción)
Temperatura ambiente −150 °C a +150 °C (variaciones lineales)
Temperatura inicial del estator −150 °C a +150 °C
Torque de carga Rampa lineal, escalón, pulso
Posición inicial del motor 0%, 33%, 66%, 100% del recorrido

Variables registradas

Cada simulación exporta 13 señales de salida:

# Variable Descripción
1 $y_{smooth}$ Consigna suavizada de posición lineal
2 $\dot{y}$ Velocidad lineal de referencia
3 $\ddot{y}$ Aceleración lineal de referencia
4 $\theta_m^*$ Posición angular de referencia
5 $\theta_{m,sens}$ Posición angular medida (encoder)
6 $\theta_{m,obs}$ Posición angular estimada (observador)
7 $\omega_m^*$ Velocidad angular de referencia
8 $\omega_{m,obs}$ Velocidad angular estimada (observador)
9 $T_m$ Torque del motor
10 $i_{a,obs}$ Corriente estimada (observador)
11 $i_a$ Corriente de armadura (simulación)
12 $T_s$ Temperatura del estator
13 $R_a$ Resistencia de armadura (dependiente de $T_s$)

Contexto académico

Proyecto desarrollado en el marco de una pasantía en el Área de Control y Potencia — Facultad de Ingeniería, Universidad de la República (FING, Uruguay).

About

Modeling, state-space analysis, observer design, and multi-scenario simulation of a LINAK LA 20 linear actuator with a PMDC motor in MATLAB/Simulink. Implements a Luenberger observer via Ackermann's formula, proportional current control, thermal stator dynamics, and batch export of simulation results to Excel.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages