Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Y SISTEMAS DE TELECOMUNICACIÓN
VºBº
Fecha de lectura:
Calificación:
El Secretario,
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Índice de contenidos
Resumen .............................................................................................................................................iii
Abstract ............................................................................................................................................... v
Lista de acrónimos y siglas ..............................................................................................................vii
Índice de ilustraciones ...................................................................................................................... ix
Índice de tablas ................................................................................................................................xiii
Introducción. ...................................................................................................................................... 1
1.1. Motores eléctricos: tipos y principios de funcionamiento. ................................................ 2
1.1.1. Motores de corriente alterna (CA).............................................................................. 2
1.1.2. Motores de corriente continua (CC). .......................................................................... 3
1.2. Métodos de control para motores de corriente continua sin escobillas. ............................ 7
1.2.1. Control trapezoidal o Six-Steps. ................................................................................. 8
1.2.2. Control sinusoidal..................................................................................................... 10
1.2.3. FOC (Field Oriented Control). ................................................................................ 10
1.3. Soluciones en el mercado para el control de motores de CC sin escobillas. ................... 13
1.3.1. Soluciones de Maxon................................................................................................ 13
1.3.2. Soluciones de Texas Instruments. ............................................................................ 14
1.3.3. Soluciones de ST Microelectronics. ......................................................................... 15
1.4. Elección de las herramientas de desarrollo. ..................................................................... 16
Trabajos previos al diseño del controlador. .................................................................................. 19
2.1. Configuración hardware de las tarjetas de desarrollo. ..................................................... 19
2.2. Estructura del firmware generado a partir de Motor Control Workbench. ...................... 23
2.3. Generación y pruebas de una primera versión del firmware. .......................................... 24
2.3.1. Generación del perfil del motor con ST Motor Profiler. .......................................... 24
2.3.2. Personalización del firmware mediante MCWB y generación del código. .............. 26
2.3.3. Programación de las tarjetas y pruebas. ................................................................... 29
2.4. Comunicación por puerto serie con las tarjetas de desarrollo. ........................................ 31
2.4.1. Mensajes de escritura. .............................................................................................. 31
2.4.2. Mensajes de respuesta. ............................................................................................. 34
Diseño del controlador. .................................................................................................................... 37
3.1. Estructura del controlador................................................................................................ 37
3.2. Diseño del circuito electrónico. ....................................................................................... 41
3.2.1. Alimentación de la tarjeta......................................................................................... 42
3.2.2. Bloque de control. .................................................................................................... 44
3.2.3. Medida de la corriente en las fases del motor. ......................................................... 45
3.2.4. Circuito integrado controlador para motores BLDC. ............................................... 47
3.2.5. Acondicionamiento de las señales del encóder y de los sensores Hall. ................... 48
3.2.6. Interfaz CAN y puerto serie. .................................................................................... 50
3.2.7. Medida de la temperatura y de la tensión de entrada. .............................................. 51
3.2.8. Selección de componentes pasivos........................................................................... 53
3.3. Diseño de la tarjeta de circuito impreso. ......................................................................... 53
3.3.1. Definición de las capas y dimensiones de la PCB.................................................... 53
3.3.2. Colocación de los componentes y de las serigrafías. ............................................... 55
i
Índice de contenidos
ii
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Resumen
Diseño de un controlador para motores eléctricos de
corriente continua sin escobillas
Los motores eléctricos de corriente continua sin escobillas (BLDC) son los motores que más ventajas
presentan para ser utilizados en aplicaciones de robótica móvil: bajo mantenimiento, alta eficiencia,
relación torque/velocidad prácticamente lineal, etcétera. Pero su control resulta bastante complejo,
por lo que se requiere de un sistema basado en microprocesador que lo realice.
Existen tres algoritmos de control para motores BLDC: trapezoidal, sinusoidal y FOC (Field Oriented
Control). El fin de todos ellos es calcular el instante óptimo para excitar cada una de las fases del
motor y durante cuánto tiempo deben ser excitadas; y sus diferencias residen en su complejidad, la
eficiencia y el rizado de torque que producen en el motor.
Así, el objetivo de este Proyecto Fin de Grado es el de diseñar un controlador para motores BLDC de
baja potencia que implemente un algoritmo de control. El resultado debe ser un dispositivo
completamente funcional, ya que formará parte de los robots diseñados por la empresa Star Robotics.
Además, su coste debe ser inferior al de los controladores comerciales que pueden encontrarse
actualmente en el mercado.
Nuestro diseño parte de la tarjeta X-NUCLEO-IHM07M1, del fabricante ST Microelectronics. Se trata
de una tarjeta de evaluación basada en el circuito integrado L6230, también diseñado por ST
Microelectronics, el cual es capaz de generar las corrientes para las tres fases del motor a partir de 3
señales PWM y 3 señales digitales. Estas señales son generadas por el microcontrolador
STM32L476RG, el cual ejecuta un firmware basado en el paquete STM32 MC SDK¸ también de ST
Microelectronics.
Para integrar el hardware del controlador, se ha diseñado una PCB (Printed Circuit Board) de
dimensiones reducidas (82x33 mm) y que consta de 4 capas conductoras. El objetivo con esta tarjeta
es conseguir una alta densidad de componentes, así como una alta disipación del calor generado por
la corriente consumida por los motores.
En la fase de puesta en marcha del proyecto debemos ajustar el controlador diseñado a las condiciones
reales de funcionamiento. Para ello, se han calibrado los reguladores PID que implementa el firmware
de control para ajustar las señales de acción que determinan las corrientes del motor, su velocidad y
su posición angular. Esta calibración se ha realizado con los controladores ya montados en el robot.
La modificación más importante realizada en el firmware ha sido el cálculo e implementación de una
nueva trayectoria en los cambios de posición del motor, debido a que la respuesta obtenida en los
desplazamientos largos es demasiado lenta. La solución pasa por recalcular los tiempos de cada una
de las fases del movimiento, a partir del jerk, la aceleración y la velocidad máxima que puede alcanzar
el motor.
Como punto final del proyecto, se han realizado todas las pruebas necesarias para la validación del
controlador diseñado y analizaremos las posibles modificaciones que puede sufrir este diseño en sus
futuras versiones.
iii
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Abstract
Design of a brushless direct current motor driver.
Brushless direct current (BLDC) motors are the most commonly used in mobile robotic applications.
They have many advantages over brushed motors: more efficiency, almost-linear torque/velocity
relation, low maintenance, etcetera. But they present an important disadvantage, that is their complex
control. For that, it is indispensable a microprocessor based system which executes the control
algorithm.
There are three main algorithms for controlling BLDC motors: 6-Steps, Sinusoidal and FOC (Field
Oriented Control). All of them have a common objective: to calculate the optimal instant for
commuting the excitation of each phase of the motor. The differences between them are their
complexity, their efficiency and the torque ripple generated.
Thus, the purpose of this Final Project is to develop a driver for low power BLDC motors which
implements the FOC control algorithm. This development must generate a totally useful device which
will be part of robots designed by Star Robotics. Moreover, it must be cheaper than the commercial
drivers which can be found in the market.
We take as reference the design of the X-NUCLEO-IHM07M1 board, from ST Microelectronics. This
is an evaluation board based on the integrated circuit L6230, from the same manufacturer. It is able
to generate the proper current for each motor phase from 3 PWM and three digital signals. These
signals are generated by the microcontroller STM32L476RG, which executes a firmware based on the
STM32 MC SDK.
The designed hardware is integrated on a PCB (Printed Circuit Board), whose dimensions are really
compact (82 x 33 mm). It counts with four conducting layer and its objective is to achieve a high
components density as well as a high heat dissipation due to the consumed current by the motor.
Once the driver is available, we have to adjust its parameters for the real working conditions. That
involves calibrating the PID regulators implemented on the control firmware. That regulators are the
responsible for managing the currents of the motor, its velocity and its angular position. This
calibration is made once the driver was mounted in the robot.
The most important modification performed on the firmware is the calculus and the implementation
of a new trajectory for the position displacement of the motor. In the original trajectory implemented
by ST, the motor accelerates and decelerates too slowly, so we will recalculate the duration of each
movement stage from the maximum values of jerk, acceleration and velocity that the motor can reach.
Finally, all the validation tests were made on the designed driver for guaranteeing the correct system
operation on the robot and we present some possible modifications for the next version of the driver.
v
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
vii
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Índice de ilustraciones
Ilustración 1: Estructura de un motor trifásico asíncrono. ................................................................... 3
Ilustración 2: Componentes de un motor CC con escobillas. .............................................................. 4
Ilustración 3: Representación simplificada de un motor CC con escobillas. ....................................... 4
Ilustración 4: Ejemplo de conexión de los devanados del estátor de un motor BLDC trifásico. ........ 5
Ilustración 5: Clasificación de los motores eléctricos. ......................................................................... 6
Ilustración 6: robot de la empresa Star Robotics en el que se integrará el controlador diseñado. ....... 7
Ilustración 7: Módulo de visión donde se ubicarán los controladores. ................................................ 7
Ilustración 8: Secuencia de activación de las fases del motor mediante control trapezoidal. [2] ........ 8
Ilustración 9: BEMF generado en las tres fases de un motor BLDC sin excitar. ................................ 9
Ilustración 10: Tabla de verdad para excitar las fases en el control 6-steps con sensores Hall. .......... 9
Ilustración 11: Relación entre el ciclo de trabajo de las señales PWM y la posición del rotor . ...... 10
Ilustración 12: Torque generado en el rotor en función del ángulo de los campos magnéticos.. ...... 10
Ilustración 13: Diagrama de bloques del algoritmo de control FOC de motores BLDC. .................. 11
Ilustración 14: Descomposición el campo magnético ejercido sobre el rotor en el control FOC. ..... 11
Ilustración 15: Imagen de la estructura de la gama IDX de Maxon Motors. ..................................... 13
Ilustración 16: Controlador EPOS2 P de Maxon. .............................................................................. 13
Ilustración 17: Circuito de aplicación de los dispositivos DRV835x de Texas Instruments. [3] ...... 14
Ilustración 18: Circuito de aplicación del circuito integrado DRV8313 de Texas Instruments. ....... 14
Ilustración 19: Esquema del hardware de desarrollo. ........................................................................ 16
Ilustración 20: Esquema de conexiones del conector CN10 en el diseño MB1136 .......................... 19
Ilustración 21: Esquema de conexiones del microcontrolador en el diseño MB1136. ...................... 20
Ilustración 22: Asignación de pines por defecto para las tarjetas de desarrollo en MCWB. ............. 20
Ilustración 23: Asignación de pines del microcontrolador. ............................................................... 21
Ilustración 24: Módulo ST-LINK/V2 incorporado en el diseño MB1136......................................... 21
Ilustración 25: Conexiones en los conectores J5 y J6 de la tarjeta X-NUCLEO-IHM07M1. ........... 22
Ilustración 26: Arquitectura del STM32 MC firmware. [4]............................................................... 23
Ilustración 27: Componentes que forman la librería PMSM FOC. ................................................... 24
Ilustración 28: Ventana de selección del hardware de desarrollo en ST Motor Profiler. .................. 25
Ilustración 29: Panel de configuración de ST Motor Profiler. ........................................................... 25
Ilustración 30: Ventana de configuración del hardware en MCWB. ................................................. 27
Ilustración 31: Ventana principal de MotorControl Workbench. ...................................................... 27
Ilustración 32: Ventana de asignación de pines de MotorControl Workbench. ................................ 28
Ilustración 33: Herramienta de generación del código de MotorControl Workbench. ...................... 29
Ilustración 34: Monitor básico de MCWB. ........................................................................................ 29
Ilustración 35: Controles para la conexión de las tarjetas al PC. ....................................................... 30
Ilustración 36: Captura de una sesión de Device Monitoring Studio. ............................................... 33
Ilustración 37: Diagrama de bloques de un controlador que ejecuta un algoritmo de control FOC. . 37
Ilustración 38: Conexión entre los tres semipuentes en H y las fases del motor. .............................. 38
Ilustración 39: Patrón de conmutación de los MOSFET que forman el inversor trifásico. ............... 39
Ilustración 40: Diagrama de bloques del controlador a diseñar. ........................................................ 40
Ilustración 41: Árbol de ficheros del proyecto en Altium Designer .................................................. 41
Ilustración 42: Divisor resistivo para programar la tensión de salida del convertidor. ..................... 43
Ilustración 43: Hardware para la medida de las corrientes en las fases del motor. ........................... 45
Ilustración 44: Amplificador no inversor para acondicionar la tensión en las resistencias de shunt . 46
Ilustración 45: Circuito típico de aplicación del circuito integrado L6230 [8] .................................. 47
Ilustración 46: Esquema de la implementación del circuito L6230 ................................................... 48
Ilustración 47: Implementación típica del circuito XR33184ESBTR en el controlador [9]. ............ 49
ix
Índice de ilustraciones
Ilustración 48:Circuito acondicionador de las señales de los sensores Hall y del encóder. .............. 50
Ilustración 49: Conexiones del circuito integrado SN65HVD232D. ................................................. 50
Ilustración 50: Conexiones en el microinterruptor CVS-08B. ........................................................... 51
Ilustración 52: Divisor resistivo para la medida de la tensión en el bus de alimentación. ................ 52
Ilustración 53: Divisor de tensión para la medida de la temperatura en la tarjeta. ............................ 52
Ilustración 54: Documento generado a partir del Layer Stack Manager de Altium Designer. .......... 54
Ilustración 55: Bordes de la tarjeta del controlador (en rosa) en Altium Designer. .......................... 54
Ilustración 56: Distribución de los bloques funcionales en la PCB del controlador.......................... 55
Ilustración 57: Ejemplo de Eurocircuits de”Clipping”. ..................................................................... 55
Ilustración 58: Ejemplo de buena colocación del identificador de un componente en la tarjeta. ...... 56
Ilustración 59: Ejemplo de desplazamiento de un componente de Altium Resources. ..................... 57
Ilustración 60: Representación de Eurocircuits de un peelabe. ......................................................... 57
Ilustración 61: Trazado correcto de dos pistas que deben conectarse al mismo pad. ........................ 57
Ilustración 62: Planos de cobre de las tensiones de alimentación en la tarjeta del controlador. ........ 59
Ilustración 63: Diseño del plano de masa de la tarjeta del controlador. ............................................ 59
Ilustración 64: Planos de cobre para conectar las fases 2 y 3 del motor al circuito L6230. .............. 60
Ilustración 65: Plano de cobre de la salida SENSE1 del circuito L6230. .......................................... 60
Ilustración 67: Fragmento del documento Pick and Place de la tarjeta del controlador. ................... 62
Ilustración 68: Captura en el microscopio del desplazamiento del conector J7. ............................... 66
Ilustración 69: Marca del pin positivo (“+”) del condensador C18. .................................................. 66
Ilustración 70: Punto que indica el pin 1 de los receptores de las señales del encóder. .................... 66
Ilustración 71: Conector de alimentación del controlador. ................................................................ 67
Ilustración 72: Interfaz gráfica del programa STM32 ST-LINK Utility. .......................................... 68
Ilustración 73: Escalón de corriente ideal para la calibración. .......................................................... 69
Ilustración 74: Configuración del escalón de corriente en la ventana “Configuration” de MCWB. . 69
Ilustración 75: Ejemplo de una respuesta lenta de la corriente en la fase A del motor. .................... 70
Ilustración 76: Ejemplo de respuesta ruidosa debido a valores demasiado altos de Kp y Ki. ........... 70
Ilustración 77: Ejemplo de un sobreimpulso en la corriente de la fase A del motor. ........................ 71
Ilustración 78: Configuración sensorless de MCWB. ........................................................................ 72
Ilustración 79: Interfaz gráfica del software de control. .................................................................... 74
Ilustración 80: Tarjeta EMCB-200U-MP10E conectada y en funcionamiento. ................................ 75
Ilustración 81: Respuesta tras la calibración de corriente. Kp = 3800, Ki = 3700. ........................... 76
Ilustración 82: Respuesta obtenida con los valores Kp = 4000, Ki = 3900 ....................................... 76
Ilustración 83: Velocidad del motor (en verde) con Kp = Ki = 100. ................................................. 77
Ilustración 82: Velocidad del motor (en verde) con Kp = 5000 y Ki =25000 ................................... 77
Ilustración 83: Velocidad del motor (en verde) con Kp = 3500 y Ki = 20000 (valores finales). ...... 77
Ilustración 84: Respuesta con los valores de la calibración: Kp = 2000, Ki = 300 y Kd = 200. ....... 78
Ilustración 85: Perfil del jerk y la aceleración calculados por el firmware STM32 MC SDK. ......... 80
Ilustración 86: Comparación entre un perfil de velocidad trapezoidal y uno S-Curve. ..................... 81
Ilustración 87: Perfil del jerk, la aceleración, la velocidad y la posición en la trayectoria S-Curve. 82
Ilustración 88: Desplazamiento de 300 grados con la trayectoria de ST. .......................................... 89
Ilustración 89: Desplazamiento de 300 grados con nuestra trayectoria. ............................................ 90
Ilustración 90: Velocidad descrita ante un desplazamiento de 300 grados con la trayectoria de ST. 90
Ilustración 91: Velocidad ante un desplazamiento de 300 grados con nuestra trayectoria. ............... 91
Ilustración 92: Controlador alimentado y programado correctamente. ............................................. 92
Ilustración 93: Lectura de la tensión del bus y del flag 4 (Undervoltage). ........................................ 93
Ilustración 94: Lectura de la tensión del bus y del flag 2 (Overvoltage). .......................................... 93
Ilustración 95: Funciones alternativas de los pines del microcontrolador STM32L476RG. ............. 96
Ilustración 96: Pines de las líneas de la interfaz SPI3 en el microcontrolador STM32L476RG. ...... 97
Ilustración 97: Pines PC10, PC11 y PC12 en los esquemáticos del controlador. .............................. 97
Ilustración 98: Pines de las líneas de la interfaz I2C2 en el microcontrolador STM32L476RG. ...... 98
Ilustración 99: Factura de Eurocircuits por la fabricación y montaje de las tarjetas. ........................ 99
x
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Índice de tablas
Tabla 1: Parámetros del motor obtenidos mediante ST Motor Profiler. ............................................ 26
Tabla 2: Valores de resistencia para programar la tensión de salida del convertidor. ....................... 43
Tabla 3: Valores para el divisor resistivo que determina el UVLO del convertidor. ........................ 43
Tabla 4: Valores de las constantes de los PIDs resultantes de la calibración. ................................... 78
Tabla 5: Ecuaciones principales de la trayectoria S-Curve implementada. ....................................... 87
Tabla 6: despliegue de los costes de fabricación y montaje de 100 PCBs de nuestro controlador. ... 99
xiii
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Capítulo 1
Introducción.
Gracias a la evolución de la Industria 4.0, el abanico de aplicaciones de los motores eléctricos crece
día a día. Sectores como el automovilístico están impulsando fuertemente su evolución gracias al
desarrollo de los vehículos eléctricos. Otro de los sectores que están extendiendo el uso de motores
eléctricos es la robótica, la cual está viviendo un momento de grandes avances.
En el campo de la robótica móvil, resulta especialmente importante la autonomía del sistema y de
cada una de sus partes. En lo que a los motores se refiere, los más eficientes son los de corriente
continua sin escobillas (BLDC), los cuales además presentan un bajo mantenimiento y no generan
apenas ruido.
Debido a sus múltiples ventajas, durante este Proyecto Fin de Grado se ha diseñado y puesto en
marcha un controlador para motores eléctricos BLDC de baja potencia, los cuales formarán parte de
los robots diseñados por la empresa Star Robotics S.L.
En los robots diseñados hasta la fecha, los motores eran gobernados por controladores comerciales,
cuyo coste era bastante alto. Dado que en el robot que se está desarrollando actualmente es muy
importante conseguir un coste de fabricación ajustado, se deben rediseñar y sustituir la gran mayoría
de componentes de los modelos anteriores, incluyendo los controladores de los motores.
Los controladores que se diseñan en este proyecto se encargan de mover el módulo de visión Pan &
Tilt del robot que está siendo actualmente diseñado. Deben ir alojados en el mástil y en el interior del
módulo de visión, por lo que sus dimensiones son reducidas. Al estar destinado para integrase en un
equipo real, son dispositivos completamente funcionales y aptos para formar parte de los futuros
robots diseñados.
En cuanto a esta memoria, se divide en 5 capítulos en los que se describen en profundidad el proceso
de diseño y la puesta en marcha de los controladores. En el primero de ellos se analiza el marco
tecnológico que engloba a nuestro proyecto y las soluciones existentes en el mercado referidas a
controladores de motores BLDC, con el objetivo de averiguar las diferentes funcionalidades que
puede implementar nuestro controlador.
En el Capítulo 2 se describe el trabajo realizado con el hardware de desarrollo. Dicho hardware es
imprescindible para validar el funcionamiento de los dispositivos que resultan más interesantes para
ser utilizados en nuestro controlador.
El diseño del circuito electrónico, así como de la tarjeta de circuito impreso (PCB – Printed Circuit
Board), es descrito en el Capítulo 3. Aquí se analizan el diagrama de bloques del controlador, las
partes más importantes del circuito electrónico y las reglas diseño seguidas para el diseño de la PCB,
habiendo concluido con la fase de diseño.
Posteriormente, en el Capítulo 4 se describe la puesta en marcha de los controladores, así como los
principales problemas encontrados y modificaciones realizadas en el firmware que ejecutan. También
describiremos las pruebas realizadas para validar el correcto funcionamiento y poder ser montados
en los robots.
El documento finaliza con el Capítulo 5, en el que se extraen las conclusiones de la realización de
este proyecto y se analizan las futuras líneas de trabajo sobre nuestro controlador. También se
incluyen dos anexos, donde se muestra el presupuesto del proyecto y la bibliografía consultada.
1
Introducción
En cuanto al número de fases del estátor, podemos encontrar motores CA monofásicos o trifásicos.
Los motores monofásicos son aquellos en los que todos los devanados del estátor están conectados a
la misma señal mientras que, en los trifásicos, los devanados se conectan a tres señales distintas, las
tres fases de la alimentación. A un motor trifásico se le aplicarán tres señales sinusoidales iguales
pero desfasadas entre sí.
Los motores monofásicos son más asequibles y sencillos, pero alcanzan una potencia menor que los
motores trifásicos (entre 2 kW y 3 kW como máximo). Además, los motores trifásicos presentan un
comportamiento más suave y generan menos vibraciones que los motores monofásicos. Esta
diferencia es más apreciable a velocidades bajas. Los motores trifásicos son los más utilizados en la
industria, mientras que los monofásicos suelen utilizarse en electrodomésticos, taladros y otras
aplicaciones con velocidades de giro altas.
También podemos distinguir entre motores de corriente alterna síncronos o asíncronos. En los
primeros, la velocidad de rotación del rotor es igual a la velocidad con la que gira el campo magnético
generado por el estátor; mientras que, en los motores asíncronos, estas velocidades son distintas. A la
diferencia entre estas velocidades se le denomina desplazamiento.
A los motores síncronos también se les conoce como motores de imanes permanentes, ya que éstos
forman parte de su rotor. Por otra parte, a los motores asíncronos también se les puede llamar motores
de inducción, ya que su rotor se compone de devanados similares a los del estátor.
2
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Los motores de corriente continua (CC) son alimentados mediante una tensión continua. En función
del tipo de motor CC del que estemos hablando, su principio de funcionamiento cambia
completamente. Encontramos dos grandes grupos de motores CC: con escobillas y sin escobillas.
3
Introducción
Así, al hacer circular una corriente por un conductor inmerso en un campo magnético
constante, las espiras experimentarán una fuerza de Laplace, que puede expresarse como:
𝑏
⃗
𝐹 = 𝐼 ∗ ∫ 𝑑𝑙 𝑥 𝐵
𝑎
Ilustración 4: Ejemplo de conexión de los devanados del estátor de un motor BLDC trifásico.
Cuando los bobinados son atravesados por una corriente, se genera un campo magnético en
su interior, según la ley de Biot-Savart:
µ 𝐼 ∗ 𝑑𝑙 𝑥 𝑟
⃗ =
𝐵 ∗
4𝜋 𝑟3
Por su parte, el rotor albergará una serie de imanes permanentes, colocados equidistantemente
a lo largo del diámetro del rotor y alternando su polaridad. Estos imanes serán atraídos o
repelidos por los campos magnéticos generados en los devanados del estátor.
Para conseguir un campo magnético giratorio en el estátor, es necesaria una electrónica que
se encargue de gestionar los parámetros de las corrientes que atraviesan los devanados,
principalmente su intensidad y su sentido de circulación. Esta gestión puede realizarse
mediante distintos algoritmos, los cuales serán estudiados en el próximo apartado.
También puede deducirse que la velocidad de giro del campo magnético generado en el estátor
será la misma que la del rotor, por lo que nos encontramos ante un motor síncrono. Es por ello
que a los motores brushless DC (BLDC) también se les conoce como Permanent Magnet
Synchronous Motors (PMSM).
La principal ventaja de este tipo de motores frente a los motores con escobillas es que no
requieren mantenimiento, ya que se eliminan los elementos expuestos al desgaste por fricción.
Además, el eliminar esta fricción entre las escobillas y el conmutador hace que los motores
brushless sean mucho más eficientes, más silenciosos y con una relación velocidad/torque
prácticamente lineal. Por el contrario, su principal desventaja es que su control es bastante
más complejo que el de un motor con escobillas, además de que su precio es superior.
5
Introducción
Al estar alimentado por una batería y al ser una aplicación en la que la eficiencia, el ruido y el
mantenimiento son claves, todos los motores que monta el robot son motores BLDC. De ahí la
motivación de desarrollar un controlador para motores BLDC propio, el cual permita ajustar el coste
de fabricación del robot que está siendo desarrollado actualmente por la empresa Star Robotics.
6
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Ilustración 8: Secuencia de activación de las fases del motor mediante control trapezoidal. [2]
Por ejemplo, en el intervalo 1, la corriente entrará al motor y atravesará los devanados de la fase roja
y los de la fase verde, a través de la cual la corriente vuelve a masa. En estos devanados se generarán
campos magnéticos de dirección opuesta (ya que la corriente recorre los devanados de fases distintas
en sentidos opuestos), los cuales atraerán a los imanes permanentes del rotor. Mientras, los devanados
de la fase azul estarán sin excitar.
En el siguiente intervalo cambiarán las fases excitadas para conseguir que el rotor siga girando. El
instante de la conmutación debe producirse cuando el campo magnético generado por los imanes
permanentes del rotor sea paralelo al campo magnético generado por los devanados del estátor, para
lo cual es necesario conocer la posición del rotor en cada instante.
La posición del rotor puede obtenerse mediante sensores (como tres sensores Hall) o sin sensores,
midiendo la fuerza electromotriz inducida por el rotor en los devanados del estátor. Por la ley de
Faraday, al tener un conductor (los devanados del estátor) sumergido en un campo magnético variable
(generado por los imanes del rotor en rotación), una fuerza electromotriz (FEM) será inducida en el
conductor. Esta fuerza electromotriz inducida se denomina Back EMF (BEMF) y responde a la
siguiente ecuación
𝐵𝐸𝑀𝐹 = 𝑁 ∗ 𝑙 ∗ 𝑟 ∗ 𝐵 ∗ 𝜔
donde:
N es el número de vueltas de los devanados,
l es la longitud del rotor,
r es el radio interno del rotor,
B es el campo magnético generado por el rotor,
ω es la velocidad angular del rotor.
8
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Entre todos estos parámetros, el único que varía es la velocidad del rotor. Por tanto, podemos
decir que el BEMF será directamente proporcional a la velocidad angular. Esto no permite utilizar
el método sensorless (sin sensores) en aplicaciones en las que la velocidad de giro es baja, ya que
el BEMF generado sería demasiado bajo.
El BEMF generado en los devanados del estátor se muestra en la Ilustración 9. Dado que siempre
hay una fase que no está excitada, la tensión medida en esa fase se corresponde con el BEMF
inducido (en las fases excitadas esta tensión se opondrá a la tensión de excitación de las fases,
debido a la Ley de Lenz). En cada uno de los 6 intervalos, el BEMF cruzará dos veces por cero.
Detectando estos instantes y sabiendo cual es la fase no excitada, podemos conocer la posición
del rotor.
Ilustración 9: BEMF generado en las tres fases de un motor BLDC sin excitar.
En aplicaciones donde la velocidad de giro del motor es demasiado baja, es imprescindible utilizar
sensores Hall. Normalmente, se utilizan 3 sensores Hall, repartidos equidistantemente por el diámetro
interno del estátor (es decir, con una separación de 120º). Por el efecto Hall, estos sensores generarán
un nivel alto de tensión cuando estén enfrentados con un imán N del rotor y un nivel bajo cuando
estén enfrentados con un imán S. Mediante una tabla de verdad que evalúa el valor entregado por
cada sensor, podemos determinar la posición del rotor y la excitación de las fases.
Ilustración 10: Tabla de verdad para la excitación de las fases en el control 6-steps con sensores Hall.
9
Introducción
El método de control sinusoidal aplica señales de tensión de forma sinusoidal a las fases del motor,
las cuales están desfasadas 120º en el tiempo entre sí. Con respecto al control trapezoidal, ofrece
mayor eficiencia, menor rizado en el par y menor ruido acústico.
Al igual que con los motores trifásicos asíncronos de corriente alterna, el objetivo es generar un
campo magnético rotativo en el estátor que, en este caso, atraerá o repelerá a los imanes permanentes
del estátor, provocando el movimiento.
Para conseguir generar estas señales a partir de la corriente continua que alimenta el controlador, un
microcontrolador generará tres señales PWM cuyo ciclo de trabajo será variado constantemente y que
serán aplicadas en las puertas de los MOSFET superiores de cada semipuente en H. Así, al variar el
ciclo de trabajo, variará el valor medio de la tensión aplicada en la puerta del MOSFET. De esta
forma, en función del ciclo de trabajo de la señal PWM la corriente que atravesará las fases del motor
serán distintas.
El ciclo de trabajo de las señales PWM estará determinado por la posición del rotor, obtenida
mediante sensores Hall como se hacía en el control trapezoidal. Esta relación puede apreciarse en la
Ilustración 11:
Ilustración 11: Relación entre el ciclo de trabajo de las señales PWM y la posición del rotor .
Ilustración 12: Torque generado en el rotor en función del ángulo de los campos magnéticos..
10
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Por cada fase del estátor se hará circular una corriente sinusoidal, las cuales estarán desfasadas 120º
entre fase y fase. De esta forma, se consigue un campo magnético giratorio de la misma forma que se
estudió en los motores trifásicos asíncronos de corriente alterna.
Por tanto, la tarea de un controlador que implemente el algoritmo FOC será proporcionar estas
corrientes sinusoidales al motor a partir de una tensión continua de alimentación. Para ello, el
firmware del controlador suele implementar el siguiente diagrama de bloques, el cual representa el
algoritmo de control FOC realizando un control de velocidad:
Ilustración 13: Diagrama de bloques del algoritmo de control FOC de motores BLDC.
Ilustración 14: Descomposición el campo magnético ejercido sobre el rotor en el control FOC.
La fuerza perpendicular es la única que ejerce un par de giro sobre el rotor y es consecuencia de una
corriente a la que llamaremos Iq. La fuerza paralela no ejerce ningún par de giro sobre el rotor, solo
consume potencia y es consecuencia de una corriente llamada Id. Por tanto, para conseguir la máxima
eficiencia, la consigna de Id será siempre cero, y la consigna de Iq será la que determine el par ejercido
sobre el rotor.
Para determinar las corrientes Iq e Id generadas por el estátor en cada instante, se toma la medida de
la corriente de dos fases y se les aplica las transformadas de Clarke y Park, en ese orden. La
transformada de Clarke convierte las corrientes de las fases, que están en un dominio trifásico, a dos
corrientes basadas en un sistema ortogonal bidimensional αβ. El resultado de esta transformada sería
el siguiente
𝑖𝜶 = 𝑖𝑎
1 2
𝑖𝛽 =∗ 𝑖𝑎 + ∗ 𝑖𝑏
√3 √3
donde ia e ib son las corrientes de dos fases del motor:
11
Introducción
𝑖𝑎 = 𝐼𝑜𝑎 ∗ 𝑠𝑒𝑛(𝜔𝑡)
2𝜋
𝑖𝑏 = 𝐼𝑜𝑏 ∗ 𝑠𝑒𝑛 (𝜔𝑡 + )
3
4𝜋
𝑖𝑐 = 𝐼𝑜𝑐 ∗ 𝑠𝑒𝑛 (𝜔𝑡 + )
3
Después, mediante la transformada de Park, obtendremos también dos corrientes basadas en un
sistema bidimensional ortogonal, pero las cuales no variarán con el tiempo. Esto se consigue
estableciendo sistema de coordenadas el cual gira de forma solidaria con el rotor. Las corrientes
obtenidas de esta transformada serán Iq e Id
𝐼𝑑 = 𝑖𝛼 ∗ 𝑐𝑜𝑠𝜃 + 𝑖𝛽 ∗ 𝑠𝑒𝑛𝜃
𝐼𝑞 = −𝑖𝛼 ∗ 𝑠𝑒𝑛𝜃 + 𝑖𝛽 ∗ 𝑐𝑜𝑠𝜃
donde θ será la posición angular del rotor. Una vez obtenidas los valores de Iq e Id, obtendremos dos
valores de tensión Vq y Vd mediante dos reguladores PI, cuyas señales de entrada serán las señales de
error producidas entre las consignas de Iq e Id y sus valores actuales.
A continuación, se aplica el proceso inverso sobre las tensiones Vq y Vd para obtener las tensiones que
debemos aplicar sobre las puertas de los MOSFET que forman los tres semipuentes en H. En primer
lugar, se aplicará la transformada inversa de Park, obteniendo dos tensiones Vα y Vβ. A partir de estas
tensiones obtendremos las señales PWM que se aplican en las puertas de los MOSFET superiores de
cada semipuente y cuyo ciclo de trabajo determinará la corriente que atraviesa el transistor y, en
consecuencia, las fases del motor.
Estas señales PWM se obtienen mediante la modulación por ancho de pulso del vector de espacio
(SVPWM - Space Vector Pulse Width Modulation1). Así obtendremos 3 señales PWM cuyo ciclo de
trabajo determinará el valor medio de la tensión aplicada en la puerta de cada MOSFET y, con ello,
la corriente que circulará por cada fase del motor.
1
Para obtener más información sobre este método, puede consultar el documento [20].
12
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
13
Introducción
Ilustración 17: Circuito de aplicación de la familia de dispositivos DRV835x de Texas Instruments. [3]
Como vemos, estos circuitos integrados no solo integran los controladores de los MOSFET, sino que
ofrecen 3 amplificadores que adaptan la tensión caída en las resistencias de medida de corriente a un
ADC, un convertidor reductor de tensión para alimentar a los controladores de las puertas y circuitos
de protección frente a sobrecalentamiento.
Además, son capaces de gobernar las 6 puertas de los MOSFET a partir de 1, 3 o 6 señales de entrada
PWM. Pero no todos los modelos de la serie integran el mismo hardware. Por ejemplo, los modelos
DRV8350 y DRV8350R no incorporan los amplificadores.
Un nivel superior de integración podría encontrarse en el modelo DRV8313. Este dispositivo incluye
toda la electrónica mencionada en la serie DRV835x y, además, integra los MOSFET que forman los
semipuentes en H. Este sería su circuito de aplicación:
Ilustración 18: Circuito de aplicación del circuito integrado DRV8313 de Texas Instruments.
Eso sí, como podemos observar en la Ilustración 18, perdemos los amplificadores operacionales para
la medida de la corriente en las fases. Aun así, resulta una opción muy interesante para nuestro diseño,
ya que al integrar en su interior los MOSFET, ahorraríamos bastante espacio en la tarjeta.
14
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Texas Instruments también ofrece tarjetas de evaluación de los circuitos mencionados anteriormente,
las cuales son útiles tanto para comprobar el funcionamiento de estos circuitos sobre los motores del
robot como para tomar sus esquemáticos como referencia de nuestro diseño. Además, ofrece un SDK
(Software Development Kit) llamado C2000Ware MotorControl SDK, mediante el cual se agiliza el
proceso de desarrollo del firmware del controlador.
15
Introducción
Ilustración 19: Esquema del hardware de desarrollo que se utilizará en la primera fase del proyecto.
16
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
17
Introducción
18
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Capítulo 2
Trabajos previos al diseño del
controlador.
Para comprobar si el hardware implementado en las tarjetas de desarrollo puede ser incluido en
nuestro controlador, realizaremos una serie pruebas que nos permitirán validar, entre otras cosas, si
el circuito integrado L6230 es apto para controlar los motores que incorpora el módulo de visión del
robot. Además, empezaremos a definir alguna de las restricciones del diseño, tales como la asignación
de los pines del microcontrolador.
Por ejemplo, en la Ilustración 21 vemos que el pin 34 del microcontrolador puede conectarse a PB13
o a PB14, en función de si se cierra el solderbridge SB27 o el SB26. Después, en función de si
soldamos el SB35 o el SB28, podremos conducir la señal del pin 34 del microcontrolador hasta el pin
28 o el pin 30 del conector ST Morpho CN10 (Ilustración 20).
A la tarjeta de potencia conectaremos el encóder del motor (en el conector J3), las fases del motor (en
el conector J2) y la alimentación del sistema (en el conector J1). Para ello, debemos modificar los
solderbridges de la tarjeta NUCLEO-L476RG para que estas señales lleguen al pin del
microcontrolador correcto.
Lo primero que debemos hacer es asignar a cada una de las señales manejadas por el microcontrolador
uno de sus pines. Podemos ayudarnos del software MotorControl Workbench y su herramienta de
asignación de pines, en la que se listan todas las señales que maneja el microcontrolador y los posibles
pines que se le pueden asignar. Para utilizarla, crearemos un proyecto en MCWB2 seleccionando las
tarjetas NUCLEO-L476RG y X-NUCLEO-IHM07M1.
Ilustración 22: Asignación de pines por defecto para las tarjetas de desarrollo en MCWB.
2
El manejo de MotorControl Workbench se explicará en profundidad en el apartado 2.3 de esta memoria.
20
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
En la tercera columna de la Ilustración 22 se muestran los posibles pines que se pueden asignar a cada
señal. Basándonos en la posible distribución de los componentes en la tarjeta y con el fin de facilitar
el ruteo de las señales, cambiaremos los pines asignados por defecto a dichas señales, quedando la
siguiente asignación de pines:
Ilustración 23: Asignación de pines del microcontrolador para el diseño del controlador de motores BLDC.
Ahora podemos analizar la posición de los solderbridges y jumpers y ajustarla para que la conexión
entre el microcontrolador y la tarjeta de potencia sea la correcta. Los cambios que se han realizado
son los siguientes:
Se han soldado los solderbridges SB16, SB50 y se ha abierto el SB55. Este cambio se debe a
que, en la configuración por defecto del NUCLEO-L476RG no se utiliza ningún reloj de alta
frecuencia. Para algunas tareas del algoritmo FOC este reloj resulta imprescindible.
Configurando los solderbridges de esta forma obtendremos una señal de reloj de 8 MHz a
partir del reloj de alta frecuencia del bloque ST-LINK/V2 incluido en la tarjeta.
21
Trabajos previos al diseño del controlador
3
SENS1, SENS2 y SENS3 son señales de entrada al circuito L6230.
22
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
La librería PMSM FOC contiene todos los bloques software que implementan el control FOC
del motor. Cada componente cumple una de las funcionalidades involucradas y necesarias en
el algoritmo de control, como la medida de la velocidad o la detección de la posición del rotor.
Para cubrir ciertas funcionalidades, la librería ofrece varios componentes para esa misma
función con implementación diferente, lo que hace posible utilizar distintos componentes
hardware con este SDK.
23
Trabajos previos al diseño del controlador
La librería UI (User Interface) contiene el software que permite la comunicación del STM32
MC SDK a través de un puerto serie o de un conversor analógico-digital (DAC) con otras
aplicaciones, como MCWB.
Motor Control Cockpit integra los dos anteriores bloques en un único paquete firmware e
implementa los bucles de regulación FOC y de seguridad. Su labor es la de configurar y
comunicar los componentes firmware seleccionados de la librería PMSM FOC con los de la
librería User Interface para crear el firmware del controlador. Gracias a que a través del
software MCWB configuramos y personalizamos el firmware para nuestro sistema, el
firmware ejecutado por los controladores tan solo contendrá los bloques firmware
estrictamente necesarios.
Por último, destacaremos que el STM32 MC SDK se distribuye como una expansión o funcionalidad
adicional del software STM32CubeMX, herramienta que permite configurar gráficamente los
microcontroladores de 32 bits de ST Microelectronics, así como generar fácilmente la correspondiente
inicialización del microcontrolador, configurar el árbol de relojes del sistema, los periféricos y
generar un proyecto que puede ser abierto directamente en un IDE de programación en C.
24
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Una vez seleccionadas las tarjetas, el programa nos pide introducir algunas de las características del
motor, como el número de pares de polos, la velocidad máxima, la corriente máxima consumida y la
tensión nominal de alimentación. Estos datos pueden encontrarse en la hoja de características del
motor. En nuestro caso, el motor utilizado es de Vishan Motors, en concreto el modelo EC2240S-
3016.
En esta primera prueba, vamos a limitar la velocidad máxima a 10000 rpm, en lugar de las 16713 rpm
indicadas en la hoja de datos del motor [5]. También, limitaremos el consumo de corriente a 2 A, en
lugar de los 2,8 A que es capaz de entregar la tarjeta IHM07M1. La tensión de alimentación que
aplicaremos sí que se corresponderá con la tensión nominal de alimentación del motor (30 V).
También debemos especificar el tipo de montaje de los imanes permanentes del rotor: superficial
(SM-PMSM) o interno (I-PMSM). Los motores de Vishan de la serie EC2240 montan éstos imanes
superficialmente.
El siguiente paso es configurar el hardware de las tarjetas. Para ello, ST Motor Profiler ofrece un
archivo en el que se describe por completo la configuración de los jumpers de las tarjetas y las
conexiones a realizar. Para acceder a él, pulsamos sobre el icono de información que encontramos
debajo de las imágenes de las tarjetas.
Algunas de las modificaciones que se indican en este archivo ya se realizaron en el apartado 2.1,
como la colocación de los jumpers J5 y J6 de la tarjeta IHM07M1 en la posición 3Sh y la configuración
de los solderbridges SB16, SB50 y SB55. Algunas configuraciones que debemos revisar son:
25
Trabajos previos al diseño del controlador
Sobre la tarjeta NUCLEO-L476RG, debemos quitar el jumper JP1, colocar el jumper JP5 en
la posición U5V y conectar los dos jumpers en CN2. Esto permitirá programar la tarjeta a
través del dispositivo ST-LINK/V2.
Sobre la tarjeta X-NUCLEO-IHM07M1 quitamos el jumper J9 y conectamos los jumpers JP1
y JP2.
Tras esto, podemos conectar las tarjetas al puerto USB del ordenador. Para ello, utilizaremos el
conector micro-USB de la tarjeta NUCLEO-L476RG. En ST Motor Profiler, pulsamos sobre Connect
para programar las tarjetas. Alimentaremos las tarjetas a través del conector J1 y conectaremos las
fases del motor al conector J2. El proceso de cálculo de los parámetros del motor durará unos 5
minutos aproximadamente y como resultado, se obtienen los valores mostrados en la
Tabla 1. Estos valores pueden guardarse e incluirse después en el proyecto de MCWB.
Parámetro Valor
Resistencia entre fases (Rs) 5,02 Ω
Inductancia de las fases (Ls) 0,502 mH
Constante de BEMF (Ke) 1,8 Vrms/krpm
Fricción 3,965 𝑢𝑁 ∗ 𝑚 ∗ 𝑠
Inercia 0,230 𝑢𝑁 ∗ 𝑚 ∗ 𝑠 2
Velocidad máxima alcanzada 12162 rpm
Tabla 1: Parámetros del motor obtenidos mediante ST Motor Profiler para la primera versión del firmware.
El siguiente paso será utilizar el programa MCWB para ajustar el valor de algunas constantes de la
librería PMSM FOC del firmware STM32 MCSDK. Estas constantes guardan información sobre las
características del hardware utilizado, como puede ser el número de cuentas por revolución (ppr) del
encóder, la frecuencia de las señales PWM que controlan los MOSFET, etcétera. Además, con
MCWB podremos introducir la asignación de pines realizada en el apartado 2.1 y verificar que es
correcta y funcional.
El primer paso será crear un proyecto en MCWB. Esta operación generará un único fichero con
extensión “stmcx” que puede abrirse y editarse en cualquier momento. Para ello, iniciamos el
programa y pulsamos sobre la casilla New Project. Emergerá una ventana en la que introduciremos
el hardware que estamos utilizando: la tarjeta de control (NUCLEO-L476RG), la tarjeta de potencia
(X-NUCLEO-IHM07M1 3Sh) y el perfil del motor generado con ST Motor Profiler:
26
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Tras confirmar, se abrirá la ventana principal de MCWB, desde la que editaremos todas las
características de nuestro hardware. Se trata de una interfaz gráfica, formada por distintos bloques
que representan esquemáticamente el hardware de las tarjetas de control y de potencia. Además,
encontramos una pequeña ventana (en la esquina inferior izquierda) en la que podemos ver el valor
de las principales constantes de la librería PMSM FOC del firmware que podemos editar. Al lado,
encontramos una ventana de información sobre los distintos comandos ejecutados y los posibles
errores que pueden darse:
27
Trabajos previos al diseño del controlador
Al pulsar sobre cada bloque, aparecerá una ventana desde la que podremos configurar los principales
parámetros de esa parte del hardware. Con respecto a la configuración generada por defecto al crear
el proyecto, los parámetros que debemos modificar para esta primera versión del firmware son:
Habilitaremos tanto los sensores Hall como el encóder del motor. En cuanto al encóder,
debemos modificar su número de pulsos por revolución a 1024 (tal y como se indica en la
hoja de datos del encóder).
En el bloque de medida de velocidad (Speed Sensing) debemos definir como sensor principal
el encóder. El sensor secundario lo mantendremos deshabilitado.
Debemos configurar la asignación de pines definida en el apartado 2.1. Esto lo haremos dentro
de los bloques Digital I/O y Analog Input and Protection, en función de si las señales a las
que se le va a asignar un determinado pin son analógicas (como la medida de las corrientes de
cada fase) o digitales (como los PWM que gobiernan las puertas de los MOSFET). Para la
asignación de los pines, nos fijaremos en la Ilustración 23 y, para cada señal, aparecerá un
desplegable en el que seleccionaremos el pin del microcontrolador correspondiente.
Tras asignar los pines, debemos revisar que la asignación realizada es válida. Para ello,
abrimos la ventana de Pin Assigment y pulsamos en check:
Tras estas modificaciones, podemos guardar el proyecto y pasar a generar el código. Para ello,
abrimos la herramienta Project Generation y configuramos el IDE de programación y la versión del
paquete firmware de STM32 MCSDK que queremos obtener. En nuestro caso, utilizaremos el IDE ST
STM32CubeIDE y utilizaremos la versión de firmware recomendada (V1.14.0). También incluiremos
la capa de abstracción hardware (HAL) que se ofrece.
Al pulsar sobre Generate, obtendremos un proyecto para STM32CubeIDE que se guarda en el mismo
directorio en el que se encuentra el proyecto de MCWB.
28
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Como podemos ver en la parte superior, existen formatos más completos de la interfaz gráfica para
monitorizar el comportamiento del motor. Se accede a ellos a través de las pestañas Advanced y
Registers. La primera de estas pestañas abre un monitor en el que podemos ver y modificar el valor
de los principales registros del microcontrolador. De esta forma, podemos variar las referencias de
torque y flujo magnético y las constantes de los distintos PIDs, algo que en la interfaz básica no se
podía hacer. La pestaña de Registers abre una interfaz en la que podemos ver y editar el valor de todos
los registros del microcontrolador.
Para probar esta primera versión del firmware utilizaremos la interfaz básica. Así, lo primero que
debemos hacer es conectar las tarjetas con el puerto serie del PC. Para ello, seleccionamos el puerto
del PC correspondiente y el régimen binario y pulsamos sobre el botón de conectar. Si todo ha
funcionado correctamente, deberá aparecer un mensaje en verde indicando que el dispositivo está
conectado:
Tras ello, podemos establecer una velocidad de referencia y comenzar a mover el motor pulsando
sobre Start Motor. Se puede observar que el motor comienza a moverse y que la medida de velocidad
coincide con la velocidad de referencia indicada. Además, la tensión de alimentación medida por
MCWB se corresponde con la indicada en la fuente de alimentación. Ni el consumo de potencia ni la
temperatura del sistema son excesivas. También probamos a cambiar la velocidad de referencia sin
parar el motor y la respuesta es correcta. Tras ello, pulsamos sobre Stop Motor y el motor deja de
moverse.
Como conclusión, podemos decir que esta primera versión del firmware es funcional y permite
verificar el correcto funcionamiento del hardware, pero no es válida para la versión final del producto.
Esto se debe a que el firmware se encarga de realizar un control de velocidad, por lo que la consigna
introducida en el sistema será una determinada velocidad. Para la función que deben cubrir nuestros
controladores, sería deseable que la consigna fuese un determinado desplazamiento, por lo que el
firmware debería ejecutar un control de posición.
Por otra parte, la respuesta de la velocidad presenta ligeros sobreimpulsos y no se alcanza la
aceleración máxima del motor. Esto se debe a que los valores de las constantes Kp, Ki y Kd de los
reguladores PID implementados en el firmware no son los correctos. Por ello, en el apartado 4.2
calibraremos correctamente estos PIDs.
La conclusión más importante que podemos extraer de estas pruebas es que tanto el hardware
seleccionado como las herramientas software para la generación del firmware del controlador son
válidas para diseñar nuestro propio controlador de motores BLDC. Por ello, ya podemos confirmar
que nuestro controlador estará basado en el circuito integrado L6230 que implementa la tarjeta X-
NUCLEO-IHM07M1 y que el proceso de generación del firmware para nuestro controlador será muy
similar al descrito en este apartado y se realizará con las mismas herramientas software.
30
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
4
Recordemos que el firmware STM32 MC SDK está preparado para aplicar un método de control FOC sobre dos motores
PMSM simultáneamente,
31
Trabajos previos al diseño del controlador
Como segundo byte, encontramos el número de bytes que componen el resto de la trama. Esta
longitud dependerá del tipo de comando que hayamos ordenado en el byte anterior (por ejemplo, para
un comando GET_REG, bastará con enviar un byte, el que indica el registro que queremos obtener.
Pero si el comando enviado es SET_REG, necesitaremos enviar un byte con el registro a modificar y
otros con el dato que queremos almacenar en dicho registro).
Como tercer byte, encontramos la información del mensaje (payload). Los diferentes tamaños de
mensaje, en función de comando recibido, que se han observado a lo largo de las pruebas han sido:
MC_PROTOCOL_CODE_GET_REG: este comando será enviado cuando se desee conocer
el valor de una variable o registro. En este caso, el payload se compondrá de un solo byte, en
el que se indicará el registro que queremos leer. Por tanto, este mensaje de escritura tendrá la
forma:
Debemos mencionar que las operaciones de PING y RESET no pueden ser ejecutadas por el
momento, ya que no están codificadas (en el firmware generado, aparece un comentario en el
cuerpo de las funciones que dice “Do nothing at the moment”). El formato de este mensaje
de escritura será:
0x23 0x01 ID_CMD CRC
32
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
5
El dato Etapa se refiere a la fase de la curva de aceleración en la que se encuentra el motor. Van numeradas del 1 al 6.
En el apartado 4.4 de esta memoria explicaremos con mayor detalle las diferentes fases en las que se divide la aceleración
y deceleración del motor.
33
Trabajos previos al diseño del controlador
Por último, debemos mencionar que existen tres comandos que, pese a estar definidos en el fichero
user_interface.h, no ejecutan ninguna operación. Estos son:
STORE_TOADDR y LOAD_FROMADDR: las funciones a las que se llaman cuando se
reciben no están codificadas.
GET_MP_INFO: la función a la que se llama siempre devuelve un valor de error.
o El primer byte contendrá un código que indica si el comando ha sido ejecutado con éxito
(0xF0) o no (0xFF).
o El segundo byte contendrá el número de bytes que componen el payload del mensaje.
Este tamaño dependerá del tipo de dato que queramos leer (por ejemplo, del tamaño del
registro que hayamos solicitado leer).
o En el payload se almacenarán los datos que debemos enviar al programa de control. Estos
datos se envían en formato little endian.
o El último byte será el CRC del mensaje.
Mensaje de ACK: Este mensaje será enviado por el controlador para confirmar la correcta
ejecución de un comando y no se requiera enviar ningún dato al programa de control.
34
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Los códigos de error están definidos al inicio del fichero motor_control_protocol.c y se actualizan
tras la ejecución de cada comando:
/* List of error codes */
typedef enum ERROR_CODE_e
{
ERROR_NONE = 0x00, /**< No error */
ERROR_BAD_FRAME_ID = 0x01, /**< BAD Frame ID. The Frame ID has not been
recognized by the firmware. */
ERROR_CODE_SET_READ_ONLY = 0x02, /**< Write on read-only. The master wants to
write on a read-only register. */
ERROR_CODE_GET_WRITE_ONLY = 0x03, /**< Read not allowed. The value cannot be
read. */
ERROR_CODE_NO_TARGET_DRIVE = 0x04, /**< Bad target drive. The target motor is
not supported by the firmware. */
ERROR_CODE_WRONG_SET = 0x05, /**< Value used in the frame is out of range
expected by the FW. */
ERROR_CODE_CMD_ID = 0x06, /**< NOT USED */
ERROR_CODE_WRONG_CMD = 0x07, /**< Bad command ID. The command ID has not
been recognized. */
ERROR_CODE_OVERRUN = 0x08, /**< Overrun error. Transmission speed too
fast, frame not received correctly */
ERROR_CODE_TIMEOUT = 0x09, /**< Timeout error. Received frame corrupted
or unrecognized by the FW. */
ERROR_CODE_BAD_CRC = 0x0A, /**< The computed CRC is not equal to the
received CRC byte. */
ERROR_BAD_MOTOR_SELECTED = 0x0B, /**< Bad target drive. The target motor is
not supported by the firmware. */
ERROR_MP_NOT_ENABLED = 0x0C /**< Motor Profiler not enabled. */
} ERROR_CODE;
Ahora, analizaremos el mensaje de respuesta que obtenemos en función del tipo de mensaje de
escritura que se haya realizado:
MC_PROTOCOL_SET_REG: se enviará un mensaje de ACK que confirma o no al programa
de control que el valor de un determinado registro ha sido modificado correctamente. Por
defecto, si ha ocurrido algún error se enviará el código WRONG_SET (0x05). Pero si en
concreto, no se encuentra el identificador del registro que se quiere modificar o es un registro
de solo lectura, se enviará el código de error SET_READ_ONLY (0X02).
35
Trabajos previos al diseño del controlador
36
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Capítulo 3
Diseño del controlador.
El hardware requerido para implementar nuestro controlador FOC para motores BLDC será montado
sobre una PCB (Printed Circuit Board). Para ello, previamente debemos diseñar el circuito
electrónico del controlador y buscaremos componentes comerciales que se adapten al diseño
realizado.
Para diseñar el circuito electrónico de nuestro controlador, tomaremos como referencia los
esquemáticos de la tarjeta X-NUCLEO-IHM07M1 [6]. Sobre estos esquemáticos realizaremos
numerosas modificaciones para cumplir las especificaciones del proyecto. Por ejemplo, eliminaremos
el hardware para la detección del BEMF, así como todas las conexiones a los conectores ST Morpho
y añadiremos el hardware necesario para implementar una interfaz CAN.
Ilustración 37: Diagrama de bloques de un controlador que ejecuta un algoritmo de control FOC.
37
Diseño del controlador
Como primera aproximación al diagrama de bloques del controlador que queremos diseñar, podemos
utilizar el diseño que propone ST Microelectronics, en su documento UM2392 y que se muestra en la
Ilustración 37. Los principales bloques que podemos distinguir son:
Bloque de alimentación.
Inversor trifásico.
Algoritmo de control FOC.
En la parte superior del esquema encontramos el bloque de alimentación. Nuestro controlador de
motores BLDC trabajará con corriente continua. En nuestro caso, el controlador se alimentará a partir
de la corriente continua que proporciona la batería del robot, por lo que no necesitaremos implementar
el rectificador de onda completa que propone ST Microelectronics.
En su lugar, necesitaremos integrar una serie de convertidores DC/DC que adapten la tensión continua
de la batería (la cual oscilará entre los 25 y los 32 V, en función de la carga) al valor de tensión que
requieren los distintos circuitos integrados que utilicemos. Por ejemplo, el microcontrolador
necesitará una tensión de alimentación de 3,3 V.
Después, alimentado por la tensión de la batería, encontraríamos los tres semipuentes en H que
controlan las fases del motor (a este conjunto se le conoce como inversor trifásico):
Ilustración 38: Conexión entre los tres semipuentes en H y las fases del motor.
6
No es indiferente cuál de los dos MOSFET activar. Sólo se activará uno de ellos, el cual está determinado por el
algoritmo de control FOC. En la Ilustración 39 podemos la secuencia de conmutación exacta de cada transistor.
38
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Ilustración 39: Patrón de conmutación de los MOSFET que forman el inversor trifásico.
Como vemos, la tensión aplicada en las puertas de los transistores superiores es una señal PWM. Así,
el valor medio de la tensión aplicada en las puertas de los transistores vendrá determinado por el ciclo
de trabajo de las señales PWM, determinando la intensidad de la corriente que debe circular por una
determinada fase.
Por otra parte, vemos que las tensiones aplicadas en las puertas de los transistores inferiores son
señales cuadras. De esta forma habilitamos el retorno de la corriente desde el motor por una
determinada fase.
El momento en el que se debe producir la conmutación de los transistores y el ciclo de trabajo de las
señales PWM es determinado por el microcontrolador en función de la posición del rotor, obtenida
mediante las señales devueltas por los tres sensores Hall del motor.
Por último, encontramos el bloque de color amarillo de la Ilustración 37, el cual representa todas las
tareas que deben ejecutarse para implementar el algoritmo de control FOC. Todas estas tareas son
llevadas a cabo por el microcontrolador de la tarjeta, pero las relacionadas con el tratamiento de las
señales de los sensores requieren de bloques adicionales hardware que acondicionen estas señales
para hacerlas aptas para el microcontrolador.
Además de no representar los circuitos que acondicionan las señales de los sensores, el diagrama de
la Ilustración 37 tampoco muestra el hardware necesario para implementar la comunicación por CAN
Bus de la que debe disponer nuestro controlador. Por ello, a partir del esquema de la Ilustración 37
definiremos nuestro propio diagrama de bloques que represente la totalidad del hardware que debe
incorporar nuestro controlador:
39
Diseño del controlador
Como vemos, el hardware del controlador se dividirá en ocho bloques funcionales. La mayor parte
de estos bloques (cuatro de ellos), están destinados a la medida de diferentes parámetros del
controlador, tales como la temperatura del inversor trifásico, la tensión existente en el bus de
alimentación, las corrientes de cada una de las fases del motor y la posición y velocidad del rotor
mediante los sensores Hall y el encóder que incorpora el motor. Así, mientras que la medida de la
tensión de alimentación y la temperatura sirven para implementar una protección frente a
sobrecalentamientos y tensiones de alimentación inadecuadas, el resto de medidas son utilizadas y
requeridas por el algoritmo de control FOC.
También podemos ver un bloque de comunicaciones, el cual estará formado por el bus CAN y la
interfaz UART del microcontrolador. Este bloque servirá para poder enviar comandos al
microcontrolador. Tal y como ocurría en el diagrama de la Ilustración 37, el microcontrolador se
encargará de ejecutar el algoritmo de control FOC y generar las señales de conmutación correctas
para las puertas de los MOSFET que forman el inversor trifásico.
Finalmente, el bloque de alimentación se encargará de adaptar la tensión entregada por la batería del
robot a la tensión de alimentación requerida por cada uno de los bloques funcionales y circuitos
integrados que implemente nuestro controlador.
40
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
En un proyecto de Altium Designer, el diseño del circuito electrónico se realiza sobre un fichero con
extensión “SchDoc”. Estos ficheros albergarán toda la información sobre los componentes que
forman nuestro circuito y las conexiones a realizar entre ellos. Así, para hacer más inteligible nuestro
diseño, dividiremos el diseño del circuito electrónico en 7 ficheros “SchDoc”, en los cuales
agruparemos todo el hardware que esté destinado a cumplir una misma tarea:
En el fichero Index.SchDoc se establecen las conexiones entre el resto de ficheros. Este fichero
no define un determinado circuito electrónico, si no que establece las conexiones que deben
realizarse entre el hardware diseñado en distintos ficheros. Por ejemplo, en este fichero se
establecería la conexión entre los pines de la interfaz UART del microcontrolador (el cual se
encuentra en el fichero MCU) y el conector de la tarjeta para acceder a esos pines (el cual se
encuentra en el fichero Connectors).
En el fichero MCU.SchDoc se diseña toda la circuitería y el hardware del bloque de control.
Este incluye el microcontrolador, el oscilador y los componentes pasivos adyacentes.
En el fichero Power.SchDoc encontraremos el diseño del circuito electrónico que adapta la
tensión de la batería del robot a las distintas tensiones de alimentación que requiere el
hardware del controlador.
En el fichero Drivers.SchDoc encontraremos la implementación del circuito integrado que
controla las fases del motor, así como sus componentes adyacentes y las tres resistencias de
medida de corriente.
En el fichero Connectors.SchDoc están implementados todos los conectores con los que
contará la PCB, así como 8 interruptores que permitirán establecer el ID CAN de nuestra
tarjeta y habilitar o deshabilitar la resistencia de terminación para el bus CAN.
En el fichero SENS.SchDoc encontramos los tres amplificadores operacionales que adaptan
las tensiones caídas en las tres resistencias de medida de corriente a los pines del ADC que
incorpora el microcontrolador.
En el fichero SENS2.SchDoc tenemos el diseño del hardware que acondiciona las señales de
los sensores Hall y del encóder del motor para que puedan ser procesadas por el
microcontrolador.
En estos 6 ficheros queda definida la totalidad del circuito electrónico que forma nuestro controlador
de motores BLDC. A continuación, estudiaremos el diseño concreto de cada uno de los bloques
funcionales del circuito y elegiremos el modelo comercial de los principales componentes que
materializarán este diseño.
41
Diseño del controlador
42
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Ilustración 42: Divisor resistivo para programar la tensión de salida del convertidor TPSM53602RDAR.
Tabla 2: Valores de resistencia para programar la tensión de salida del convertidor TPSM53602RDAR.
Tabla 3: Valores para el divisor resistivo que determina el UVLO del convertidor TPSM53602RDAR.
La tensión de 3,3 V alimentará al microcontrolador y a los sensores Hall del motor y será utilizada
por los circuitos acondicionadores de las señales del encóder. Para ello, colocaremos un regulador
lineal LDO (Low Dropout) en serie con el TPSM53602RDAR para obtener una tensión continua de
3,3 V a partir de los 5V entregados con el convertidor DC/DC reductor.
43
Diseño del controlador
44
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Ilustración 43: Hardware de la tarjeta X-NUCLEO-IHM7M1 para la medida de las corrientes en las fases
del motor.
La idea es hacer circular la corriente que atraviesa cada una de las fases del motor por una resistencia.
Así, la tensión caída en esa resistencia será directamente proporcional a la corriente que la atraviesa,
que se corresponde con la corriente de las fases del motor.
Estas resistencias deben tener un valor bajo para minimizar la disipación de potencia. Pero esto
provoca que la tensión que cae en ellas sea demasiado baja para ser introducida al ADC del
microcontrolador (no se aprovecharía todo el rango de entrada del convertidor). Para solventar este
problema, utilizamos tres amplificadores operacionales configurados como amplificador no inversor,
en cuya entrada conectaremos la tensión caída en las resistencias de shunt.
En la tarjeta X-NUCLEO-IHM07M1 se utilizan unas resistencias de 0,33 Ω. Pero en nuestro diseño
vamos a utilizar unas resistencias de shunt de menor valor para minimizar al máximo el consumo de
potencia. Nuestras resistencias de shunt tendrán un valor de 0,1 Ω.
El siguiente paso es calcular la ganancia que se debe ajustar en los amplificadores operacionales. Si
tenemos en cuenta que la corriente de pico que es capaz de entregar el circuito L6230 es de 2,8 A,
podemos afirmar que la tensión caída en las resistencias de shunt oscilará entre -280 y 280 mV, según
la ley de Ohm:
𝑉 = 𝑅 ∗ 𝐼 → 𝑉𝑚á𝑥 = 𝑅 ∗ 𝐼𝑚á𝑥 = 0,1 ∗ 2,8 = 280 𝑚𝑉
45
Diseño del controlador
Tal y como se indica en la hoja de datos del microcontrolador, el rango de tensión de entrada está
entre 0 y 3,3 V. Por tanto, necesitamos añadir una tensión de offset de 280 mV a la entrada de los
amplificadores operacionales para que, cuando en la resistencia caigan -280 mV, a la salida del
amplificador obtengamos 0V. Esto lo conseguiremos añadiendo un divisor resistivo en el pin positivo
del amplificador operacional. Si utilizamos como alimentación del divisor la tensión de 3,3 V, la
relación entre las resistencias del divisor podría ser de un factor de 10. De esta forma obtendríamos
un offset de 0,33 V.
Dado que hemos cambiado el valor de las resistencias de shunt, debemos modificar la ganancia de
los amplificadores con respecto al diseño de la X-NUCLEO-IHM07M1. En nuestro diseño, la
ganancia de los amplificadores deberá ser:
𝑉𝑜𝑚á𝑥 − 𝑉𝑜_𝑚𝑖𝑛 3,3
𝐺(𝑉⁄𝑉 ) = =
𝑉𝑠ℎ𝑢𝑛𝑡 𝑚á𝑥 + 𝑉𝑜𝑓𝑓𝑠𝑒𝑡 − (𝑉𝑠ℎ𝑢𝑛𝑡 𝑚𝑖𝑛 + 𝑉𝑜𝑓𝑓𝑠𝑒𝑡 ) 0,28 + 0,33 − (−0,28 + 0,33)
3,3
𝐺 (𝑉⁄𝑉 ) = = 5,89 𝑉⁄𝑉
0,61 − 0,05
Al ser un amplificador no inversor, su ganancia queda definida por la siguiente ecuación:
𝑅2 𝑅2
𝐺 =1+ → = 𝐺 − 1 = 5,89 − 1 = 4,89 → 𝑅2 = 4,89 ∗ 𝑅1
𝑅1 𝑅1
Donde R2 es la resistencia de realimentación y R1 la resistencia conectada al pin negativo del
amplificador. Escogeremos un valor de R2 de 4,7 kΩ y un valor de R1 de 1kΩ. Finalmente, la
topología de los amplificadores no inversores sería:
Ilustración 44: Amplificador no inversor para acondicionar la tensión caída en las resistencias de shunt
46
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Ilustración 45: Circuito típico de aplicación del circuito integrado L6230Q [8]
Las claves del circuito implementado a partir de este circuito integrado son:
VSA y VSB son los pines de alimentación para los semipuentes en H.
Podemos ver como las tres resistencias de shunt se conectan a las 3 salidas SENSE1, SENSE2
y SENSE3, las cuales entregan la corriente consumida por cada fase del motor. Además, ST
Microelectronics muestra el bloque de acondicionamiento de estas tensiones que estudiamos
en el apartado anterior. En los pines SENSE1, SENSE2 y SENSE3 tendremos la tensión que
cae en las resistencias, no la tensión amplificada que se introduce al ADC.
El circuito L6230Q entregará por sus salidas OUT1, OUT2 y OUT3 las tres corrientes que
deben aplicarse al motor.
Los pines CP+ y CP- se corresponden con las entradas de un comparador interno que incluye
el circuito integrado. En CP- conectaremos una de las salidas del DAC que incorpora el
microcontrolador y que se corresponderá con un límite de corriente programado. En CP+
conectaremos la tensión de salida del amplificador de la fase 2 (o V) del motor. El pin CPOUT
se corresponde con la salida de este comparador. Así, cuando la tensión de salida entregada
por el amplificador supera a la entregada por el DAC, el pin CPOUT generará un nivel alto.
Es necesario conectar una resistencia de pull-up a dicho pin.
47
Diseño del controlador
El pin CPOUT se conectará a uno de los pines del microcontrolador. Este generará la señal
llamada BKIN, que se conecta a la entrada de habilitación del L6230 (DIAG-EN) y detendrá
su funcionamiento. El pin DIAG-EN también indica cuando se ha disparado la protección por
sobrecorriente integrada en el L6230.
Las entradas lógicas (IN1, IN2 e IN3) y las entradas de habilitación (EN1, EN2 y EN3) son
generadas por el microcontrolador. Las entradas INx se conectarán a las señales PWM
(llamadas SPH.CH1, SPH.CH2 y SPH.CH3 en los esquemáticos) y controlarán las puertas de
los transistores superiores de cada semipuente. Tal y como explicamos en el aparatado 3.1, el
ciclo de trabajo de las señales PWM determinará la intensidad de la corriente que atraviesa
cada fase. Por otra parte, las entradas ENx (llamadas SPH.EN1, SPH.EN2 y SPH.EN3 en los
esquemáticos) se conectan a las puertas de los transistores inferiores de los semipuentes en H
y habilitan el retorno de la corriente desde el motor por una determinada fase.
Para completar la implementación de este circuito, utilizaremos los esquemáticos de ST
Microelectronics de la tarjeta X-NUCLEO-IHM07M1:
48
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Además, el encóder que utilizaremos entrega una tercera señal, llamada Z. En esta señal se generará
un pulso por cada vuelta completa que dé el rotor del motor. Con ella podremos calcular fácilmente
la velocidad del motor y alinear el motor cuando se arranque el controlador.
Cada una de estas señales son generadas por el encóder en formato diferencial teniendo que conectar
8 señales entre el controlador el encóder: la alimentación de 5V, A+, A-, B+, B-, Z+, Z- y GND.
Cada par de señales se conectará a la entrada de un circuito integrado XR33184ESBTR, del fabricante
MaxLinear. Se trata de un receptor para protocolos de comunicación como RS-485 o RS-422. Soporta
una tasa de datos de hasta 52 Mbps. Dado que los pulsos de cada señal del encóder son enviados en
serie, podemos afirmar que cada pulso se corresponderá con un bit. La tasa máxima de datos que
generará nuestro encóder será:
𝐵𝑖𝑡 𝑟𝑎𝑡𝑒𝑒𝑛𝑐𝑜𝑑𝑒𝑟 = 𝜔𝑚á𝑥 𝑚𝑜𝑡𝑜𝑟 (𝑟𝑝𝑚) ∗ 1024 𝑝𝑝𝑟 = 16713 ∗ 1024 = 17,114 𝑀𝑏𝑝𝑚 → 285 𝐾𝑏𝑝𝑠
Como vemos, es una tasa muy inferior a la que soporta el circuito receptor.
Las entradas del circuito a las que conectaremos las señales diferenciales deben estar conectadas a
través de una resistencia de 120 Ω según el fabricante. Además, debemos conectar dos tensiones
diferentes al circuito integrado: una de ellas es la tensión de alimentación, que será de 5V, y otra de
ellas se corresponde con la tensión de un nivel alto en la salida del circuito. En nuestro caso, a este
pin conectaremos una tensión de 3,3 V.
También debemos conectar un condensador de desacoplo a la entrada del circuito. Finalmente, a su
salida obtendremos una señal single-ended a partir de la señal diferencial generada por el encóder, la
cual será procesada por el microcontrolador.
Finalmente, conectaremos una resistencia en serie de 1,8 kΩ entre la señal entregada por el circuito
receptor y el pin del microcontrolador para limitar la corriente, así como un condensador de 10 pF
que filtre el ruido que haya podido generarse en el receptor.
Con respecto a los sensores Hall, necesitaremos conectar 5 señales entre los sensores Hall que
incorpora el motor y el controlador: tres de ellas correspondientes a los tres sensores Hall, otra la
alimentación de 3,3 V y la masa.
Los sensores Hall del motor se distribuyen con una separación de 120º entre sí y generarán un pulso
cada vez que uno de los imanes permanentes del rotor pase justo enfrente de él. De esta forma
podemos conocer tanto la velocidad como la posición precisa en la que se encuentra el rotor en cada
instante, en función de la información conjunta aportada por los tres sensores Hall.
Estas señales son single-ended, por lo que no debemos replicar el circuito diseñado para acondicionar
las señales del encóder. En su lugar, utilizaremos el circuito implementado en la tarjeta X-NUCLEO-
IHM07M1:
49
Diseño del controlador
Ilustración 48:Circuito acondicionador de las señales de los sensores Hall y del encóder en la tarjeta X-
NUCLEO-IHM07M1.
50
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Además, cuando se arranque la ejecución del firmware, se leerán 7 pines GPIO del microcontrolador
para programar el ID CAN. Utilizaremos 7 interruptores que permitirán establecer un nivel alto o
bajo en los pines del microcontrolador B0, B1, B2, B3, B4, B5, B6 y B7. Otro interruptor permitirá
habilitar la resistencia de terminación en nuestro controlador, en caso de que el controlador se
encuentre en uno de los extremos del bus CAN. Estos ocho interruptores se integran en el componente
CVS-08B:
Por otra parte, es necesario tener acceso a la interfaz UART (Universal Asynchronous
Receiver/Transmitter) del microcontrolador. Para ello, solo necesitamos incluir un conector en la
tarjeta que de acceso a esos pines.
Los pines del microcontrolador destinados a la interfaz UART son el A2 para la transmisión de datos
y el A3 para la línea de recepción. Por problemas de espacio, estas señales se conectarán al mismo
conector que dará acceso a 4 pines GPIO del microcontrolador, el J7.
51
Diseño del controlador
Ilustración 51: Divisor resistivo para la medida de la tensión en el bus de alimentación de la tarjeta X-
NUCLEO-IHM07M1.
Es necesario incluir este divisor resistivo, ya que los pines del microcontrolador no soportan tensiones
tan altas como las del bus de alimentación. En concreto, este divisor presenta una atenuación de 0,052
V/V. De esta forma, en el pin del ADC del microcontrolador al que se conecta la medida de tensión
tendremos una tensión máxima de 1,75 V.
Podríamos ajustar el divisor resistivo para obtener 3,3 V (tensión máxima de los pines del
microcontrolador) en lugar de 1,75 V. Pero esto cambiaría la atenuación del divisor, lo que obligaría
a modificar el firmware. Por ello, utilizaremos los mismos valores de resistencia que se utilizan en el
diseño de la X-NUCLEO-IHM07M1. El condensador C14 de la Ilustración 51 se encarga de filtrar el
posible ruido y hacer que la señal que llega al ADC sea lo más clara posible.
Por otra parte, para medir la temperatura a la que se encuentra el circuito L6230 (que será la parte de
la tarjeta en la que más potencia se disipe), implementaremos otro divisor resistivo en el que una de
las resistencias será una de coeficiente de temperatura negativo (NTC) en lugar de una resistencia
fija. Implementaremos el mismo circuito que existe en la tarjeta X-NUCLEO-IHM07M1:
La resistencia del termistor disminuirá conforme aumente la temperatura, por ser su coeficiente de
temperatura negativo. Según la fórmula del divisor resistivo, tendríamos:
𝑁𝑇𝐶
𝑉𝑇𝐹𝐵 =
𝑁𝑇𝐶 + 4,7 𝑘Ω
Por tanto, cuando la tensión en el divisor resistivo descienda por debajo de un determinado valor, el
firmware detendrá el funcionamiento del controlador.
52
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
53
Diseño del controlador
Ilustración 53: Documento generado a partir del Layer Stack Manager de Altium Designer.
Como vemos, nuestra tarjeta contará con 4 capas de cobre (en color naranja y numeradas) y 3 capas
de dieléctrico FR-4, situadas entre las capas de cobre. Adicionalmente, se representan las capas de
soldermask7 y leyendas (Overlay) superior e inferior, que suelen encontrarse en todas las PCB.
La capa interna número 2 estará destinada a trazar un plano de masa. Este plano se extenderá por toda
la tarjeta, ya que una masa homogénea (sin cortes o agujeros) en el circuito disminuye la generación
de ruido en las señales. En la capa interna número 3 se distribuirán los planos de las 4 tensiones de
alimentación que existen en el circuito. Las capas de cobre externas 1 y 4 serán utilizadas para trazar
las pistas entre los componentes del circuito.
Por otra parte, las dimensiones y forma de la tarjeta fueron establecidas por el departamento de
Mecánica de Star Robotics. Esta tarjeta debe tener una forma rectangular, con una longitud de 82 mm
y una anchura de 33 mm. Para establecer el área de la tarjeta en el documento de diseño, trazaremos
unas líneas con estas dimensiones en la capa Mechanical 17. Después, las seleccionaremos e
indicaremos a Altium Designer que ésos son los límites de la tarjeta en la pestaña Design:
Ilustración 54: Bordes de la tarjeta del controlador (en rosa) en Altium Designer.
7
El soldermask es un material que facilita la soldadura de los componentes en la tarjeta ya que, sobre él, el estaño no se
suelda. Este material se impregna en las caras exteriores de la PCB, donde se colocan los componentes, para hacer que
todo el estaño quede recogido en los pads de los componentes.
54
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Alimentación
Encóder
Medida de las
CAN y corrientes
Bloque de control
UART
Inversor
trifásico
Hall
También es importante respetar las reglas que impone el fabricante de la tarjeta para evitar que se
produzcan errores en su producción. El fabricante de nuestra tarjeta será Eurocircuits y las principales
normas de diseño a las que debemos prestar atención para colocar los componentes son:
Distancia mínima entre pads de componentes adyacentes: los pads de dos componentes
pequeños (tales como resistencias o condensadores cerámicos) deben mantener una distancia
entre ellos de al menos 1mm. Para componentes más grandes, como algunos integrados, es
recomendable dejar algo más de distancia.
Distancia mínima entre una leyenda y un pad: si no se respeta una distancia entre estos
elementos de al menos 0,2mm, la leyenda del componente será borrada parcialmente:
Pese a que la leyenda sigue siendo legible, es preferible evitar esta violación, ya que dificulta
el proceso de fabricación y puede generar problemas. A este ajuste se le conoce como
Clipping.
Distancia mínima entre dos pistas o entre pad y pista: a la hora de colocar los componentes
debemos ir pensando por dónde se trazarán las pistas de manera aproximada, para dejar
espacio y poder trazarlas.
55
Diseño del controlador
3.3.3. Ruteo.
Llamamos ruteo al proceso de trazar las pistas que conectan los pines de los componentes de la tarjeta.
El recorrido de estas pistas, así como su ancho, resulta crucial para evitar introducir ruido en las
señales y poder disipar el suficiente calor en las señales que transportan una mayor intensidad de
corriente.
A la hora de rutear la tarjeta, tendremos siempre en cuenta las siguientes reglas y buenas prácticas:
Antes de empezar a rutear las conexiones entre zonas, es conveniente pensar de manera
aproximada por dónde trazaremos las pistas de señales que recorren distancias largas.
Debemos empezar a rutear por zonas pequeñas y bloques funcionales. Por ejemplo, debemos
rutear las redes de amplificación de medida de las corrientes antes que trazar las pistas que
van del chip L6230Q al microcontrolador.
En circuitos repetidos (como las redes de amplificación), el trazado de las pistas debe ser
prácticamente igual.
8
Los fabricantes asignan una clase a cada PCB en función de la dificultad de fabricación de la misma. Por ejemplo, cuanto
menor sea la distancia entre pistas, la fabricación será más compleja y la clase de la tarjeta será más alta. Así, todos los
fabricantes establecen unos límites de distancias entre elementos y de tamaño de agujeros y vías para clasificar una tarjeta
en una clase u otra. La clase de nuestra PCB será 6C.
56
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Las pistas deben entrar de manera perpendicular al pad y hasta el centro del mismo. De esta
forma evitaremos que el componente pueda desplazarse al ser soldado.
Dejar una separación entre las pistas y los pads conectados a una misma señal de mínimo
0,2mm para evitar peelables9:
Ilustración 60: Trazado correcto de dos pistas que deben conectarse al mismo pad.
9
Los peelables son pequeñas áreas que existen entre dos pistas o pads que provocan que pueda desprenderse la foto-
resistencia utilizada para imprimir las pistas de cobre en las capas conductoras de la tarjeta.
57
Diseño del controlador
Nunca deben trazarse ángulos rectos en una pista. Esto provoca variaciones en la sección de
la pista, lo cual provoca cambios de la impedancia a lo largo de la pista. Este efecto introduce
mucho ruido en la señal.
Las vías deben tener 0,25mm de diámetro de agujero y 0,6mm de diámetro total para ajustarse
a la clase de fabricación C de Eurocircuits.
Tratar que las pistas hagan el menor número de curvas posibles. Esto ayudará a reducir el
ruido introducido en la señal y a ahorrar espacio en la tarjeta.
Un plano de cobre es un área sobre alguna de las capas conductoras de la PCB que se encuentra
recubierta completamente por cobre. De forma general, colocar un plano de cobre para que por él
circule una determinada señal presenta las siguientes ventajas:
Se facilita el ruteo, pues se deberán trazar menos pistas. De esta forma, se reduce el recorrido
que debe realizar una determinada señal, lo que es especialmente importante en el retorno de
las señales a masa.
Se consigue una mayor disipación de calor en señales que manejan intensidades de corriente
altas. Al aumentar la superficie de un buen conductor térmico (como lo es el cobre) se facilita
el intercambio de calor entre éste y el ambiente.
Cuanto mayor sea la sección de un conductor, menor será su resistencia tal y como indica la
siguiente ecuación:
l
R= ρ∗
S
Donde ρ es la resistividad eléctrica del material, l la longitud del conductor y S su sección.
Por la ley de Joule, al disminuir la resistencia del conductor también disminuirá el calor que
generado:
Q = I2 ∗ R ∗ t
Cuanto más homogéneo sea el recorrido que realiza una señal (sin curvas, agujeros o vías)
menor será el ruido que se genere, debido a que la impedancia a lo largo del conductor será
más uniforme.
Por estas razones, trazaremos un plano de cobre para cada una de las tensiones de alimentación del
controlador en la capa 3 de la tarjeta. Gracias a haber colocado los componentes de forma ordenada
según los bloques funcionales definidos, es sencillo definir los planos de alimentación, ya que todos
los circuitos que necesitan la misma tensión de alimentación quedan muy cercanos entre sí. Este es
el diseño que se ha implementado en la PCB del controlador:
58
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
5V
33 V
V
3,3 V A3,3 V
Ilustración 61: Planos de cobre de las tensiones de alimentación en la tarjeta del controlador.
Este plano se representa en negativo, lo que quiere decir que las zonas rojas más opacas representan
las zonas donde no habrá cobre. Como vemos, la zona del oscilador se ha dejado sin cobre, ya que
podría afectar negativamente al funcionamiento del mismo. El resto de líneas representan los límites
entre los planos.
En la capa 2 de la tarjeta colocaremos las dos masas del circuito: la digital y la analógica. Pese a que
están conectadas entre sí, debemos procurar que se conecten en un único punto del circuito lo más
pequeño posible. De esta forma evitamos introducir el ruido generado por las conmutaciones de la
parte digital del circuito en la parte analógica. Esta capa también se representa en negativo:
GND
AGND
Como vemos, el plano de la masa analógica (destinado a los amplificadores que acondicionan la
tensión caída en las resistencias de shunt) está totalmente separado del plano de masa general. Estos
dos planos están conectados únicamente a través del solderbridge JP2. También para evitar introducir
ruido en el oscilador, disminuimos el punto de conexión de la masa que queda debajo del oscilador
con la masa general al mínimo.
59
Diseño del controlador
Además, para disipar el máximo calor posible y tener un recorrido homogéneo, cada una de las
corrientes de salida del circuito L6230 que alimentan al motor se conectan a éste mediante un plano
de cobre del máximo tamaño posible en la capa 4. Lo mismo ocurre con la conexión de los pines
SENSEx a las resistencias de shunt:
Ilustración 63: Planos de cobre para conectar las fases 2 y 3 del motor al circuito L6230Q.
Ilustración 64: Plano de cobre para conectar la salida SENSE1 del circuito L6230Q a la resistencia de
shunt.
60
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Report Board Stack: este archivo contiene la información que podíamos visualizar en la
herramienta Board Stack Manager de Altium. Representa las diferentes capas que forman la
tarjeta, el material del que se forman, su espesor, etcétera. Es un fichero Excel, el cual se
mostró en la Ilustración 53.
Este fichero resulta muy útil al fabricante ya que, pese a que los ficheros GerberX2 ya
contienen la información sobre el orden y la numeración de la tarjeta, con este fichero le
aportamos información adicional, como el material de fabricación o su espesor.
61
Diseño del controlador
Estos datos pueden ser utilizados para comprobar que el diseño realizado se corresponde con
las características seleccionadas en el pedido.10
Bill of Materials (BOM): se trata de un documento Excel en el que quedan recogidos todos los
componentes que forman la tarjeta y sus principales parámetros. Este fichero solo es necesario
entregarlo al fabricante si se va a solicitar el ensamblaje de los componentes en la tarjeta
(como será nuestro caso). Los datos que deben recogerse en este fichero, según recomienda
Eurocircuits son:
o Designator: nombre del componente en el diseño (el mismo que se verá en la
leyenda).
o Description: Descripción del componente. Tipo de componente, encapsulado, tensión
o potencia máxima que soporta, etcétera.
o Manufacturer_Name: nombre del fabricante.
o Manufacturer_Part_Number: referencia que el fabricante da al componente.
o Value: valor de la resistencia, capacidad o inductancia de un componente.
o Mounting Type: tipo de montaje del montaje del componente. Puede ser de montaje
superficial (Surface Mounted Device-SMD) o de inserción (Through Hole-TH).
o Distributor: nombre del suministrador donde se puede encontrar el componente.
o Reference: referencia que el suministrador da al componente.
o Distributor Link: link de la web del distribuidor del componente.
Estos parámetros son editados manualmente en cada componente nuevo que se añade a las
librerías de símbolos y footprints de componentes, utilizando la herramienta Parameter
Manager de Altium. Con esta información, el fabricante es capaz de buscar y comprar los
componentes exactos que queremos montar en nuestra tarjeta.
Pick and Place: este fichero contiene las coordenadas de la tarjeta dónde deben colocarse cada
componente. Además, informa sobre la orientación del mismo y la capa (Top o Bottom) sobre
la que deben montarse. Este fichero será interpretado por la máquina de Pick and Place del
fabricante, la cual coloca cada componente en su posición de forma automática. Esto solo
ocurre con los componentes SMD. Los TH son montados por operarios manualmente.
Al igual que ocurría con el fichero BOM, este archivo solo debe entregarse al fabricante si se
va a solicitar el ensamblaje de la tarjeta.
Ilustración 65: Fragmento del documento Pick and Place de la tarjeta del controlador.
10
En los pasos finales del pedido de la tarjeta a Eurocircuits, se solicita indicar el espesor de las capas de las tarjetas, así
como el material del dieléctrico. Por eso, con el fichero Board Stack Report pueden corroborar que las opciones
seleccionadas en el pedido se corresponden con el diseño.
62
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Con estos documentos el fabricante es capaz de fabricar nuestra tarjeta. Antes de finalizar el pedido,
debemos verificar que todos los componentes son reconocidos por el fabricante, así como que la
interpretación del fichero Pick and Place es correcta. Para ello, Eurocircuits ofrece un visualizador
en su web que interpreta los ficheros Gerber y el Pick and Place para representar la posición de los
componentes sobre la tarjeta. Estos aparecen como cuadrados rojos sobre los pads de los
componentes. De esta forma, si se observa que los cuadrados no coinciden con la posición de los
pads, podemos ajustar la posición del componente y editar el fichero Pick and Place.
63
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Capítulo 4
Calibración y puesta en marcha del
controlador.
El proceso de calibración del controlador consiste en ajustar una serie parámetros del firmware con
el fin de lograr un compromiso entre rapidez y suavidad en la respuesta de los motores. Este proceso
resulta fundamental para que los motores puedan ser controlados de forma rápida y precisa, así como
para evitar tensiones mecánicas demasiado grandes en los diferentes componentes del motor.
En concreto, los parámetros que se deben ajustar son las constantes Kp, Ki y Kd de los reguladores PID
que intervienen en el algoritmo de control FOC. Estos parámetros determinarán la señal de salida de
cada regulador y, en consecuencia, son los parámetros más influyentes en la respuesta del motor.
Pero antes de calibrar el controlador, debemos verificar el correcto estado y funcionamiento de las
PCB recibidas, así como programarlas por primera vez y comprobar que tanto el hardware diseñado
como el firmware generado son aptos para nuestra aplicación.
Por último, describiremos las modificaciones y funcionalidades más importantes añadidas al
firmware generado a partir de MotorControl Workbench, como son el cálculo de una nueva
trayectoria S-Curve en los cambios de posición y la mejora de la resolución de la medida de la tensión
del bus de alimentación.
65
Calibración y puesta en marcha del controlador
Ilustración 67: Marca del pin positivo (“+”) del condensador C18.
Comprobación de la posición de los circuitos integrados: para evitar errores en el montaje los
encapsulados de los circuitos integrados suelen tener marcados el pin número 1. Por nuestra
parte, debemos añadir en el footprint de estos componentes una marca que indique la posición
del primer pin. Esta marca suele ser un punto.
Ilustración 68: Punto que indica el pin 1 de los receptores de las señales del encóder.
66
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Limpieza de las PCBs: en ocasiones, las PCBs recibidas tienen adheridos algunos residuos
del proceso de soldadura, principalmente restos de fundente11. Para eliminarlos, puede
utilizarse una cubeta de ultrasonidos o un limpiador de fundente, el cual se aplica en la tarjeta
en forma de spray y permite retirar los restos de fundente con un cepillo.
Comprobación de posibles cortocircuitos: una vez tenemos las tarjetas limpias, debemos
comprobar que no existen cortocircuitos entre los pines más cercanos de los componentes.
Para ello, primero se realiza una inspección visual con el microscopio y, si se observa algún
posible cortocircuito, utilizamos el polímetro para comprobar si existe continuidad entre esos
pines.
Una vez comprobados los principales problemas que puede presentar el hardware y con las tarjetas
limpias, podemos programarlas y comprobar su funcionamiento. En primer lugar, debemos fabricar
el conector para poder alimentar el controlador. Para ello, utilizaremos dos cables AWG 20, los
crimparemos y los introduciremos en un conector Molex Minifit. El otro extremo de cada cable irá
soldado en los soldercups del conector J4.
Tras ello, conectaremos el controlador a una fuente de alimentación programada a 30 V y con una
limitación de corriente de 0,5 A. Si el controlador está alimentado correctamente, veremos el LED
LD2 encendido.
A partir de aquí, podemos programar el controlador a través de su interfaz SWD. Para ello
necesitaremos utilizar el dispositivo ST-LINK/V2, que se utiliza de interfaz entre el puerto USB del
PC y el conector SWD del controlador y nos permite programar y depurar en microcontroladores de
ST de la familia STM8 y STM32. También utilizaremos el software gratuito STM32 ST-LINK Utility,
el cual nos permite escribir y verificar la programación de la memoria flash del microcontrolador
mediante una interfaz gráfica bastante sencilla.
Tras iniciar el programa, conectaremos el ST-LINK/V2 a uno de los puertos USB del PC y al
controlador. Pulsando sobre Target -> Connect obtendremos una conexión. Para programar el
microcontrolador, debemos pulsar en ST-LINK -> Program & Verify. En unos 3 segundos se habrá
programado el controlador.
11
El fundente, también conocido por su nombre en inglés (flux), es un compuesto químico utilizado en el proceso de
soldadura electrónica el cual mejora su calidad. Entre sus principales propiedades, podemos mencionar que elimina el
posible óxido de los componentes y que concentra el calor para facilitar la fundición del estaño.
67
Calibración y puesta en marcha del controlador
El firmware que se programará en los controladores encenderá el LED LD1 nada más comience la
ejecución del código, lo cual nos permitirá verificar que la programación del controlador y la
ejecución del código es correcta. Tras este procedimiento, habremos verificado el correcto
funcionamiento de los bloques de alimentación y del microcontrolador. A partir de aquí, realizaremos
el resto de pruebas y modificaciones pertinentes para poder verificar el correcto funcionamiento del
controlador completo.
12
En un sistema de control en lazo cerrado, nos referimos con PID (Proportional, Integral and Derivative) a un regulador
que calcula la señal de acción (y) a partir de la suma de las respuestas proporcional, integrada y derivada de la señal de
su entrada (e). En un sistema discreto como el procesador: 𝑦(𝑡) = 𝐾𝑝 ∗ 𝑒(𝑡) + 𝐾𝑖 ∗ ∑𝑡𝑗=0 𝑒(𝑗) + 𝐾𝑑 ∗ (𝑒(𝑡) − 𝑒(𝑡 − 1)).
68
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Para calibrar los reguladores de corriente debemos obtener los valores de Kp y Ki de los reguladores
de las corrientes Iq e Id , llamados PId y PIq en la Ilustración 13. Como podemos deducir de sus siglas,
estos reguladores no tienen en cuenta la derivada de la señal de entrada (son reguladores PI).
Para obtener estos valores ST recomienda generar dos escalones de corriente en las fases del motor y
observarlo en el osciloscopio. El objetivo es observar un escalón limpio, en el que la corriente varía
rápidamente, pero sin sobreimpulsos:
Ilustración 71: Escalón de corriente ideal que debemos observar en las fases del motor durante la
calibración.
En la ventana Configuration del monitor de MCWB, aparece una tabla en la que se puede programar
una rampa de velocidad y torque para alinear el motor durante su arranque en un control FOC sin
sensores. En este caso, la utilizaremos para programar el escalón de corriente
69
Calibración y puesta en marcha del controlador
Mediante 5 fases en las que la velocidad se mantendrá a cero, generaremos el escalón de corriente.
Para ello, en la columna Final Torque indicaremos la corriente13 que queremos aplicar en las fases
del motor. En la columna Duration, configuramos el tiempo durante el que se aplicará dicha corriente,
en milisegundos.
Estos valores son enviados al controlador por el puerto serie desde el PC hasta el controlador. Una
vez configurado, colocamos la pinza amperimétrica en la fase A del motor y lo arrancamos. Si el
osciloscopio está configurado correctamente, observaremos algo similar al escalón mostrado en la
Ilustración 71. Pueden darse dos problemas:
La variación de la corriente es demasiado lenta (como en la Ilustración 73). Esto se debe a
que el valor de Ki es demasiado bajo.
Ilustración 73: Ejemplo de una respuesta lenta de la corriente en la fase A del motor.
Ilustración 74: Ejemplo de respuesta ruidosa debido a valores demasiado altos de Kp y Ki.
13
Las unidades de estos valores se verán más adelante.
70
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Para comenzar la calibración, ST recomienda asignar el valor 0 a las constantes Kp y Ki del regulador
de la corriente Id y calibrar únicamente el regulador de la corriente Iq. Esto se debe a que es muy
complicado regular simultáneamente ambos reguladores y a que el valor de Kp y Ki en ambos
reguladores puede ser prácticamente el mismo en el 95 % de los motores BLDC.
Si la respuesta es demasiado lenta, aumentaremos el valor de Ki hasta que se produzca un
sobreimpulso en alguno de los dos escalones. En ese momento, aumentaremos Kp hasta que
desaparezca el sobreimpulso.
Debemos seguir aumentando Ki y Kp (en este orden) sin llegar a una respuesta demasiado ruidosa14,
como ocurría en la Ilustración 74. Los valores que escogeremos serán los más altos posibles, siempre
que no generen demasiado ruido. Estos mismos valores se aplicarán al regulador PId.
Tras calibrar los reguladores de corriente, ST ajusta los parámetros que definen en cambio del control
en lazo abierto a control en lazo cerrado. En el control FOC sensorless, el sistema de control del
motor comienza a funcionar en lazo abierto, ya que cuando el motor está parado, éste no genera
ningún BEMF y no se puede averiguar la posición de rotor. Dado que nuestro motor dispone de
sensores Hall y encóder, se puede conocer en cualquier momento la posición del rotor y no será
necesario ajustar los parámetros del cambio de lazo abierto a lazo cerrado.
El último paso es la calibración del regulador de velocidad. Este proceso es bastante similar al
realizado en los reguladores de corriente: si en la gráfica de la velocidad se observa que la respuesta
el lenta, aumentaremos Ki hasta que se produzca un sobreimpulso. En ese momento, aumentaremos
Kp para que desaparezca. Si se producen muchas oscilaciones, se debe a que los valores de Kp y Ki son
demasiado altos.
14
Parte del ruido observado en los dos escalones en los que la corriente se mantiene constante se debe a la frecuencia de
conmutación de las señales PWM aplicadas sobre los MOSFET de los tres semipuentes en H. Este ruido podría reducirse
si aumentamos la frecuencia de estas señales, pero esto también incrementaría las EMI emitidas por el controlador, por
lo que se mantendrá el valor de la frecuencia por defecto.
71
Calibración y puesta en marcha del controlador
El número de diferencias encontradas es demasiado grande como para enumerarlas en esta memoria,
pero la manera en la que han sido tratadas en el firmware del controlador ha sido la misma en todas
ellas:
En el caso de querer realizar la calibración de los reguladores PI de corriente del controlador, se
activará la directiva del preprocesador CALIBRATION. Esto se hará en las opciones de
compilación del proyecto en STM32CubeIDE.
Para decidir que código debe compilarse, utilizaremos las directivas del preprocesador #ifnef,
#else y #endif:
#ifndef CALIBRATION
MCT[M1].pRevupCtrl = MC_NULL; /* only if M1 is not sensorless*/
MCT[M1].pSpeedSensorMain = (SpeednPosFdbk_Handle_t *) &ENCÓDER_M1;
MCT[M1].pSpeedSensorAux = (SpeednPosFdbk_Handle_t *) &HALL_M1;
MCT[M1].pSpeedSensorVirtual = MC_NULL;
#else
MCT[M1].pRevupCtrl = &RevUpControlM1; /* only if M1 is sensorless*/
MCT[M1].pSpeedSensorMain = (SpeednPosFdbk_Handle_t *) &STO_PLL_M1;
MCT[M1].pSpeedSensorAux = MC_NULL;
MCT[M1].pSpeedSensorVirtual = &VirtualSpeedSensorM1; /* only if M1 is
sensorless*/
#endif
72
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Por ejemplo, vemos como en el fichero mc_tasks.c, cambiará el valor asignado a algunas de las
variables de la estructura MCT[M1] en función de si definimos la directiva CALIBRATION al
compilar el firmware o no.
En el caso de las funciones cuyo código es diferente en función de los sensores configurados, se
codificarán de ambas formas: una de estas implementaciones se codificará en caso de no definirse
CALIBRATION y la otra, en caso de definirse. Esto ocurre por ejemplo con la función
TSK_HighFrequencyTask(void).
Sí que es importante mencionar la parte del código donde se definen la amplitud y duración de los
escalones de corriente, ya que puede que se necesite editar en algún momento. Estas constantes se
definen al final del fichero fichero drive_parameters.h. La duración de los escalones se expresa en
milisegundos y la amplitud de la corriente al final de cada fase cumple la ecuación:
Este trabajo ha sido necesario para poder obtener unos valores de calibración lo más óptimos posibles
para las condiciones reales de trabajo y poder calibrar los controladores ya montados en el módulo
de visión del robot. Esto deja inaccesible el puerto serie del controlador y hace imposible utilizar
MCWB para programar el escalón de corriente.
Gracias a las modificaciones mencionadas, el controlador tendrá los escalones de corriente ya
programados en su firmware y tan sólo necesitaremos enviarle los comandos necesarios para arrancar
el motor, pararlo, reconocer los fallos producidos (Fault ACK) y modificar el valor de las constantes
de los reguladores PID.
73
Calibración y puesta en marcha del controlador
En el bloque Registros de Lectura podemos seleccionar los registros cuyo valor queremos visualizar.
Si activamos la casilla de la derecha de cada uno de los desplegables, estos registros se actualizarán
constantemente y sus valores se representarán en la gráfica superior.
En el bloque Registros de Escritura podemos escribir un valor en cualquiera de los registros de
escritura del controlador. Una vez introducido el nuevo valor y tras salir de la casilla de escritura, se
activará la casilla de al lado, indicando que el registro se ha escrito correctamente. Esto se utilizará,
por ejemplo, para probar distintos valores de Kp y Ki en cada regulador.
En el bloque Comandos derecho podemos seleccionar el comando que queremos que ejecute el
controlador. Si pulsamos el botón Execute, este comando se enviará al controlador. Al ser recibido,
se activará la casilla cuadrada de su izquierda.
Finalmente, en el bloque Mensajes de Error se muestran los posibles errores que puedan darse.
La interfaz entre el PC que ejecuta el software de control y la interfaz CAN del controlador será la
tarjeta EMCB-200U-MP10E, de Advantech. Es un dispositivo plug&play, por lo que será suficiente
con conectarla a un puerto USB del PC y a uno de los dos conectores CAN del controlador (J1 o J2)
para poder comunicarnos con él.
15
A partir de aquí, a este programa le denominaremos programa de control.
74
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
4.2.3.1. Conexionado.
En primer lugar, conectaremos la tarjeta EMCB-200U-MP10E al bus CAN del módulo de visión. Esta
tarjeta también se conectará al puerto USB del PC a través de su conector USB1. Es importante
conectar la resistencia de terminación en la tarjeta EMCB-200U-MP10E y en el controlador del eje
Tilt (eje horizontal). Para ello, colocaremos en la posición ON el microinterruptor 8 del circuito
integrado S1 del controlador (en la tarjeta EMCB-200U-MP10E se activa mediante un software
ofrecido por el fabricante).
Después, conectaremos la alimentación. Para ello, conectaremos la fuente de alimentación al
controlador, a través del conector mostrado en la Ilustración 69. Alimentaremos el controlador a 30
V (igual que la tensión nominal de la batería del robot) y limitaremos la corriente a 400 mA.
Para calibrar los reguladores PI de las corrientes Iq e Id, debemos compilar el firmware del controlador
con la directiva CALIBRATION definida. Después, programaremos el controlador con ese firmware.
Si el controlador recibe el comando START MOTOR, circulará por sus fases los escalones de corriente
programados. Podremos observarlo en el osciloscopio conectando la sonda amperimétrica a la fase A
del motor. Si colocamos la sonda en cualquiera de las otras dos fases, observaremos dos escalones en
los que la amplitud será la mitad de la indicada en el código.
75
Calibración y puesta en marcha del controlador
Para obtener los valores óptimos de Kp y Ki, aplicaremos el método definido por ST Microelectronics
y que hemos descrito en el apartado 4.2.1. Tras aumentar lentamente el valor de las constantes, los
mejores resultados obtenidos se muestran en la Ilustración 79:
Tras obtener esta respuesta, se realizó otra prueba con unos valores superiores: Kp = 4000 y Ki = 3900.
En este caso se pueden observar unas sobreoscilaciones en el primer escalón de corriente.
Tras obtener los valores finales de las constantes para el regulador de Iq, los utilizaremos también para
el regulador de Id. Podemos verlos en la Tabla 4.
Para realizar esta calibración debemos actualizar el valor de las constantes de los reguladores PIq y
PId obtenidos anteriormente y compilar el firmware del controlador sin definir la directiva
CALIBRATION. Después, programaremos el controlador. En este caso también aplicaremos el
método que propone ST Microelectronics.
En primer lugar, estableceremos unos valores bajos de Kp y Ki. Obtendremos una respuesta lenta y
con muchas oscilaciones, como observamos en la Ilustración 81:
76
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Ilustración 82: Velocidad del motor (en verde) con Kp = 5000 y Ki =25000
Los valores con los que mejores resultados se han obtenido son: Kp = 3500 y Ki = 20000. Esta
respuesta se muestra en la Ilustración 83.
Ilustración 83: Velocidad del motor (en verde) con Kp = 3500 y Ki = 20000 (valores finales).
77
Calibración y puesta en marcha del controlador
En la respuesta obtenida con los valores resultantes de la calibración del regulador de velocidad aún
se observan oscilaciones. Estas también pueden deberse a efectos mecánicos, tales como la fricción
entre las piezas del módulo de visión, ya que vemos que depende del instante de tiempo (y por tanto,
de la posición) en el que nos encontremos.
Para realizar esta calibración, actualizaremos el valor de las constantes Kp y Ki del regulador de
velocidad y compilaremos el firmware del controlador sin activar la directiva CALIBRATION. En
este caso utilizaremos el método recomendado por ST Microelectronics en su documento AN5464
[10]:
Programaremos todas las constantes del regulador de posición a 0.
Aumentar Kp hasta que el motor comience a oscilar. Este efecto podemos verlo si ordenamos
un cambio de posición.
Aumentar Kd hasta que deje de oscilar.
Repetir estos pasos hasta que Kd no haga desaparecer las oscilaciones.
Aumentar Ki hasta obtener la respuesta deseada. Si este valor es demasiado bajo, la respuesta
será demasiado lenta y, si es demasiado alto, se producirá un sobreimpulso al alcanzar la
posición objetivo.
Ilustración 84: Respuesta con los valores resultantes de la calibración: Kp = 2000, Ki = 300 y Kd = 200.
A modo de resumen final, en la Tabla 4 se muestran los valores de cada una de las constantes de los
reguladores PID calibrados:
Valores para el regulador de corriente. Driver LP y Vishan ECG2240 Pan
Kp 3800
PI de Iq e Id
Ki 3700
Kp 3500
PI de velocidad
Ki 20000
Kp 2000
PID de posición Ki 300
Kd 200
Para obtener voltios reales a partir del código digital, éste se multiplica por la variable
ConversionFactor, que se define como:
𝑉𝑀𝐶𝑈
𝐶𝑜𝑛𝑣𝑒𝑟𝑠𝑖𝑜𝑛 𝐹𝑎𝑐𝑡𝑜𝑟 =
𝑎𝑡𝑒𝑛𝑢𝑎𝑐𝑖ó𝑛 𝑑𝑖𝑣𝑖𝑠𝑜𝑟
79
Calibración y puesta en marcha del controlador
Fichero paramaters_conversion.h:
o ADC_REFERENCE_VOLTAGE: 3.30 -> 3300.0 (VMCU)
o Cambiar el tipo de dato con el que se hace casting en la constante
OVERVOLTAGE_THRESHOLD_d. Pasamos de uint16_t a uint32_t para evitar que se
produzca overflow.
Fichero drive_parameters.h:
o OV_VOLTAGE_THRESHOLD_V: 35 -> (uint32_t) 35000 (tensión de disparo de la
protección por sobretensión, en mV).
o UD_VOLTAGE_THRESHOLD_V: 22 -> (uint32_t) 22000 (tensión mínima de
alimentación, en mV).
Fichero power_stage_parameters.h:
o dV_dT: 0.023 -> 23.0
o VO_V: 1.055 -> 1055.0
Ilustración 85: Perfil del jerk y la aceleración calculados por el firmware STM32 MC SDK.
Esta trayectoria S-Curve tiene por objetivo obtener un perfil de aceleración trapezoidal, definiendo
un jerk constante en cada uno de los intervalos del movimiento. De esta forma se consigue minimizar
el estrés mecánico que sufriría el motor en caso de que el perfil de la aceleración fuese escalonado
pues esto implicaría cambios instantáneos en la aceleración (que, en la realidad, son imposibles de
conseguir).
80
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
ST explica que, para facilitar los cálculos, aproxima la duración de las tres fases del movimiento
(aceleración, velocidad de crucero y deceleración) al mismo valor. Esto provoca que, ante cambios
grandes de posición (más o menos, a partir de 100 grados), la aceleración y deceleración del motor
sea demasiado lenta, ya que crece la duración de las fases (debido al aumento de la duración de
velocidad constante).
Para conseguir una respuesta más rápida, modificaremos el firmware del controlador para que se
calcule la duración mínima de cada una de las fases del movimiento en función únicamente del
desplazamiento ordenado.
81
Calibración y puesta en marcha del controlador
Todos los parámetros definidos se tratan de magnitudes angulares, ya que el desplazamiento que
realiza el rotor del motor es angular. A lo largo de este apartado, mencionaremos a todos estos
parámetros sin la connotación de angular.
En cuanto a las fases de la trayectoria, ya hemos distinguido tres grandes intervalos, los cuales se
corresponden con los definidos en la AN5464 [10] de ST: aceleración, velocidad de crucero y
deceleración.
Además, dentro de las fases de aceleración y deceleración, distinguiremos tres sub-intervalos, entre
los que cambiará el valor del jerk. Para entenderlo mejor, nos fijaremos en la Ilustración 87, la cual
muestra las gráficas descritas por los cuatro parámetros del movimiento en una trayectoria de
velocidad S-Curve:
Ilustración 87: Perfil del jerk, la aceleración, la velocidad y la posición en una trayectoria S-Curve.
La fase de aceleración estaría comprendida entre los instantes t0 y t3. En ella, vemos como la
aceleración describe un perfil trapezoidal y se alcanza la velocidad de crucero:
82
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Así, la tarea del firmware será calcular cada uno de estos intervalos de tiempo y asignar el valor
correcto al jerk en cada intervalo en función del desplazamiento de consigna. La aceleración, la
velocidad y la posición serán calculadas en cada instante en función del valor del jerk.
Sólo aplicaremos nuestra trayectoria en los desplazamientos que sean suficientemente largos. En
concreto, solo será aplicada cuando la consigna de desplazamiento sea mayor a un valor de
desplazamiento que haga que la fase de velocidad de crucero tenga duración nula. A este
desplazamiento le denominaremos desplazamiento crítico.
En la AN5464 [10] de ST podemos encontrar las ecuaciones de las leyes del movimiento que rigen en
este tipo de trayectoria. De forma general y a partir de las definiciones de los parámetros del
movimiento, podemos afirmar que:
𝑗 = 𝑐𝑡𝑒
𝑎(𝑡) = ∫ 𝑗 ∗ 𝑑𝑡 = 𝑗 ∗ 𝑡 + 𝑎0
𝑗 ∗ 𝑡2
𝑣(𝑡) = ∫ 𝑎(𝑡) ∗ 𝑑𝑡 = + 𝑎0 ∗ 𝑡 + 𝑣0
2
j ∗ t 3 a0 ∗ t 2
s(t) = ∫ v(t) ∗ dt = + + v0 ∗ t + s0
6 2
Ahora particularizaremos estas ecuaciones para cada uno de los sub-intervalos analizados
anteriormente partiendo de una condición de inicial de reposo:
Primer sub-intervalo (𝑡0 < 𝑡 < 𝑡1 ): como podemos observar en la Ilustración 87, en este
intervalo el jerk tendrá un valor constante distinto de 0. Las condiciones iniciales son:
j11 = J; a0 = 0; v0 = 0; s0 = 0
Si sustituimos en las ecuaciones que definen el movimiento, tendremos:
t=t1
a11 (t) = j11 ∗ t → a11 = J ∗ t1
j11 ∗ t 2 t=t1 J ∗ t1 2
v11 (t) = → v11 =
2 2
3 t=t
j11 ∗ t 1 J ∗ t1 3
s11 (t) = → s11 =
6 6
Además, en la Ilustración 87 podemos ver que durante 𝑡0 < 𝑡 < 𝑡1 , la aceleración tiene una
pendiente constante que se corresponde con el jerk:
da(t) A − a0 A A
j= →J= = → t1 =
dt t1 − t 0 t1 J
Donde A es el valor de la aceleración en su fase constante. Sustituyendo esta ecuación, durante
este intervalo se cumple que:
a11 = A
A2
v11 =
2∗J
83
Calibración y puesta en marcha del controlador
J ∗ t1 3
s11 =
6
Segundo sub-intervalo (𝑡1 < 𝑡 < 𝑡2 ): en esta fase la aceleración tendrá un valor constante, A.
Por tanto, en este intervalo se describe un MUA (Movimiento uniformemente acelerado). Esto
se debe a que el valor del jerk en esta fase es nulo. Si sustituimos en las ecuaciones generales,
obtenemos:
j12 = 0
𝑎12 (𝑡) = 𝐴
𝑣12 (𝑡) = 𝐴 ∗ 𝑡 + 𝑣11
𝐴 ∗ 𝑡2 𝐴 ∗ 𝑡2
𝑠12 (𝑡) = + 𝑣0 ∗ 𝑡 + 𝑠0 → 𝑠12 (𝑡) = + 𝑣11 ∗ 𝑡
2 2
Con este intervalo, habrá finalizado la fase de aceleración y los parámetros del movimiento
tendrán el siguiente valor:
𝑎13 = −𝐽 ∗ 𝑡1 + 𝐴
−𝐽 ∗ 𝑡1 2
𝑣13 = 𝑉 = + 𝐴 ∗ 𝑡1 + 𝑣12
2
𝑡3 𝑡1 2
𝑠13 = −𝐽 ∗ + 𝐴 ∗ + 𝑣12 ∗ 𝑡1
6 2
Ahora, buscaremos una expresión de la posición final alcanzada tras la fase de aceleración.
Para ello, primero conviene obtener una expresión simplificada de V:
−𝐽 ∗ 𝑡1 2 −𝐽 ∗ 𝑡1 2 A2
𝑉= + 𝐴 ∗ 𝑡1 + 𝑣12 → 𝑉 = + 𝐴 ∗ 𝑡1 + 𝐴 ∗ 𝑡2 +
2 2 2∗J
84
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
A
Sustituimos por t1 = J :
A2 𝐴2 A2 𝐴
𝑉=− + + 𝐴 ∗ 𝑡2 + → 𝑉 = 𝐴 ∗ ( + 𝑡2 )
2∗J 𝐽 2∗J 𝐽
𝑉 = 𝐴 ∗ (𝑡1 + 𝑡2 )
𝑉 𝑉 𝐴
𝑡2 = − 𝑡1 = −
𝐴 𝐴 𝐽
Fase de aceleración (𝑡0 < 𝑡 < 𝑡3 ): La posición final alcanzada tras la fase de aceleración
será:
J ∗ t1 3 𝐴 ∗ 𝑡2 2 A2 𝑡3 𝑡1 2
𝑠1 = + + ∗𝑡 −𝐽∗ +𝐴∗ + 𝑣12 ∗ 𝑡1
6 2 2∗J 2 6 2
2
𝐴2
𝑣12 = 𝑉 − 𝑗 ∗ 𝑡1 =𝑉−
2∗𝐽
J ∗ t1 3 𝑡2 2 A2 𝑡3 𝑡1 2 𝐴2
𝑠1 = +𝐴∗ + ∗ 𝑡2 − 𝐽 ∗ + 𝐴 ∗ + (𝑉 − ) ∗ 𝑡1
6 2 2∗J 6 2 2∗𝐽
𝐴 A2
𝑠1 = ∗ (𝑡1 2 +𝑡2 2 ) + ∗ (𝑡2 − 𝑡1 ) + 𝑉 ∗ 𝑡1
2 2∗J
Sustituyendo las expresiones de t1 y t2 obtenemos:
𝑉 𝑉 𝐴
𝑠1 = ∗( + )
2 𝐴 𝐽
Fase de velocidad de crucero (𝑡3 < 𝑡 < 𝑡4 ): durante esta fase el motor se moverá a
velocidad constante. Por tanto, estamos ante un movimiento uniforme, en el que los
parámetros del movimiento toman los siguientes valores:
𝑗=0
𝑎=0
𝑣=𝑉
𝑠2 = 𝑉 ∗ 𝑡3
85
Calibración y puesta en marcha del controlador
Fase de deceleración (𝑡4 < 𝑡 < 𝑡7 ): los sub-intervalos en los que se divide esta fase son
iguales a los de la fase de aceleración, al igual que todos los parámetros del movimiento,
solo que su signo está invertido y la velocidad inicial del movimiento no es nula. En este
caso será V. Por tanto, podemos afirmar que la variación de posición durante la fase de
desaceleración será igual a la variación de la posición en la fase de aceleración. Esto
significa que:
𝑉 𝑉 𝐴
𝑠3 = 𝑠1 = ∗( + )
2 𝐴 𝐽
Desplazamiento global (𝑡0 < 𝑡 < 𝑡7 ): la variación de la posición total será conocida y puede
expresarse como:
𝑠1 =𝑠3
𝑠 = 𝑠1 + 𝑠2 + 𝑠3 → 𝑠 = 2 ∗ 𝑠1 + 𝑠2
A partir de esta expresión, podremos calcular t3, que es el último parámetro que nos queda por
conocer para poder implementar la trayectoria S-Curve:
𝑠2 = 𝑉 ∗ 𝑡3 = 𝑠 − 2 ∗ 𝑠1
𝑉 𝑉 𝐴
𝑆 − 2 ∗ ( 2 ∗ (𝐴 + 𝐽 ))
𝑠 − 2 ∗ 𝑠1
𝑡3 = =
𝑉 𝑉
𝑆 𝑉 𝐴
𝑡3 = − −
𝑉 𝐴 𝐽
𝑆 𝑉 𝐴 𝑡3 =0 𝑉 𝐴
𝑡3 = − − → 𝑆𝑐𝑟í𝑡𝑖𝑐𝑜 = 𝑉 ∗ ( + )
𝑉 𝐴 𝐽 𝐴 𝐽
86
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
𝑆 𝑉 𝐴
Tiempo de velocidad de crucero. 𝑡3 = − −
𝑉 𝐴 𝐽
𝑉 𝐴
Desplazamiento crítico 𝑉∗( + )
𝐴 𝐽
87
Calibración y puesta en marcha del controlador
Dentro de este fichero, los tiempos y valores de los parámetros del movimiento se calculan en la
función TC_MoveCommand. Nuestro algoritmo calculará el desplazamiento crítico en función de los
valores de las constantes J, A y V y lo compararemos con la consigna de desplazamiento. Si la
consigna es mayor al desplazamiento crítico, implementaremos nuestra trayectoria S-Curve. De lo
contrario, se calculará y ejecutará la trayectoria implementada por ST Microelectronics.
El primer detalle a tener en cuenta es la cuantización de los subintervalos con respecto a un tiempo
de muestreo. Esto se debe a que, en el código original de ST, se dice que la duración de cada
subintervalo debe ser un múltiplo entero del valor Sampling Time:
// WARNING: Movement duration value is rounded to the nearest valid value
// [(DeltaT/9) / SamplingTime]: shall be an integer value
Donde DeltaT/9 se corresponde que la duración de los subintervalos. En nuestro caso, esto se traduce
en que t1, t2 y t3 deben ser múltiplos enteros de Sampling Time. Para conseguirlo, dividimos el valor
de t1, t2 y t3 devueltos por las ecuaciones entre ese tiempo y hacemos un casting del resultado a tipo
int y redondeamos al entero superior. Por ejemplo, con t1:
t1 = (float) ((int)(Amax/Jmax/ samplingTime) + 1) * samplingTime;
Con estos nuevos tiempos, que son los que realmente se aplicarán en la trayectoria, debemos
recalcular los valores reales de J, A y V que se aplicarán mediante las siguientes ecuaciones obtenidas
a partir de las de la
Tabla 5:
S
V=
t 3 + t 2 + 2 ∗ t1
V
A=
t 2 + t1
A
J=
t1
Se ha tratado de mantener, en la medida de lo posible, la misma estructura que en el código original
de ST. Por ello, para asignarle la duración a cada subintervalo, se mantiene la asignación de valores
a los elementos del array SubStep [0]. En cada elemento del array debemos almacenar el tiempo total
acumulado del movimiento. Por ejemplo, la fase de aceleración quedaría definida así:
88
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
El primer parámetro que ajustaremos será V. En primer lugar, le asignaremos el valor de velocidad
máxima que se calculó en el perfil del motor con ST Motor Profiler: 12162 rpm. Pero al realizar
pruebas con tensiones de alimentación de 24 V (próxima a la tensión mínima entregada por la batería),
se observó que el valor máximo de velocidad alcanzado es aproximadamente 8000 rpm. Finalmente
aplicaremos una velocidad máxima de 7500 rpm. El valor de estas constantes en el firmware debe
darse en rad/s (V), rad/s2 (A)y rad/s3 (J). Por tanto, V quedará definido como:
#define S_Curve_TRAJECTORY_VMAX 785
En cuanto al valor de máximo de A, se han realizado varias pruebas con distintos valores, llegando a
la conclusión de que es factible alcanzar una aceleración de 5000 rad/s2:
#define S_Curve_TRAJECTORY_AMAX 5000
Finalmente, aplicamos el valor de jerk mínimo necesario para que los tiempos de los subintervalos
sean lo suficientemente grandes para que el módulo de visión alcance las posiciones calculadas. Este
valor es de 32000 rad/s3:
#define S_Curve_TRAJECTORY_JMAX 32000
El valor de jerk mínimo es el que hace que t2 sea cero. A partir de la ecuación para calcular t2,
obtenemos:
𝐴2
𝐽>
𝑉
Con estos valores, el desplazamiento crítico que resulta es de:
𝑉 𝐴 7852 5000
𝑆𝑐𝑟𝑖𝑡𝑖𝑐𝑜 =𝑉∗( + )= + 785 ∗ = 245,9 𝑟𝑎𝑑
𝐴 𝐽 5000 32000
𝑆𝑐𝑟𝑖𝑡𝑖𝑐𝑜 245,9 180
Scritico salida = = = 1,32 𝑟𝑎𝑑 ∗ = 76 𝑔𝑟𝑎𝑑𝑜𝑠
𝐼_𝑟𝑒𝑑𝑢𝑐𝑡𝑜𝑟𝑎 185,3 𝜋
Comparando la Ilustración 89 con la Ilustración 88, vemos que el tiempo del desplazamiento es
bastante inferior (13 periodos de muestreo16 frente a 27, aproximadamente) gracias a la
implementación de los cálculos que hemos realizado.
Ilustración 90: Velocidad descrita ante un desplazamiento de 300 grados con la trayectoria de ST.
16
El eje horizontal de las gráficas del programa de control representa el número de muestras tomadas, no tiempo. Estas
muestras se toman con un periodo constante.
90
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Ilustración 91: Velocidad ante un desplazamiento de 300 grados con nuestra trayectoria.
Además, si analizamos la Ilustración 90, veremos que la duración de las tres fases del movimiento es
la misma (8 periodos de muestreo, aproximadamente) y que no se supera una velocidad de 4000 rpm.
Por el contrario, en Ilustración 91 vemos como la fase de velocidad de crucero es claramente más
duradera que las fases de aceleración y desaceleración, alcanzándose la velocidad de 7500 rpm.
En conclusión, podemos afirmar que el cálculo de las ecuaciones de la nueva trayectoria y su
implementación en el firmware han sido satisfactorias, ya que se consigue disminuir
considerablemente el tiempo de los desplazamientos del módulo de visión del robot. Esto puede
suponer un factor clave en muchas de las tareas que requiera el robot como, por ejemplo, la detección
de intrusos.
91
Calibración y puesta en marcha del controlador
Comunicación por bus CAN: La prueba consiste en enviar una consigna de velocidad al motor
y comprobar su respuesta. Esta consigna de velocidad será baja (por ejemplo, 500 rpm). Tras
conectar las fases del motor y sus sensores Hall en el conector J5, el encóder en el conector
J3 y la tarjeta interfaz CAN en el conector J1 o J2 (ver Ilustración 78) el controlador estará
listo para funcionar. Debemos verificar que la resistencia de terminación del bus CAN esté
conectada (para eso, el microinterruptor 8 debe estar en la posición ON).
Para gobernar el controlador, abriremos el programa de control. Si enviamos el comando
START MOTOR, el motor debería comenzar a moverse. Para pararlo, enviaremos el comando
STOP MOTOR.
Puede que en el inicio se active algún flag de error. Para que el motor funcione, habrá que
enviar el comando FAULT ACK y verificar que el registro Flags está a 0.
Medida de la velocidad: al igual que en el punto anterior, enviaremos una consigna de
velocidad baja y enviaremos el comando STAR MOTOR. Para comprobar que la velocidad
medida concuerda con la real contaremos el número de vueltas que da el rotor en un minuto.
Si consideramos la relación de la reductora del motor (en el caso del Vishan EC2240-3016,
es de 185,3) deberíamos obtener el mismo valor que el que se almacena en el registro Current
Speed.
𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑚𝑜𝑡𝑜𝑟
𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑠𝑎𝑙𝑖𝑑𝑎 =
𝐼𝑟𝑒𝑑𝑢𝑐𝑡𝑜𝑟𝑎
Control de posición: otra de las modificaciones realizadas en el firmware del controlador fue
la de introducir la consigna de desplazamiento en grados a la salida de la reductora. Por ello,
para comprobar que el control de posición es correcto, solo tendremos que escribir la consigna
de desplazamiento, en grados, en el registro Target Position y ejecutar el comando START
MOTOR.
El firmware está programado para realizar un homing17 cada vez que entra en el modo de
control de posición (este instante coincide con la recepción de la primera consigna de
posición). Si enviamos una nueva consigna de desplazamiento (sin haber parado el motor), el
rotor debe moverse hasta la posición deseada. Para comprobarlo, debemos observar el valor
del registro Current Position y medir el desplazamiento producido.
17
El homing consiste en la búsqueda de la posición de origen. Para encontrarla, el controlador comienza a mover el motor
hasta que se alcanza algún tope mecánico. En este instante, el controlador aumenta la corriente aplicada sobre el motor
hasta un límite programado. Cuando se sobrepasa ese límite sin que el motor se mueva, se considera que se ha encontrado
la posición de origen. Esta posición de origen está programada como 90º.
92
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Si el desarrollo de estas pruebas es correcto, podemos dar por válido el funcionamiento del
controlador, pudiendo ser montado en el módulo de visión del robot.
93
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
Capítulo 5
Conclusiones.
El objetivo de este proyecto era diseñar un controlador para motores eléctricos de corriente continua
sin escobillas (BLDC) y de baja potencia, el cual implementase un algoritmo de control FOC. Tras
las pruebas y modificaciones realizadas en el capítulo 4, podemos afirmar que el resultado obtenido
con este diseño cumple las especificaciones que se establecieron en el anteproyecto. A continuación,
mencionaremos las especificaciones más importantes y justificaremos su cumplimiento:
El driver soportará una tensión de entrada de hasta 36 V: en ningún momento se ha
alimentado el controlador con una tensión superior a los 32 V máximos que entrega la batería
del robot, con el fin de no poner en peligro innecesariamente el hardware. Pero el componente
cuya tensión de entrada máxima es más baja es el convertidor DC/DC, y se sitúa en 36V. Por
ello, consideramos esta restricción como cumplida.
La PCB debe tener unas dimensiones de, como máximo, 85x35 mm: las dimensiones finales
de la PCB son 83x32 mm, por lo que se cumple esta restricción.
La PCB debe incluir una interfaz de comunicación CAN para la comunicación con otros
dispositivos del robot: esta funcionalidad ha sido comprobada en múltiples ocasiones a lo
largo de todo el proyecto como, por ejemplo, en el proceso de calibración.
Tanto el firmware como el hardware debe ser válido para implementar el algoritmo de
control FOC: el software STM32 MC SDK está especialmente diseñado para ejecutar el
algoritmo FOC y ha sido probado con éxito en el controlador diseñado, por lo que podemos
dar por validada esta restricción.
El sistema debe ser capaz de responder a situaciones de un consumo de corriente excesiva,
temperatura excesiva o tensión de alimentación inadecuada: la única situación que ha sido
comprobada ha sido la de alimentar al controlador con una tensión demasiado baja o alta,
dado que el resto de situaciones ponían en riesgo la integridad del hardware. Pero sí es cierto
que, en alguna ocasión, se ha generado el flag de Over Current, principalmente cuando la
fuente de alimentación ha sido encendida después de conectarla al controlador. Además, esta
es una funcionalidad que ST Microelectronics ofrece por defecto en el software STM32 MC
SDK, por lo que podemos dar por validada esta especificación.
Debe ser un producto completamente funcional y capaz de integrarse en los robots diseñados
por Star Robotics: el robot que actualmente está siendo desarrollado en la empresa ha
realizado algunas demostraciones ante posibles clientes con los controladores diseñados
incorporados, por lo que podemos afirmar que el controlador es completamente funcional.
Por otra parte, el desarrollo de este controlador ha supuesto un importante avance en la empresa Star
Robotics, ya que se han reducido considerablemente los costes de producción de los robots. Los
detalles del coste de los controladores y el ahorro conseguido se describen en el Anexo I:
Presupuesto .
95
Conclusiones
18
Estas competencias se corresponden con las descritas en la página web de la ETSIST de la UPM [22].
96
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
La interfaz SPI debe contar, como mínimo, de tres líneas de datos: MISO (Master In Slave Out),
MOSI (Master Output Slave Input) y SCLK (señal de reloj). La primera de ellas transporta los datos
enviados del Master (en nuestro caso, el microcontrolador) y el Slave (en nuestro caso, el sensor
inercial). Por la línea MISO circulan los datos en sentido contrario (es decir, del Slave al Master) y
por la línea SCLK el Master envía la señal de reloj al Slave.
En el caso de la interfaz SPI1, la línea MOSI se puede encontrar en los pines PB5 y PA7, los
cuales ya están ocupados en el diseño (en concreto, por las señales ID.5 del bus CAN y
EN.1 del circuito integrado L6230, respectivamente). Por tanto, no podremos utilizar esta
interfaz.
Los pines en los que se pueden encontrar las líneas MOSI (PB15 y PC3) y MISO (PB14 y
PC2) de la interfaz SPI2 también están ocupadas.
La interfaz SPI3 sí podría ser utilizada, siguiendo las siguientes conexiones:
Ilustración 96: Asignación de pines a las líneas de la interfaz SPI3 en el microcontrolador STM32L476RG.
Ilustración 97: Pines PC10, PC11 y PC12 en los esquemáticos del controlador.
Según vemos en la Ilustración 95, estos pines deberán ser configurados en la función alternativa 6
(AF6). Sí es cierto que el pin asignado a la señal de habilitación del esclavo (nSS) ya está ocupado
en nuestro diseño. Dado que esta señal es activa a nivel bajo, el pin nSS del sensor inercial deberá
ser conectado a masa.
El microcontrolador también cuenta con 3 interfaces I2C, disponibles si los pines necesarios son
configurados en la función alternativa 4 (ver Ilustración 95). Este tipo de interfaz se compone de
como mínimo 2 líneas: SDA (por la que se transmiten los datos) y SCL (por la que se transmite la
señal de reloj). Al igual que el bus SPI, se trata de una comunicación del tipo Master-Slave.
Realizando un análisis de los pines disponibles similar al realizado con las interfaces SPI, se observa
que tan solo es posible utilizar la interfaz I2C2 del microcontrolador, ya que es la única que puede
encontrarse en los pines disponibles. Éstos pueden verse en la Ilustración 98:
97
Conclusiones
Ilustración 98: Asignación de pines a las líneas de la interfaz I2C2 en el microcontrolador STM32L476RG.
Finalmente, vemos que contamos con dos posibilidades para conectar un sensor inercial: utilizar la
interfaz SPI3 o la interfaz I2C2 del microcontrolador STM32L476RG. Sería preferible utilizar la
interfaz SPI, ya que la velocidad de transmisión es considerablemente superior. Mientras que en a
través del bus I2C pueden transmitirse datos a una velocidad de hasta 5 Mbps (en el modo Ultra
Fast), el bus SPI no define una velocidad máxima de transmisión y pueden establecerse
comunicaciones de 10 Mbps o más.
Esta velocidad de transmisión determinará en cierta medida la frecuencia con la que el ordenador
central del robot puede recibir los datos de la posición de las articulaciones del brazo, lo que puede
afectar a los cálculos del movimiento.
Durante este Proyecto Fin de Grado se ha conseguido el gran avance de diseñar un controlador de
motores BLDC de bajo coste, lo cual es ventajoso tanto para la empresa Star Robotics como para el
sector de la robótica en general. Esto se debe a que el precio final del robot se reducirá, haciendo que
crezca el alcance del producto y el número de robots desplegados, contribuyendo al desarrollo de la
Industria 4.0 tanto nuestro país como en el extranjero.
98
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
ANEXOS
Anexo I: Presupuesto.
Uno de los requisitos más importantes que debía cumplir el controlador diseñado era que su precio
fuese inferior al de la solución que se implementaba en los robots anteriores. Además, nuestro
controlador debe resultar más barato y adaptase mejor al robot que el resto de soluciones que podemos
encontrar actualmente en el mercado. Por ello, tras haber completado todas las etapas del diseño, se
presenta un análisis del coste del proceso de diseño y fabricación de nuestro controlador para motores
BLDC
En el gasto en prototipos, podríamos incluir el coste de las tarjetas de desarrollo NUCLEO-L476RG
y X-NUCLEO-IHM07M1. Éstas pueden encontrarse en Mouser por 12,37€ y 11,01€,
respectivamente.
El coste de fabricación, montaje y envío de 5 PCBs del controlador diseñado es de 902,21 €, tal y
como vemos en la Ilustración 99:
Así, podemos determinar el coste de cada controlador en 180,44 €. Este coste unitario se vería
claramente reducido si el número de tarjetas fuese mayor, debido a que el coste de los servicios de
fabricación y montaje se incrementaría muy poco. Por ejemplo, si se solicitase la fabricación y
montaje de 20 paneles (100 tarjetas), obtendríamos los siguientes costes:
De esta forma, podríamos establecer el coste de cada controlador en 65,65 €. Si lo comparamos con
el precio de un controlador de motores BLDC comercial de características similares como el EPOS 2
P de Maxon (373 € si se piden entre 20 y 49 unidades), vemos que el ahorro conseguido es
considerable.
Finalmente, estableceremos el coste del proyecto en 925.59 €, considerando el coste de las tarjetas de
desarrollo y el de fabricación y montaje de 5 controladores.
99
Anexo I: Presupuesto
100
Diseño de un controlador para motores eléctricos de corriente continua sin escobillas
101
Anexo II: Referencias
[16] ST Microelectronics, «AN1946: Sensorless BLDC Motor Control and BEMF sampling
methods with ST7MC.» 2007.
[17] NXP, «AN4058: BLDC Motor Control with Hall Effect sensors using the 9S08MP,» 2010.
[18] Microsemi, «Sensorless FOC of PMSM using SmartFusion2 Devices».
[19] Colaboración de Editores de Digi-Key de América del Norte, «Digi-Key,» 17 Enero 2017. [En
línea]. Available: https://www.digikey.es/es/articles/why-and-how-to-sinusoidally-control-
three-phase-brushless-dc-motors. [Último acceso: 29 Septiembre 2020].
[20] D. Pérez Dorantes, «Análisis de las técnicas de modulación SPWM y SVPWM en control de
inversores trifásicos de dos y tres niveles.,» 2012.
[21] ST Microelectronics, «st.com,» 25 Octubre 2018. [En línea]. Available:
https://www.st.com/en/embedded-software/x-cube-mcsdk.html#documentation.
102