82

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.

guest
82 Comments
más nuevos primero
más antiguos primero
Inline Feedbacks
Ver todos los comentarios
Hector
Hector
24 días

Te pregunto: al apagar el transmisor el motor arranca al máximo, entiendo que hay que desconectar la bat. Antes de apagar.
Se trata de un planeador
La duda es que en vuelo, si el receptor llega a perder la señal, el ESC intérprete que se apagó el transmisor, y el motor arranque al maximo, el planeador se aleje sin poder controlarlo y se pierda.
Hay forma de programar el ESC para que el motor no arranque al apagar la radio, o al perder señal?

Jonathan
Jonathan
8 meses

Que tal, muchas gracias por el aporte ya que no hay mucha información como dices para el control de los motores brushless. Quisiera saber si ¿puedo invertir el giro de un motor brushless con el PWM del ESC? y de ser así ¿de cuanto debe ser el ciclo útil que debo mandar para invertirlo?. Me ayudarías mucho si puedes responder mis preguntas y de antemano gracias.

Luis G
Luis G
10 meses

Entonces en sí, perdón por la ignorancia ¿se emiten pulsos con valores entre 100 y 900 porque parseInt excluye el 1000?

Erick López
Erick López
1 año

Muchas gracias, la verdad agradezco el esfuerzo que haz hecho por nosotros.

carlitos
carlitos
1 año

me funciono muy bien. con el motor a2212 y el ESC 30A. gracias!!

Gerard Miró
Gerard Miró
1 año

Buenas tardes TR4NSDUC7OR,
Primero de todo gracias por la explicación, ha sido un rayo de luz en la lucha por programar el ESC.
En un comentario he visto que te abrías a la posibilidad de ampliar el tutorial con la programación de parámetros tales como sentido de giro, freno, timing , arranque rápido, lento… Al final este extra ha seguido en mente? en algún momento verá la luz?
Muchas gracias

Gabriel Carrasco
Gabriel Carrasco
1 año

Si por default no te funciona el BEC , estás jodido , en el caso de los de Hobby King, te venden una tarjeta para facilitar la programación ( porque si lo vas a hacer por medio de la emisora , te vas a enloquecer , el papelito de mierda que te dan con el diagrama de flujo no lo entiende ni el que lo hizo ) cuándo la vas a comprar , no vale nada , PERO NO HAY EN STOCK , aparte tampoco es nada práctica , tiene más vueltas que una oreja. El que haga una interfase… Leer más »

José Ángel
José Ángel
1 año

hola, disculpen alguien sabe que hacer si el codigo al compilarlo me da el error “exit status 1”?

Lucas Matas
Lucas Matas
1 año

Estimado. Tenia entendido que la velocodad de los motores bruhless era controlada por la frecuencia y la potencia por la amplitud (?). Otra consulta, como podria hacer para controlar la velocidad a travez de un potenciómetro conectado al arduino??
Gracias y muy buena info!

David
David
1 año

Hola, gracias por el tutorial. Tengo una duda. Cuando activo el sistema, hace el pitido de encendido pero luego el motor no gira, aunque vaya variando entre 1000 y 2000. ¿Puede decirme a qué puede deberse?. Gracias!

Paco
Paco
1 año

Hola! Estoy haciendo un trabajo y me surge una duda. Estoy generando con arduino MEGA el pulso que le mando al ESC para un motor. Este se encuentra encima de una barra que está a -20º. Leo con un sensor la inclinación de una barra donde se encuentra el motor. Mi problema es que necesito un mayor rango de números (de PWM) para poder controlar más velocidades del motor y poder adquirir más datos para diferentes ángulos. Ahora mismo solo puedo introducir 4 valores y la barra pasa de los -20º a los 90º. Estoy usando el AfroESC 30A. ¿Se… Leer más »

tony
tony
1 año

hola buenas, estoy haciendo un avión radio control y tengo dudas de como alimentar el arduino y el ESC. Se puede utilizar una batería LiPo para alimentar a ambos

joan manero
joan manero
1 año

estoy construyendo un robot para mi trabajo de final de curso. estoy usando una placa arduino uno 2 motores brushless(Brushless Inrunner Motor 2435 4800KV (1:18th – 1:14th)) un esc oara cada uno (TURNIGY MULTISTAR 20A SLIM V2 ESC WITH BLHELI OPTO 2-6S) que estan conectados a una bateria (Turnigy 1500mAh 3S 30C Lipo (E-Flite Compatible EFLB15003S Y Losi 8ight Mini)). tengo un modulo bootoz conectado al pin (0,1) quiero que funcuine con una app que yo mismo he hecho con app inventoradjuno la foto de los controles. la idea es que cada control envie una letra i que el arduino… Leer más »

Cosmic Company
Cosmic Company
1 año

Hola ¡
Como humano aficionado al R.C. y principiante en arduino debo darte las gracias por tan esclarecedor articulo, ya que hace tiempo me ronda la idea de unir una placa de un drone rc de los sencillos de motores de escobillas a un arduino, precisamente para ponerle motores bruslhess aparte de otras mejoras. Tengo concimiento de que arduino tiene placas especiales para montar drones ,pero que seria de los humanos si no pudiéramos satisfacer la curiosidad de la forma que nos complique mas la existencia.

Marcelo Betancur
Marcelo Betancur
2 años

Tengo un ESC de 20 Amp use su codigo para pero si le conecto algo mas de 11.8 volt el esc no funciona

florentino
florentino
2 años

Hola;
Muy buen tutorial;
Como se cambia el sentido de giro por programación al motor?

DAniele
DAniele
2 años

hola, todos los esc van da 1000 a 2000 ???

N4n0
Admin
2 años
En respuesta a  DAniele

Hola! La mayoría sí, pero puede haber algunos que se controlan con otros pulsos, por tanto tendrás que mirar tu documentación.

Daniel
Daniel
2 años

Buen día,
Si necesitara tener reversa estaría bien conectar entre el ESC y el motor un puente H? Quedaría el cable amarillo al ESC y los otros dos del ESC al puente y del puente al motor…

Saludos

dean
dean
4 meses
En respuesta a  Tr4nsduc7or

el mayor problema que podes llegar a tener es que corriente alterna por lo que si el puente h permite paso tanto de voltaje positivo como negativo no deberia haber problema. si el puente H alguno de mosfet funciona como diodo entonces no va a funcionar o va a funcionar mal.
tambien tener en cuenta que los picos de corriente de los motores de este tipo aveses son bastante mayores a lo que el ESC soporta de forma continua

Ariel Zuñiga
Ariel Zuñiga
2 años

Hola! Estoy utilizando un ESC de 30 amp y un brushless de 2200kv al momento de enviar el valor para el ancho de pulso no reaciona con 1000(1ms) y si no hasta con un valor de 1400(1.4ms), sabes a que se debe y hasta que valor de pulso maximo se podria utilizar en este caso, de antemano gracias por contestar

George
George
2 años

Excelente Información 🙂

George
George
2 años

Excelente información!!

rm_1015
rm_1015
2 años

Hola que tal… me gustaría saber si alguno de ustedes me puede ayudar… tengo un ESC marca Castle 25A el cual solo puedo controlar el motor brushless en el rango de 249 a 255 PWM con arduino; debo aclarar que tengo otros 3 ESC iguales que si funcionan bien (se activan con 127PWM y operan desde 130 a 254). He intentado entrar en el modo de programación ya que pienso que esta mal calibrado el min y max de empuje pero no logro configurarlo. ¿Alguna sugerencia? Muchas gracias y saludos

Martí Elias
Martí Elias
2 años

Hola buenas noches estoy teniendo un problema respecto al funcionamiento del motor, al iniciarlo se queda todo el rato pitando para finalmente no hacer nada. Como podría solucionar este problema?

ramiro villalba
ramiro villalba
2 años
En respuesta a  Martí Elias

bueno es de lo que se trata este informe, tendrias que buscar la frecuencia con la que se “arma” tu ESC, en el codigo esta bien claro el valor de espera

Leandro G. Ortega

Buenas, tengo una consulta… el esc toma en cuenta la última cifra? es decir, supongamos que pongo ESC.writeMicroseconds(1205), el “5”, lo toma en cuenta o lo redondea a 10 o 0?
Esta duda la tengo porque estoy intentando hacer un drone con raspberry y con la librería que viene parece dividir por 10 para quitar ese último número.
Saludos!

Brandon
Brandon
2 años

Amigo tengo el paquete ldpower d150 y no se como controlarlos me puedes ayudar

MarcCC
MarcCC
2 años

Hola!
Primero gracias me has aclarado alguna dudas que tenia, ahora preguntas.(igual digo burradas porque todavía no he tocado nada de esto y no he hecho pruebas)
Estoy haciendo un proyecto y tengo que controlar un motor brushless mediante el móvil. Entonces si quiero controlarlo por ejemplo a media velocidad, debería decirle que se encienda 1,5ms durante 20ms.

Otra pregunta ( que no viene al cuento pero bueno ) es si alguien me podría ayudar a como programarlo mediante un Slider que pondría en la aplicación del móvil.

Alfredo Montes
Alfredo Montes
2 años

Buen dia amigo! Necesito conectar un Brushless con sensor hall, y controlarlo con arduino tienes alguna idea de como hacerlo?? de antemano muchas gracias y tu tutorial es muy bueno

Juan
Juan
2 años

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

anonimo
anonimo
2 años
En respuesta a  Juan

tienes que leer puerto serial y después guardarlo en un variable

Jeferson
Jeferson
2 años

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

anonimo
anonimo
2 años
En respuesta a  Jeferson

si

Angel david
2 años

Buenas tardes, me puede ayudar con mi proyecto?

gaspar
gaspar
3 años

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

jorge
3 años

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

Xabier
Xabier
3 años

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
Raúl
3 años

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
Marlon
3 años

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

juan
juan
3 años

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
juan q
3 años

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
evelyn alarcon
3 años

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

Edurado Guzman
Edurado Guzman
3 años

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
Juan Francisco
3 años

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
Juan Carlos
3 años

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
Juan Carlos
3 años
En respuesta a  Juan Carlos

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

Andres
Andres
3 años

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.

Andres
Andres
3 años
En respuesta a  Tr4nsduc7or

Gracias!!!! me funciono amigo!! 🙂

AntonioXVII
AntonioXVII
4 años

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
Alex Moreano A
4 años

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
Alex MoreanoA
4 años

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

Lucas Martinez Barbero
Lucas Martinez Barbero
4 años

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

Fernando
Fernando
4 años

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

Conan
Conan
4 años

Tu ESC es como este?

VenatorV
VenatorV
4 años
En respuesta a  Conan

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)