Antes que nada, para que queremos hacer esto?, bien, estos motores son muy usados en aplicaciones que requieren altos torques, altas revoluciones y un tiempo de vida alto. Es decir, para aplicaciones exigentes, por tanto estos motores son caros en comparación con cualquier motor de corriente directa normal. Son usados para muchas aplicaciones, desde lectores/quemadores de CD, avioes y helicopteros de hobbie, aeroplanos, etc...
Como esta entrada es parte de una serie de entradas que tienen el fin de construir un quadcopter vamos a hacer esto lo más sencillo y entendible posible.
Material:
- Arduino (cualquier modelo, Uno, Mega ...) o un micro con PWM
- Un outrunner brushless motor (Como este)
- Un driver para brusless motor (ECS o BEC, puede ser como este)
- Una fuente de energía de alta potencia, un cargador de minimo 500mA servirá, o una batería lipo (como esta). Pero te recomiendo mucho también que si tienes la oportunidad construyas esto ( http://hzsquare.blogspot.mx/2012/05/crea-una-fuente-de-poder-para-tus.html ), te servirá mucho.
Bien, si lo que quieres actualmente es documentarte para decidir si en verdad te convence armar un quadcopter o cualquier helicoptero, recomiendo este kit, que incluye casi todo lo necesario (aqui).
Este tuto esta orientado a controlar el motor por medio de arduino, pero si tu posees otro microcontrolador con salidas PWM también puedes seguirlo. Por desgracia sólo coloco codigo de arduino en esta entrada, espero puedas traducirlo tu al de tu microcontrolador y si gustas compartirlo conmigo para hacer mas completa esta entrada.
1.- Conectando todo
Coloco a continuación el esquemático de conexiones:Coloco otro esquematico mas en vivo:
Esquemático. |
Esquemático en Vivo |
2.- Como funciona
El funcionamiento de un motor outrunner brushless es el siguiente:
- Inicializar Motor
- Mandar un pulso PWM de cierto DutyCicle (por lo general 0us, pero varía con el motor)
- El motor dará uno o dos pitidos cuando esté inicializado
- Mandar el pulso PWM para la minima velocidad
- Si se requiere aumentar la velocidad, aumentarla de manera gradual.
- Si se requiere bajar la velocidad, disminuirla de manera gradual.
De manera general un motor tiene las siguientes características:
- Su mínima velocidad se consigue alrededor de los 1100 us (microsegundos)
- Su máxima velocidad se consigue al rededor de los 1600 us (microsegundos)
- Para invertir el sentido de giro basta con intercambiar dos de los cables entre el motor y el driver (yo recomiendo los dos de los extremos)
3.- Programar Arduino
Coloco a continuación un skecth de Arduino testeado y probado para funcionar con diferentes tipos de motores:
/********************************************************************************* * Hazael Fernando Mojica García, San Nicolás de los Garza, México NL * 6 de Marzo del 2012 * Control de Velocidad de un Outrunner Brushless Motor * Licencia GPL 2012 *********************************************************************************/ #include <Servo.h> Servo outrunner; int instruccion = 's'; int MAXPWMDC = 2500; int MINPWMDC = 1200; void setup() { Serial.begin(115200); outrunner.attach(13); // instruccion = RecibeInstruccion(); instruccion = 'c'; } void loop() { switch(instruccion) { case 'q': Stop(); instruccion = RecibeInstruccion(); break; case 'c': Controla(); instruccion = RecibeInstruccion(); break; default: instruccion = 'q'; break; } } void Controla() { int instruc = 's'; boolean bucle = 1; int DC = MINPWMDC; Serial.println("Controlando"); Stop(); //Inicializa(); Barrido_To_MINPWMDC(); Serial.println("Presiona 'a' para subir la velocidad, 'z' para bajarla y 's' para salir"); while(bucle) { if(Serial.available()) { instruc = Serial.read(); switch(instruc) { case 's': bucle = false; break; case 'a': DC = DC + 5; outrunner.writeMicroseconds(DC); Serial.print("Subiendo velocidad "); Serial.print("DC: "); Serial.println(DC); break; case 'z': DC = DC - 5; outrunner.writeMicroseconds(DC); Serial.print("Bajando velocidad "); Serial.print("DC: "); Serial.println(DC); break; } } } } void Barrido_To_MINPWMDC() { int MINPWMDC_aux = 0; Serial.println("Inicializando Driver..."); while(MINPWMDC_aux < MINPWMDC) { outrunner.writeMicroseconds(MINPWMDC_aux); MINPWMDC_aux = MINPWMDC_aux + 10; Serial.println(MINPWMDC_aux); delay(30); } } int RecibeInstruccion() { int instruc = 's'; Serial.println("Presiona 'q' para Stop, 'i' para inicializar y 'c' para controlar"); Serial.print("Recibiendo instruccion: "); while(1) { if(Serial.available()) { instruc = Serial.read(); break; } } Serial.println(instruc); return instruc; } void Stop() { Serial.println("Stop, detendiendo, espera..."); outrunner.write(0); delay(2000); }
Cabe aclarar que para poder controlar de una manera eficiente los pulsos PWM se recurre a la libreria Servo de arduino, la cual permite crear una instancia de la clase Servo y usar en ella el DutyCicle correspondiente en microsegundos por medio de la función writeMicrosecods.
4.- Testeando
Coloco el siguiente video que muestra el motor en funcionamiento:
Tags:
- Arduino
- Outrunner brushless motor
- Controlar un outrunner brushless motor con arduino
- Como controlar un motor sin escobillas
- Motor sin escobillas
- Controlar un motor sin escobillas con arduino