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.
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.
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.
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.
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);
}