Introducción

Los motores sin escobillas funcionan debido a un campo magnético generado en su interior, el cual se crea a partir de sus 3 bobinas que para ser excitadas, se tiene que dar con el ancho de pulso exacto en cada una para lograr un giro completo.

esquema electrico
Esquema Eléctrico de un Motores Sin Escobillas

Para controlar un motor de este tipo Arduino envía información al ESC (control electrónico de velocidad) quien se encarga de enviar los pulsos de excitación a cada una de las bobinas.

control electrónico de velocidad
Control Electrónico de Velocidad

El ESC utiliza señales como si quisiéramos controlar un servo normal. Estas señales son cuadradas con un tiempo en alto que varían entre 1 y 2 milisegundos, que correspondería a un ángulo de entre 0 y 180 grados.

Estas señales son cuadradas con un tiempo en alto que varían entre 1 y 2 milisegundos, que correspondería a un ángulo de entre 0 y 180 grados.

pulsos de control
Comparación de Pulsos de Control entre Servomotores y un Motor Brushless

Te puede interesar

Circuito Eléctrico de Motor Brushless, un ESC y Arduino

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.

Conexiones
Conexiones entre Arduino, el ESC y el Motor Sin Escobillas
Antes de empezar a funcionar, los ESC esperan recibir un pulso de activación. Algunos se activan si reciben un pulso de 2ms cada 20ms durante 2-5 segundos, y otros con un pulso 1ms cada 20ms durante la misma cantidad de tiempo.

El proceso es:

  • Alimentar el ESC y escuchar la música de confirmación.
  • Armar:

myservo.write(0);   // Aramado

  • Esperar pitidos de "Ready".
  • Mover el motor:

myservo.write(pulsoMotor); //pulsoMotor lo variamos desde alrededor de 70 a 180 (máximo)

Ejemplo de Código

Para esto, básicamente realizaremos lecturas de la entrada digital, un pulsador. Después de la proceso de setup, el loop lee continuamente el estado del pulsador activando o no el motor.


#include <Servo.h> 
Servo myservo; // creo el objeto del tipo servo
int pinPulsador = 2; // pin donde conectamos el pulsador
int pinEsc = 9; // pin donde conectamos el pulsador
int estadoPulsador = 0;
void setup() { 
  myservo.attach(pinEsc);
  pinMode(pinPulsador, INPUT);
  setUpEsc(); // Usamos la función creada para armar el esc
} 
 
void loop(){       
  estadoPulsador = digitalRead(boton);
  while(estadoPulsador == HIGH) { //Mientras el botón esté pulsado, el servo gira
    estadoPulsador = digitalRead(pinPulsador);
    myservo.write(70);
  }
  myservo.write(15);      
} 

//Esta función arma el ESC
void setUpEsc() {  
  myservo.write(0);
  delay(1000);
  myservo.write(30);
  delay(10000);
}