sábado, 10 de marzo de 2012

1.- Controlar un outrunner brushlees motor.

Buenos días queridos lectores, el día de hoy vamos a controlar un motor sin escobillas tipo outrunner.


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
Descarga Esquematicos: aqui

2.- Como funciona


El funcionamiento de un motor outrunner brushless es el siguiente:



  1. Inicializar Motor
    1. Mandar un pulso PWM de cierto DutyCicle (por lo general 0us, pero varía con el motor)
    2. El motor dará uno o dos pitidos cuando esté inicializado
  2. Mandar el pulso PWM para la minima velocidad
  3. Si se requiere aumentar la velocidad, aumentarla de manera gradual.
  4. 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

0.- Principal Quadcopter

En construcción...


Bien, buenos días a todos, las siguientes entradas corresponden a un nuevo proyecto que estoy llevando acabo en mi facultad, se tratan del diseño y construcción de un quadcopter. Espero les guste, trataremos de que la documentación aquí presentada esté lo suficientemente completa para que cualquier persona pueda hacerlo.






=)


Material en General:




Quadcopter por Pasos:


  1. Controlar un outrunner brushlees motor.
  2. Construye Tu Esqueleto
  3. Colocando hélices y motores
  4. Prueba con cuatro Outrunner Brushless Motors
  5. Sensores y primera prueba de elevación


























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
  • Como hacer un quadcopter
  • Como hacer mi propio helicoptero