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.
- Descripción
- Estructura del Repositorio
- Hoja de Ruta del Curso
- Modelo de la Planta
- Requisitos
- Cómo Ejecutar los Ejemplos
- Soporte Teórico
- Autor
- Licencia
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.
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
| 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 |
-
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 |
|---|---|---|
| Resistencia de armadura | 11 Ω | |
| Inductancia de armadura | 0.008 H | |
| Constante FEM/torque | 0.0014 | |
| Inercia equivalente | 7.56 × 10⁻⁴ kg·m² | |
| Fricción viscosa | 1.0 × 10⁻⁵ N·m·s | |
| Saturación del driver (puente H) | ±24 V |
- 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
- Board ejemplo:
% 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').
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.
Ing. Maximiliano Vega Cátedra de Control Discreto — Ingeniería Electrónica
Este material se distribuye bajo licencia MIT para uso académico y profesional. Se agradece citar la fuente.