fbpixel
Etiquetas: , , ,
4.8
(19)

Uno de los principales objetivos de la robótica es articular los objetos. Para ello, es muy común utilizar motores eléctricos. En el caso de los robots voladores, como los drones, los actuadores necesitan una alta velocidad de rotación para hacer girar las hélices y permitir el vuelo. En este caso, a menudo se utilizan motores sin escobillas. La particularidad del motor sin escobillas (brushless) es que puede alcanzar velocidades muy altas en comparación con otros tipos de motores con un par menor, por supuesto.

Hardware

  • Computadora
  • Arduino UNO
  • Cable USB A macho a B macho
  • Brushless+ESC

Principio de funcionamiento

Les moteurs brushless sont des moteurs avec trois enroulements appelés moteurs triphasé. C’est à dire, qu’il génère une rotation continue lorsqu’on déphase les courants sur ces bobines. La génération des profils de courant sur chaque bobine, afin d’obtenir la vitesse désirée, nécessite l’utilisation d’un contrôleur de vitesse (appelé ESC, Electronic Speed Controller) afin de transformer une commande PWM en vitesse de rotation.

Esquema

El motor requiere una alta corriente para funcionar correctamente, por lo que el ESC será alimentado por una fuente de energía externa al microcontrolador. El control ESC está conectado a una ranura PWM del microcontrolador.

Code

Cada vez que se inicia el código, el sistema ESC debe seguir un cierto procedimiento para inicializarse correctamente. Este procedimiento se describe en la función initProcedure() y consiste en una sucesión de comandos PWM durante un cierto período de tiempo (correspondiente a las señales de los radiocontroles remotos).

//Parameters
const int escPin = 3;
int min_throttle = 1000;
int max_throttle = 2000;
unsigned long currentMillis, previousMillis;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init ESC
  pinMode(escPin, OUTPUT);
  initProcedure();
}

void loop() {
  runBrushless();
}

void runBrushless() { /* function runBrushless */
  //// Test Brushless routine
  Serial.println("running");
  currentMillis = 0;
  previousMillis = millis();
  while (currentMillis < 2000) {
    currentMillis = millis() - previousMillis;
    digitalWrite(escPin, HIGH);
    delayMicroseconds(1350);
    digitalWrite(escPin, LOW);
    delay(20);
  }
  Serial.println("stop");
  currentMillis = 0;
  previousMillis = millis();
  while (currentMillis < 2000) {
    currentMillis = millis() - previousMillis;
    digitalWrite(escPin, HIGH);
    delayMicroseconds(min_throttle);
    digitalWrite(escPin, LOW);
    delay(20);
  }
}

void initProcedure() { /* function initProcedure */
  //// ESC inittialisation process
  previousMillis = millis();
  Serial.println("throttle up");
  while (currentMillis < 3000) {
    currentMillis = millis() - previousMillis;
    Serial.println(currentMillis);
    digitalWrite(escPin, HIGH);
    delayMicroseconds(max_throttle);
    digitalWrite(escPin, LOW);
    delay(20);
  } //beep- beep-
  currentMillis = 0;
  previousMillis = millis();
  Serial.println("throttle down");
  while (currentMillis < 4500) {
    currentMillis = millis() - previousMillis;
    Serial.println(currentMillis);
    digitalWrite(escPin, HIGH);
    delayMicroseconds(min_throttle);
    digitalWrite(escPin, LOW);
    delay(20);
  } // beep--
  // 1 2 3
}

Resultado

Cuando encienda la tarjeta Arduino e inicie el código, deberá oír el ESC emitiendo sonidos para informarle de su progreso en la inicialización (dos pitidos cortos y un pitido largo). Entonces deberías ver el motor en marcha.

Aplicaciones

  • Construir un dron
  • Propulsar un barco a control remoto

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 4.8 / 5. Recuento de votos: 19

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?