Diseño de control vectorial para motor PMSM
Estudio en Simulink de una articulación de brazo robótico accionada por un motor síncrono de imanes permanentes: modelos no lineal y linealizados, un controlador vectorial en cascada con modulador de torque y observador, verificación contra los límites reales de los componentes, sensores e inversor no ideales, y un controlador discretizado programado en MATLAB.
Proyecto integrador académico de Automática y Máquinas Eléctricas (UNCuyo, 2025), realizado de a dos.
- MATLAB/Simulink
- Python
- Park/Clarke (qd0)
- Vector control
- PID
- State observer
- Tustin discretisation

El problema y el plan
El objetivo es controlar la posición del eje horizontal de una articulación de un brazo robótico elemental. La articulación se comporta como un péndulo rígido bajo gravedad, accionado por un motor síncrono trifásico de imanes permanentes (PMSM) alimentado por un inversor trifásico, a través de un reductor planetario 120:1. Tiene un encoder en el eje del motor, tres sensores de corriente de fase y un sensor de temperatura del estator, y la carga en el extremo del brazo puede llegar a 1,5 kg. Todo se hace en simulación con MATLAB/Simulink; no hay hardware.
Seguimos este orden:
- Modelar la física: mecánica, electromagnetismo y calor.
- Linealizar el modelo y analizar estabilidad, observabilidad y controlabilidad.
- Simular el lazo abierto y encontrar los límites de operación del motor.
- Diseñar el controlador: modulador de torque, lazo de movimiento PID y observador.
- Verificar contra los límites reales de los componentes y arreglar lo que falla.
- Reemplazar los sensores e inversor ideales por otros realistas.
- Discretizar el controlador y programarlo como código.

Modelo físico
Armamos la planta en Simulink con tres subsistemas acoplados:
- Mecánica: el péndulo con su torque de gravedad y una carga variable, el reductor y el rotor, todo referido al eje del rotor como una única inercia y fricción equivalentes.
- Electromagnetismo: un PMSM de polos salientes (Ld distinto de Lq) escrito en ejes giratorios qd0 mediante la transformada de Park. En esos ejes el torque depende de las corrientes q y d, y las tres magnitudes de fase pasan a ser dos.
- Calor: un modelo de primer orden del estator con pérdidas en el cobre (efecto Joule), donde la resistencia del estator crece con la temperatura.
En esta etapa el inversor y los sensores son ideales (ganancia unitaria). Los límites de los componentes salen de la guía de la materia: salida del reductor de 17 Nm continuos y 45 Nm pico, corriente de estator de 0,57 A continua y 2,83 A pico, e inversor de hasta 48 V de línea (el motor admite 30).

Linealización y análisis
La planta es no lineal, así que derivamos versiones lineales para diseñar:
- Linealización jacobiana alrededor de un punto de operación de variación lenta, que da un modelo LPV (LTI si el punto es fijo).
- Linealización por realimentación no lineal: forzar la corriente del eje d a cero y tratar la temperatura como lenta hace que el motor se comporte como una máquina de corriente continua de excitación independiente. Lo llamamos modelo LTI aumentado.
A lazo abierto los dos modelos son prácticamente idénticos. El sistema es estable y subamortiguado: más carga baja la frecuencia natural y sube el amortiguamiento, y mayor temperatura corre los polos más a la izquierda. Los criterios de Kalman dicen que es controlable y observable desde la medición de posición, pero no desde la velocidad sola, por eso el controlador necesita el sensor de posición para estimar la velocidad.


Simulaciones a lazo abierto y límites del motor
Excitamos el modelo no lineal con un pulso de tensión y un doble pulso de torque de carga, y revisamos los estados internos: velocidad, corrientes, tensiones y temperatura. Un pulso de tensión en el eje d mostró los efectos de reforzamiento y debilitamiento de campo: cambia los picos de torque y las tensiones que debe entregar el inversor.
Con los límites de corriente y de tensión dibujamos después la envolvente del motor. El torque máximo es de unos 0,041 N·m hasta una velocidad base de unas 4790 rpm. Más allá, la corriente d debe volverse negativa (debilitamiento de campo) para que la tensión no sature, y el torque cae hasta el límite de velocidad de unas 6370 rpm, por debajo de las 6600 rpm nominales. La potencia mecánica máxima es de unos 20 W. Otro hallazgo: para cargas mayores a 0,5 kg el torque de gravedad en el motor supera lo que permite el límite de corriente continua, así que cubrir todo el rango de carga requeriría una mayor relación de reducción o un motor más fuerte.

Diseño del controlador
Una cascada con un lazo interno rápido para corriente y torque y un lazo externo más lento para posición y velocidad:
- Modulador de torque (interno). Primero cancela las realimentaciones naturales del motor, de modo que cada derivada de corriente dependa directamente de una tensión virtual. Comprobamos que esto solo funciona si la resistencia del estator sigue a la temperatura: con una resistencia fija se pierde la proporcionalidad. Luego un lazo de corriente proporcional por eje, que actúa como una resistencia virtual, ubica los polos en −5000 rad/s (unos 800 Hz). Por último, la consigna de torque se convierte en una corriente q, compensando por realimentación no lineal la fricción viscosa y el torque de gravedad. La consigna de corriente d queda en cero salvo que se quiera debilitar el campo.
- Lazo de movimiento (externo): un PID que convierte los errores de posición y velocidad en una consigna de torque. Ubicamos sus polos con un polinomio deseado (amortiguamiento 0,75, frecuencia natural 800 rad/s) con la inercia nominal, y vimos cómo se mueven con la carga: un brazo más pesado es más lento pero siempre estable. La acción integral da error nulo en régimen permanente y rechaza por completo una carga constante.
- Observador: un observador de orden reducido estima posición y velocidad a partir del encoder, con polos en −3200 rad/s. Ante un torque de carga constante dejaba un error permanente, así que agregamos un término integral que además estima el torque de carga. Sigue exactamente cargas constantes pero no sinusoidales, que requerirían un modelo interno.
Algunos scripts en Python reproducen los mapas de polos y calculan las ganancias del PID.

Verificación de límites: el perfil de movimiento
Primero movimos la articulación con un perfil de posición trapezoidal. Seguía bien, pero los cambios bruscos de pendiente generan escalones de velocidad, y la verificación contra los límites de los componentes falló por mucho: los picos de aceleración llegaban a unos 2,5×10⁵ rad/s², la corriente del estator tenía picos de unos 66 A contra 2,83 A admitidos, la tensión de fase de unos 2300 V contra 24 V, el torque del reductor de unos 170 N·m contra 45 N·m, y el estator se calentaba en cada pico.
En lugar de desafinar el controlador cambiamos la referencia. Un perfil polinomial de quinto grado (de reposo a reposo, 5 s por movimiento, una vuelta completa y regreso) redondea las esquinas en posición y velocidad. Los picos de aceleración bajan a unos 250 rad/s², las corrientes quedan por debajo de 0,5 A, las tensiones alrededor de 14 V, el torque del reductor está dentro de sus límites y el estator casi no se calienta.



Verificación térmica
Repetimos el ciclo de movimiento de forma continua (20 s por ciclo, con un escalón de torque de carga de 5 N·m entre 8 s y 12 s) sin carga y con la carga máxima, y miramos la temperatura del estator. A 20 °C ambiente ambos quedan por debajo del límite térmico, pero con 1,5 kg la temperatura se acerca bastante, así que un ambiente más caliente lo cruzaría. La carga máxima que se puede transportar cíclicamente sin cruzar el límite es de 1,5 kg a 20 °C, 1,45 kg a 25 °C, 1,4 kg a 30 °C, 1,3 kg a 35 °C y 1,2 kg a 40 °C. En una instalación real esto pediría refrigeración o ventilación.

Sensores e inversor no ideales
Hasta acá los sensores y el inversor eran perfectos. Los modelamos como filtros pasa-bajos (de segundo orden para los sensores de posición y de corriente y para el modulador de tensión, de primer orden para el sensor de temperatura), y agregamos saturación al modulador en sus límites de tensión.
Con componentes lentos el sistema se rompía. Con los primeros parámetros de los sensores la simulación divergía a los 0,03 s, y con un modulador de tensión lento el sistema no podía seguir las consignas: el modulador trabajaba saturado y el controlador pedía tensiones imposibles. Subir el ancho de banda del modulador a 7000 rad/s lo arregló. Cuando todo lo no ideal estuvo activo a la vez hubo que subirlos más: sensor de posición 12000 rad/s, sensor de corriente 20000 rad/s y modulador de tensión 24000 rad/s, con un sensor de temperatura de 1 s. La lección es que un lazo interno a 5000 rad/s necesita sensores e inversor mucho más rápidos, y el informe lo convierte en especificaciones mínimas para los componentes reales.


Discretización y controlador programado
Para acercarnos a una implementación real discretizamos el controlador con el método de Tustin, que convierte cada integrador en una suma trapezoidal. El período de muestreo sale del lazo más rápido, el de corriente a 5000 rad/s (unos 800 Hz): la regla de 10 a 20 veces da un mínimo de unos 84 µs, y usamos 10 µs. Se agregaron retenedores de orden cero en las señales de los sensores y en las salidas del controlador. El seguimiento, los límites y la temperatura quedan igual de bien que antes, y al hacer zoom en la posición medida se ven los escalones del muestreo.
Después reemplazamos todos los diagramas de bloques del controlador por un único bloque de función de MATLAB que contiene todo el controlador: observador, PID con anti-windup, modulador de torque, lazos de corriente, desacoplamiento y transformada de Park inversa, guardando el estado entre llamadas. Las curvas son las mismas que con el diagrama de bloques.
Resultados
El sistema final, con sensores e inversor no ideales, un controlador discretizado y el perfil de quinto grado, sigue las consignas de posición y velocidad y se mantiene dentro de los límites de tensión, corriente y torque de los componentes. En el ensayo de perturbación se aplica un escalón de torque de carga de 5 N·m entre 8 s y 12 s, sin carga y con 1,5 kg: la desviación de posición es casi imperceptible y la velocidad muestra oscilaciones cortas. Con sensores ideales, los mayores errores de estimación del observador son de unos 1,2×10⁻⁴ rad en posición y 0,75 rad/s en velocidad.


Límites y próximos pasos
- Todo es simulación: no hay hardware, el inversor es un modelo promediado y los sensores son filtros, así que el comportamiento real podría diferir.
- El accionamiento no puede cubrir todo el rango de carga de 0 a 1,5 kg en régimen continuo sin pasar el límite de corriente, y con temperatura ambiente alta hay que reducir la carga.
- La estimación del torque de carga es exacta para cargas constantes pero no para sinusoidales.
- Siguiente: incluir desde la primera etapa de modelado la dinámica real de los sensores y actuadores elegidos, y probar el controlador programado en un microcontrolador con hardware-in-the-loop.