Skip to content

Repository files navigation

CONTROL_BDC

Material didáctico del curso de Control Discreto (Ingeniería Electrónica) — usando un Motor BDC (Brushed DC Motor) como planta de referencia para integrar teoría y simulación.

MATLAB Simulink License: MIT


Tabla de Contenidos

  1. Descripción
  2. Estructura del Repositorio
  3. Hoja de Ruta del Curso
  4. Modelo de la Planta
  5. Requisitos
  6. Cómo Ejecutar los Ejemplos
  7. Soporte Teórico
  8. Autor
  9. Licencia

Descripción

Este repositorio reúne todos los recursos utilizados para dictar el curso, organizados por bloque temático. Cada bloque combina:

  • Teoría: archivo Markdown en docs/ con desarrollo matemático en LaTeX.
  • Simulación: scripts MATLAB (.m) y modelos Simulink (.slx).
  • Material complementario: PDFs de apoyo.

El hilo conductor es el diseño y validación de controladores digitales (PID, asignación de polos en espacio de estados, anti-windup) sobre un motor BDC. A partir de la sección 02 se utiliza el modelo de estados 3×3 del motor y se controla la posición angular del eje (θ).

Además, el repositorio incluye una implementación embebida en Arduino del PID digital de posición con anti-windup para banco real en 12 V.


Estructura del Repositorio

CONTROL_BDC/
├── README.md                            ← este archivo
├── .gitignore
├── docs/                                ← apuntes teóricos en Markdown
│   ├── 00_indice.md
│   ├── 01_modelado_motor_bdc.md
│   ├── 02_control_espacio_estados.md
│   ├── 03_dominio_z.md
│   ├── 04_transformacion_s_a_z.md
│   ├── 05_pid_digital.md
│   ├── 06_anti_windup.md
│   ├── 07_control_estados_digital.md
│   ├── 08_observador_estados.md
│   ├── 09_control_lqr.md
│   ├── 25_1_windowing.md
│   ├── 25_2_convolucion.md
│   └── 25_3_fir_iir.md
├── 01_modelado_motor_bdc/               ← Modelo del motor (2×2 velocidad)
│   ├── bdc_motor_src.m
│   ├── bdc_motor_sim.slx
│   └── Modelo de Motor BDC.pdf
├── 02_control_espacio_estados/          ← Asignación de polos (continuo, 3×3 posición)
│   ├── pp_control_src.m
│   └── pp_control_sim.slx
├── 03_dominio_z/                        ← Transformada Z, muestreo y estabilidad
│   ├── Z_Stability.m
│   ├── Z_CloseLoop.m
│   ├── Repaso Z.pdf
│   └── Sampling and Hold.pdf
├── 04_transformacion_s_a_z/             ← Discretización de plantas (S → Z)
│   ├── S2Z_1_.m
│   ├── S2Z_2_.m
│   └── S2Z_1_Sim.slx
├── 05_pid_digital/                      ← PID en dominio Z (3×3 posición)
│   ├── pid_bdc_z.m
│   └── pid_bdc_z_sim.slx
├── 06_anti_windup/                      ← Saturación + back-calculation (3×3 posición)
│   └── pid_windup_z.m
├── 07_control_estados_digital/          ← Asignación de polos en Z (3×3 posición)
│   └── pp_control_zrc.m
├── 08_observador_estados/               ← Observador Luenberger en Z (3×3 posición)
│   └── obs_control_z.m
├── 09_control_lqr/                      ← Control LQR discreto (3×3 posición)
│   └── lqr_bdc_z.m
├── 24_arduino_example/                  ← Implementación embebida Arduino (PID + AW)
│   ├── README.md
│   └── arduino_pid/
│       └── arduino_pid.ino
└── 25_filtros_digitales/                ← Complemento DSP en Python (filtrado de sensores)
    ├── Windowing_1_/                     ← 25.1 Ventaneo y leakage espectral
    │   ├── signal_test.py
    │   ├── windowing.py
    │   └── different_windows.py
    ├── Convolution_2_/                   ← 25.2 Convolución discreta (FIR manual)
    │   ├── convolve.py
    │   ├── limited_buffer.py
    │   ├── my_convolution.py
    │   └── zero_pad.py
    └── FIR_IIR_3_/                       ← 25.3 Diseño de filtros FIR e IIR
        ├── fir.py
        └── iir.py

Hoja de Ruta del Curso

Clase Tema Carpeta Apunte
1 Modelado del motor BDC (2×2 velocidad) 01_modelado_motor_bdc/ docs/01
2 Control por asignación de polos en continuo (3×3 posición) 02_control_espacio_estados/ docs/02
3 Repaso transformada Z, muestreo y estabilidad 03_dominio_z/ docs/03
4 Transformación S → Z (ZOH, Tustin, Impulse, etc.) 04_transformacion_s_a_z/ docs/04
5 PID digital sobre el motor BDC 05_pid_digital/ docs/05
6 Saturación del actuador y anti-windup 06_anti_windup/ docs/06
7 Asignación de polos en Z (control digital de estados) 07_control_estados_digital/ docs/07
8 Observador de estados (Luenberger) en Z 08_observador_estados/ docs/08
9 Control LQR discreto (cuadrático óptimo) 09_control_lqr/ docs/09
24 Implementación embebida Arduino (PID + anti-windup) 24_arduino_example/ README 24
25.1 DSP — Ventaneo (windowing) y leakage espectral 25_filtros_digitales/Windowing_1_/ docs/25.1
25.2 DSP — Convolución discreta (FIR manual) 25_filtros_digitales/Convolution_2_/ docs/25.2
25.3 DSP — Filtros FIR e IIR 25_filtros_digitales/FIR_IIR_3_/ docs/25.3

Modelo de la Planta

  • Sección 01 — Modelado introductorio: modelo de 2×2 con estados $x = [i_a,,\omega]^T$ (corriente y velocidad). Parámetros didácticos: $R_a = 0{,}5,\Omega$, $L_a = 0{,}5,\text{H}$, $K = 0{,}01$, $J_e = 0{,}01,\text{kg·m}^2$, $B_e = 0{,}1,\text{N·m·s}$.
  • Secciones 02 → 09: se extiende a 3×3 agregando $x_3 = \theta$ con $\dot{x}_3 = \omega$. La salida controlada es la posición angular del eje ($C = [0;0;1]$).
  • Parámetros del motor real usados en las secciones 05–09:
Símbolo Descripción Valor
$R_a$ Resistencia de armadura 11 Ω
$L_a$ Inductancia de armadura 0.008 H
$K_b = K$ Constante FEM/torque 0.0014
$J_e$ Inercia equivalente 7.56 × 10⁻⁴ kg·m²
$B_e$ Fricción viscosa 1.0 × 10⁻⁵ N·m·s
$V_{\max}$ Saturación del driver (puente H) ±24 V

Requisitos

  • MATLAB ≥ R2024b con los toolboxes:
    • Control System Toolbox
    • Signal Processing Toolbox
  • Simulink ≥ R2024b para los modelos *.slx.
  • Python ≥ 3.9 (solo para los ejemplos DSP de la sección 25):
    • numpy, matplotlib, scipy
    • Instalación rápida: pip install numpy matplotlib scipy
  • Arduino IDE / Arduino CLI (solo para 24_arduino_example/):
    • Board ejemplo: arduino:avr:uno
    • Monitor serial: 115200 baudios

Cómo Ejecutar los Ejemplos

% Ejemplo: control PID discreto del motor BDC
cd('05_pid_digital')
pid_bdc_z
# Ejemplo: implementación Arduino (IDE)
Abrir: 24_arduino_example/arduino_pid/arduino_pid.ino
Compilar para: arduino:avr:uno
Subir y abrir monitor serial a 115200

Cada script es autónomo (clear; clc; close all al inicio) y abre sus propias figuras. Los modelos Simulink se abren con doble clic o con open_system('nombre.slx').


Soporte Teórico

Toda la fundamentación matemática está en la carpeta docs/, redactada en Markdown con ecuaciones LaTeX. El documento maestro es el índice.

Los apuntes están pensados para leerse antes de cada clase y volver durante el laboratorio para consultar fórmulas y procedimientos.


Autor

Ing. Maximiliano Vega Cátedra de Control Discreto — Ingeniería Electrónica


Licencia

Este material se distribuye bajo licencia MIT para uso académico y profesional. Se agradece citar la fuente.

About

Curso práctico de control digital aplicado al motor BDC: modelado en espacio de estados, dominio Z, PID digital con anti-windup, asignación de polos, observador y LQR. Incluye scripts MATLAB/Simulink, complemento de DSP en Python y apuntes paso a paso en docs.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages