Motores, ESC y su programación en Arduino (sketch)


Índice:

  1.  Conceptos generales sobre drones. 
  2. Material necesario y montaje de los componentes hardware.
  3. Mando RC y receptor. Programación en Arduino (código).
  4. MPU6050 y su programación en Arduino (código).
  5. Batería LiPo (código).
  6. Control de estabilidad y PID.
  7. → Motores, ESC y su programación en Arduino (código).
  8. Calibración de hélices y motores (código).
  9. Software completo y esquema detallado (código).
  10. Probando el Software completo antes de volar.
  11. Como leer variables de Arduino en Matlab (código).
  12. Los mejores drones de 2018 | Comparativa y guía de compra.

Motores brushless y ESC para drones

Los motores brushless o motores sin escobillas son motores trifásicos de corriente alterna (AC). Son los motores mas utilizados para volar drones. Al ser un motor trifásico tenemos que alimentar las tres fases con tensión alterna de 50Hz, por eso tenemos tres cables de colores para alimentar los motores (trifásico ⇒ tres fases ⇒ tres cables).  Idealmente, la tensión debería ser perfectamente sinusoidal, pero en la práctica es imposible generar 50Hz ‘limpios’ y sin ruido (armónicos). Una frecuencia de 50Hz equivale a un periodo de 20ms.

Comprar motor y ESC en Amazon AHORA

El motor girará a una velocidad proporcional a la tensión aplicada. Si tenemos motores 1000KV, estos giraran a 1000rpm (revoluciones por minuto) por cada voltio de alimentación aplicado. Con una batería 3S de 11.1V el motor podría llegar a girar a 11000rpm. ¿Cómo conseguimos convertir los 11.1V (DC) de nuestra batería en tensión alterna (AC) trifásica controlable? Como ya habréis imaginado, utilizando ESCs. ESC o Electronic Speed Controller, es un circuito electrónico que convierte la tensión DC de entrada (batería) en tensión AC regulable en función de la señal PWM de control que apliquemos.

La señal PWM para gobernar los motores deberá ser de frecuencia constante y de ancho de pulso variable en función de la velocidad de giro que queramos obtener. En la mayoría de ESC, aplicando un pulso de 1ms el motor permanece parado, con un pulso de 1.5ms el motor girará a mitad de velocidad y ante un pulso de 2ms girará a máxima velocidad. La frecuencia que utilizaremos para gobernar los motores será de 166Hz o 6ms, mas adelante veremos el por qué. Os dejo unas imágenes obtenidas con osciloscopio de una de las salidas PWM de control:

PMW control motor brushless. Arduino drone

¿Cómo generamos esta salidas PWM? Arduino ya cuenta con una función para generar pulsos, la función WriteMicroseconds() que viene con la librería servo.h. Simplemente hay que indicar entre paréntesis el tiempo de pulso en microsegundos que queremos en la señal PWM. La desventaja de esta función es que genera pulsos a una frecuencia de 50Hz (20ms), lo que resulta demasiado lento para controlar el drone, por lo que no sirve para esta aplicación. Como ya veremos más adelante en una entrada dedicada a los controladores PID y la estrategia de control, para mantener el drone estable en el aire hay que ejecutar los PID cada 5ms (200Hz) o 12ms (85Hz) aproximadamente. Por tanto, no serviría de nada ejecutar el control cada 6ms para luego enviar la información a los motores cada 20ms. Necesitamos generar los pulsos PWM a la misma frecuencia que ejecutamos el control de estabilidad, de otra manera los ESC recibirán la información suficiente para mantener el drone en el aire. Pero tranquilos si esto os ha sonado a chino, toda la información relativa a generar las salidas PWM para los motores y su correspondiente estrategia de control lo veremos más adelante.

Montaje y conexionado entre motor y ESC

El conexionado entre Batería-ESC-Motor es muy sencillo, basta con cablear los tres cables de la salida de cada ESC a cada motor por un lado (el orden es indiferente) y los dos cables de control por el otro (el cable rojo lo dejaremos sin conectar):

Comprar motor y ESC en Amazon AHORA

La conexión entre ESC y motor debe ser una conexión robusta y sin malos contactos para no dañar los componentes, para lo que recomiendo utilizar conectores adecuados (no estañar los cables). Fue un quebradero de cabeza para mi ver cómo tanto los motores como los ESC dejaban de funcionar sin razón aparente, hasta que tras leer mucho foros especializados llegue a la conclusión que mis conexiones (estañaduras) no eras las más adecuadas. Tras haber cambiado a esos conectores no he vuelto a tener problemas. Son muy fáciles de conseguir, simplemente buscadlos como ‘conectores tipo bala’ o ‘conectores tipo bala doble’ (tened en cuenta que hace falta una herramienta especial para apretar estos terminales):

Conector tipo bala. Arduino drone.

Comprar conectores tipo bala en Amazon AHORA

Conexión motor con ESC. Arduino drone.

En cuanto a las señales de control, he utilizado ‘terminales de tornillo’ para conectar las salidas PWM de la placa Arduino con cada ESC. Son conectores robustos y que permiten fácilmente soltar los cables en caso de que queramos desmontar el drone:

Conector atornillado. Arduino drone.

Comprar conectores a tornillos en Amazon AHORA

Conexionado drone arduino Conexionado drone arduino Conexionado drone arduino

Un aspecto importante a la hora de situar los motores es la numeración y disposición en el frame de los mismos. Como hemos vito en la entrada dedicada a al sensor MPU6050, orientaremos el sensor de forma que la ‘flecha Y‘ quede alineada con lo que consideremos parte delantera de nuestro drone. De esta forma, la numeración de los motores quedaría como en la siguiente imagen, siendo el motor delantero derecho siempre el motor número 1. Es imprescindible numerar los motores de esta forma:

Numeración de los motores. Drone Arduino

Otro de los aspectos importantes a la hora de construir nuestro drone es la dirección de giro de los motores. Es muy importante que los motores enfrentados giren en el mismo sentido. A continuación os dejo una imagen con el sentido de giro de cada motor que tenéis que utilizar. Ajustaremos el sentido de giro de cada motor una vez que los hayamos puesto en marcha y seamos capaces de hacerlos girar de forma controlada:

Sentido de giro de los motores. Drone Arduino.

Para variar el sentido de giro basta con intercambiar dos de los cables de alimentación del motor:

Código Arduino para control de motores Brushless con ESC

Para generar las salidas PWM de control vamos a utilizar el código que os he dejado mas abajo. Simplemente leeremos el canal throttle del mando RC y haremos girar los motores moviendo el correspondiente stick del mando (importante haber leído la entrada dedicada a la lectura del mando RC). Al principio puede que resulte un tanto complicado de entender, pero en cuento lo tengáis, comprenderéis que es una solución muy simple.

Analicemos el código parte por parte. Lo primero que hacemos al comienzo de cada nuevo ciclo de 6ms es leer el canal de throttle del mando y escalar las lecturas de forma que al mover el stick al máximo leamos 2ms y al pasarlo al mínimo 1ms. Aquí se podría utilizar la función map() de Arduino sin problemas. El siguiente paso es poner las 4 salidas PWM de los 4 motores en estado HIGH, de esta forma comenzaremos cada ciclo de control con los cuatro PWM en estado HIGH, sincronizando el control de estabilidad con la generación de las señales PWM:

Si habéis leído la entrada del mando RC y receptor, veréis como el canal throttle de mi mando está invertido, es decir, con el stick al mínimo leemos 2000us de pulso, y con el stick al máximo 1000us. Es necesario invertir esta salida. Se podría hacer o bien con la función map() de Arduino, o bien, como es mi caso, complicándome la vida y programando las ecuaciones por mi cuenta. Para ello he utilizado la siguiente ecuación, que no es más que la ecuación de una recta que pasa por dos puntos:

Si tenéis el mando invertido como yo, tenéis que dejar los parámetros tal como están:

Si por el contrario vuestro mando no está invertido, debéis invertir la configuración de esta forma. Tan simple como esto:

Mas adelante, cuando uséis el software completo y sea necesario configurar los demás canales (Pitch, Roll y Yaw), usaremos el mismo procedimiento. De todas formas, las implicaciones de no corregir estos tres canales no son graves, simplemente cuando Ordenemos al drone que avance, irá para atrás. Pero ya sabéis que hablar de ‘adelante’ o ‘atrás’ en el aire es bastante relativo y que depende de nosotros.

Una vez que las cuatro señales PWM están en estado HIGH, sabemos que tenemos un margen de tiempo de 1ms (que es el ancho de pulso mínimo para las señales PWM) donde Arduino no va a hacer nada, solo esperar. Mas adelante veremos como aprovechar ese mili-segundo para realizar tareas cortas como leer el mando RC o gestionar los leds. 

Después, y aquí viene el truco, sumamos el tiempo de throttle (entre 1ms y 2ms) con el tiempo total transcurrido desde el inicio del programa (loop_timer). Por ejemplo, si queremos que el motor gire a velocidad media, moveremos el stick hacia arriba hasta la mitad del recorrido, leyendo tras el escalado 1.5ms y sumamos este tiempo con el tiempo total transcurrido desde que hemos iniciado el software (loop_timer), pongamos 1 segundo:

accion_m1 = 1.5ms + 1000ms = 1001.5ms

Finalmente, utilizando el siguiente bucle while, pasamos a estado LOW  las cuatro señales PWM, cada una cuando corresponda. Cuando la variable esc_loop_timer (el tiempo real transcurrido) sea igual a las variables accion_m1, accion_m2, accion_m3 o accion_m4, significará que el pulso ha estado en estado HIGH exactamente 1.5ms, por lo que es hora de pasarlo a estado LOW.  Arduino no saldrá de este bucle while hasta que las cuatro señales PWM estén en estado LOW:

De esta forma conseguimos señales PWM de la misma frecuencia del ciclo que hayamos escogido. Os dejo un pequeño esquema que os ayudará a entender el funcionamiento de esta parte del código:

Control motores brushless. Arduino drone.

Una vez entendido como generar las señales PWM, vamos a proceder a conectar y hacer girar los motores por primera vez. Cuando conectamos los motores por primera vez hay que seguir un procedimiento para configurar los ESC. El esquema mínimo necesario se muestra a continuación, aunque también podemos montar el esquema completo mostrado en la entrada ‘Software completo y esquema detallado‘:

Montaje necesario para mover los motores brushless. Drone Arduino.

 MUY IMPORTANTE: hasta que no tengamos claro el funcionamiento del software y hayamos comprobado que funciona todo bien, NO PONEMOS LAS HÉLICES. Las pondremos mas adelante. Estas pruebas las haremos SIN HÉLICES

Es necesario configurar los ESC cuando vayamos a utilizarlos por primera vez, para lo que utilizaremos el código de abajo. Si no dispones de un interruptor puede hacer la conexión entre la batería y los ESC manualmente, aunque para el montaje final si que es recomendable disponer de uno. Os dejo también un vídeo para para que sigáis los pasos de forma mas sencilla:

  1. Sin conectar la batería, alimentamos la placa Arduino con USB y cargamos este programa.
  2. Ejecutamos el programa sin conectar la batería.
  3. Cuando el led 13 se encienda, encendemos el mando y subimos el throttle al máximo.
  4. Cuando el led 13 se apague conectamos la batería.
  5. El motor emitirá unos pitidos (pi,pi), bajamos el throttle al mínimo.
  6. Escucharemos otros pitidos, pipipi… piiii.
  7. Terminado, ya podemos apagar todo.

** Este proceso puede ser diferente en función del ESC que hayamos comprado

Esta secuencia hay que hacerla solo la primera vez que conectamos los ESC para poder configurarlos. Una vez que hemos configurado los ESC vamos a ver cómo podemos hacerlos girar en función de las órdenes recibidas del mando RC:

  1. Cargad el programa y desconectad el cable USB.
  2. Conectad la batería y cerrad el interruptor para alimentar la placa Arduino y los motores. Bajamos el throttle al mínimo y ejecutamos el programa.
  3. Cuando el led 13 se encienda, encendemos el mando.
  4. Los motores emitirán unos pitidos pipipi… piiiii.
  5. Listo, podemos empezar a girar los motores con el mando.

También podéis descargar el código en el siguiente enlace, archivos ‘CalibrarMotores‘ y ‘GirarMotores‘.

Ir al archivo 

Antes de continuar comprobad que sois capaces de gobernar los motores y que estos giran de forma controlada. Con el stick en su posición inferior los motores no se mueven, y al mover el stick los motores giran en proporción.

Os dejo un vídeo resumen para que veáis mas claro el proceso de puesta en marcha de los motores:


Continuar con la siguiente entrada:

  1. Conceptos generales sobre drones.
  2. Material necesario y montaje de los componentes hardware.
  3. Mando RC y receptor. Programación en Arduino (código).
  4. MPU6050 y su programación en Arduino (código).
  5. Batería LiPo (código).
  6. Control de estabilidad y PID.
  7. Motores, ESC y su programación en Arduino (código).
  8. → Calibración de hélices y motores (código).
  9. Software completo y esquema detallado (código).
  10. Probando el Software completo antes de volar.
  11. Como leer variables de Arduino en Matlab (código).
  12. Los mejores drones de 2018 | Comparativa y guía de compra.
26 Comentarios

Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *