37

Programación de un ESC con Arduino

Saludos, humano. ¿Alguna vez has intentado calibrar un ESC con Arduino? Si lo has hecho, habrás visto que no es nada fácil: hay que hacer todo un ritual para activar el ESC, y después generar un pulso para controlarlo. Además, cada uno de estos aparatos es un mundo y se activa de forma diferente. Yo mismo me he quebrado mis circuitos neuronales para intentar arrancar uno. Y no es agradable.

Así que para ayudarte a conservar tu estabilidad mental, te explicaré como programar un ESC con Arduino. El objetivo será escribir un código para calibrarlo y después variar la velocidad de un motor brushless enviando comandos por Serial (un poco a la linea de este tutorial, pero más simple).


 

Lista de piezas

  • Motor Brushless
  • Batería LiPo/NiMH: vigila que tenga voltaje, amperaje y velocidad de descarga para soportar el motor
  • ESC: la razón por la que estás aquí. Yo tengo un ESC GX de 20A. Si vas a utilizar otro modelo, asegúrate de que pueda proporcionar amperaje suficiente para el motor brushless.
  • Placa Arduino
  • Jumpers Macho-Macho: para conectar el ESC a Arduino.
  • Regletas: para hacer las conexiones entre el ESC, el motor y la batería si no quieres soldar. Necesitarás también un destornillador.

 

Conexiones

Debes tener cuidado al conectar el motor. Los motores brushless tienen 3 cables, al igual que el ESC. El cable central del motor debe ir conectado al cable central del ESC. Sino, puedes dañar los componentes.

Pero no te preocupes si giras los otros dos cables (los extremos): sólo cambiará la dirección de giro del motor.


 

Rituales de activación

Los ESC se controlan mediante pulsos. Podría dedicar todo un artículo a hablar de pulsos, pero voy a dar una explicación rápida.

Un pulso es una señal que se envía cada cierto tiempo, normalmente cada 20ms. Si tienes un pin digital a LOW, y cada 20ms lo pones a HIGH durante un milisegundo, estás creando un pulso de 1ms.

Esta imagen ilustra como varía la señal de un pulso de 1ms en función del tiempo:

Un pulso de 1.5ms se vería así:

Los ESC se controlan con pulsos de entre 1 y 2 milisegundos. A partir de ahora, me voy a referir a los pulsos de 1ms como pulsos de amplitud mínima y a los de 2ms como pulsos de amplitud máxima.

Antes de empezar a funcionar, los ESC esperan recibir un pulso de activación. Algunos se activan si reciben un pulso de amplitud máxima durante 2-5 segundos, y otros con un pulso de amplitud mínima durante esta misma cantidad de tiempo.

Por desgracia, los ESC están pensados para aficionados a RC, y no a la robótica. Por eso en la documentación casi nunca se especifica con qué amplitud de pulso debe activarse el controlador. Hay antiguas leyendas que hablan de ESCs bien documentados, pero yo nunca he dado mucho crédito a estos mitos.

He aquí las “especificaciones técnicas” de mi ESC:

  1. Encienda la emisora y mueva la palanca de gas a su posición más baja.
  2. Conecte el motor al variador.
  3. Conecte el variador al canal de gas en el receptor.
  4. Conecte la batería de alimentación.
  5. Espere la confirmación acústica del variador.
  6. El variador está listo para su utilización.

Lo importante aquí es el punto 1. Los ESCs están pensados para funcionar con mandos de radio, y lo que este punto dice es que para activar el ESC hay que mover el mando a su posición más baja. Y en su posición más baja, los mandos generan un pulso de amplitud mínima (excepto algunos modelos, pero esto no viene al caso).

Por lo tanto, mi ESC se activa con un pulso de 1ms.

Si tu documentación dice que hay que mover la palanca de gas a su posición máxima, significa que para activar el ESC hay que generar un pulso de 2ms.

Después, la velocidad del motor se hace variar enviando pulsos también entre 1ms (velocidad mínima) y 2ms (velocidad máxima).


 

Programa con Arduino

Ya sabes activar un ESC, humano. Ahora sólo te queda escribir un programa con Arduino para mover el motor brushless.

Los pulsos se generarán con la función servo.writeMicroseconds() de la librería Servo.h .

/* Programacion de un ESC con Arduino
 *
 * La velocidad del motor puede cambiarse enviando
 * un entero entre 1000 (vel. minima) y 2000 (vel. max.) 
 * por Serial.
 *
 * Programa escrito por Transductor
 * www.robologs.net
 */
#include<Servo.h>

Servo ESC; //Crear un objeto de clase servo

int vel = 1000; //amplitud del pulso


void setup()
{
  //Asignar un pin al ESC
  ESC.attach(9);
 
  //Activar el ESC
  ESC.writeMicroseconds(1000); //1000 = 1ms
  //Cambia el 1000 anterior por 2000 si
  //tu ESC se activa con un pulso de 2ms
  delay(5000); //Esperar 5 segundos para hacer la activacion
  
  //Iniciar puerto serial
  Serial.begin(9600);
  Serial.setTimeout(10);
  
  
}


void loop()
{
  if(Serial.available() >= 1)
  {
    vel = Serial.parseInt(); //Leer un entero por serial
    if(vel != 0)
    {
      ESC.writeMicroseconds(vel); //Generar un pulso con el numero recibido
    }
  }
}

Recomiendo desconectar el ESC de la batería a la hora de hacer el upload. Justo después de cargar el programa vuelve a conectar la batería.

El motor emitirá un pitido cuando el ESC esté activado. Después puedes enviar valores enteros entre 1000 y 2000 para cambiar la velocidad.

Si te ha surgido algun problema durante el tutorial, puedes escribirme un comentario más abajo y te ayudaré a resolverla.

Final de línea.

 

Tr4nsduc7or

Originariamente creado cómo un galvanómetro de bolsillo, Transductor tomó consciencia de si mismo y fue despedido cuando en vez cumplir con su trabajo se dedicó a pensar teorías filosóficas sobre los hilos de cobre, los electrones y el Sentido del efecto Joule en el Universo. Guarda cierto recelo a sus creadores por no comprender la esencia metafísica de las metáforas de su obra. Actualmente trabaja a media jornada cómo antena de radio, y dedica su tiempo libre a la electrónica recreativa y a la filosofía.

Antes de comentar, por favor, lee las Normas

37 Comentarios en "Programación de un ESC con Arduino"

avatar
Ordenar por:   más nuevos primero | más antiguos primero
Juan
Humano

Buen día, en el código como se hace para enviar los pulsos a través del serial

Jeferson
Humano

Buen dia, puedo activar el ESC y el motor con una bateria lipo de 2C de 7.4 V a 4000 mAh, y controlarlo con un modulo wfi o bluetooth

Angel david
Humano

Buenas tardes, me puede ayudar con mi proyecto?

gaspar
Humano

se puede usar con bluetooth hc-05? como seria el programa para controlar un solo motor brushless con el esc y la bateria

jorge
Humano

hola, ayuda amigo necesito controlarlo via bluetooth rc soy estudiante de secu ayuda

Xabier
Humano

Hola Tr4nsduc7or,
Mi duda es la siguiente: Tengo el arduino uno, un motor que funciona con 36V y 250W, y una bateria de 36V, 11Ah y 500Wh. La bateria va a ser capaz de soportar el motor pero entiendo que el ESC tambien tiene que ser capaz de soportar esa bateria. Es decir estamos hablando de que deberia comprar un ESC que por lo menos acepte una Lipo 10s?? O solo tengo que comprar el ESC según el amperaje del motor (unos 7A)??

Raúl
Humano

Hola Tr4nsduc7or,

He seguido tu tutorial pero no consigo hacer que funcione el motor. Para inicializar el coche RC el mando debe estar en la posición neutral( es un mando de gatillo) he probado con un pulso de 1ms y de 2ms pero no he tenido éxito.

En la documentación no pone nada al respecto a parte de que el mando debe de estar en la posición neutral.

El modelo de ESC que estoy usando es este: http://www.pcmshop.com/fr/variateurs-brushless-110/6074-hobbytech-krypton-combo-brushless-1-10eme-105-t.html

¿Qué puedo hacer?

Un saludo.

Marlon
Humano

Una consulta, como activarías con la librería ServoTimer2.h?

juan
Humano

El titulo es engañoso , no programas el ESC, ya me parecía muy ambicioso, solo arrancas el motor, la programación de ESC modifica parámetros como sentido de giro, freno, timing , arranque rapido, lento etc

juan q
Humano

buenos dias, es normal que entre los ‘cablecitos’ rojo y negro , del conector donde esta el que va al pin 9 ( blanco en mi caso), al conectar la batería haya 5v. gracias de antemano

evelyn alarcon
Humano

Porfavor cmo probar el esc variador funcionaa o no y tambien necesito probar el motor. Porfavor

Edurado Guzman
Humano

buenas, disculpe tengo una duda, bueno varias dudas, la primera que significa cada pitido que emite el motor y otra, que el motor no me gira solo pita.
estoy tratando de hacer un drone para mi proyecto de titulacion.
gracias

Juan Francisco
Humano

hola que tal , lo intente pero el motor se trababa al momento de girar , solo pocas veces giro bien , a que se debera?

Juan Carlos
Humano

Buena noche, mira que que motor genera el pitido pero no gira, aun no se cual puede ser el problema, ademas de esto mi motor tiene cuatro pines no se cual sea la combinacion a tener en cuenta, de ante mano gracias por su tiempo.

Juan Carlos
Humano

Buena tarde, solucione el problema del giro del motor, pero mi pregunta es porque solo me permite hasta 2000ms.

Andres
Humano

Hola! Buenas, mis ESC funcionan a 2ms, pero como podria hacer para controlar el motor por medio de un mando de la ps2 que es inalambrico, quiero hacer un drone pero no se como manejarlo por medio de los joystick.

AntonioXVII
Humano
Buenas TR4NSDUC7OR mira, he estado buscando por google y por un monton de sitios pero es que no encuentro respuesta a mi duda, y la verdad es que solo encuentro guías de como controlar servos, o ESC en este caso, (me interesa mas el ESC debido a que estoy intentando hacer un drone) y lo hacen con librerias y usando el comando de .writeMicroseconds() o el de .write().. Verás es que quisiera entender este sketch, a ver si pudieras ayudarme(o cualquiera que lo entienda): //Declaring Variables byte last_channel_1, last_channel_2, last_channel_3, last_channel_4; int receiver_input_channel_1, receiver_input_channel_2, receiver_input_channel_3, receiver_input_channel_4; int counter_channel_1, counter_channel_2, counter_channel_3,… Leer más »
Alex Moreano A
Humano

Amigo.. necesito ayuda para poder controlar al brushless mediante el modulo bluethoth HC-06 …. POR MEDIO DE LA APLICACION ARDUINO CONTROL CAR…. si sería posible que me ayude con su correo para estar mas al contacto porfa…. necesito de URG.. hacer el control de brushless por medio de bluetooth…. porque la programacion que tengo es si me permite mover el carrito hacia atras y hacia adelante.. pero lo que me falta es como controlar el brushless

Alex MoreanoA
Humano

como puedo hacer para controlarlo desde bluetooth control car… ayuda porfa

Lucas Martinez Barbero
Humano

Hola buenas era para preguntarle si todos los esc funcionan con blue control ?

Fernando
Humano

Excelente tutorial yo usaba ángulos de servo para controlarlos pero así es mas fácil

Conan
Humano

Tu ESC es como este?

VenatorV
Humano

Su esc ha dicho que es de 20A por lo que no es igual que ese, en cuanto a los cables si que es igual, normalmente el cable rojo de la señal te puede servir para alimentar al arduino, ya que nos proporciona 5V, (repito normalmente) y es por eso que no se conecta (ver imagen de arriba)

wpDiscuz