fbpixel
Etiquetas: , , ,
4.5
(2)

Um dos principais objetivos da robótica é a articulação de objetos. Para isso, é muito comum usar motores elétricos. No caso de robôs voadores, como os drones, os atuadores precisam de alta velocidade de rotação para girar as hélices e permitir o voo. Neste caso, os motores sem escovas (ou brushless) são frequentemente utilizados. A sua particularidade é poder atingir velocidades muito altas em comparação a outros tipos de motores – com um torque mais baixo, é claro.

Material

  • Computador
  • Arduino UNO
  • Cabo USB A Macho/B Macho
  • Brushless+ESC

Princípio de funcionamento

Os motores sem escovas são motores com três bobinas, chamados motores trifásicos. Isto significa que eles geram uma rotação contínua quando defasamos as correntes sobre as bobinas. A geração de perfis de corrente em cada bobina, para obter a velocidade desejada, requer o uso de um controlador de velocidade (chamado ESC, Electronic Speed Controller) a fim de transformar um comando PWM numa velocidade de rotação.

Esquema

O motor requer uma corrente elevada para funcionar bem, então o ESC será alimentado por uma fonte de energia externa ao microcontrolador. O controle do ESC é ligado a um pino PWM do microcontrolador.

Código

Cada vez que o código é iniciado, o ESC deve seguir um procedimento específico para se inicializar corretamente. Este procedimento é descrito na função initProcedure() e consiste numa sucessão de comandos PWM por um certo período de tempo (correspondente aos sinais dos comandos via rádio).

//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

Quando a placa Arduino é ligada e o código é executado, o ESC emite sons para informar o seu progresso na inicialização (dois bipes curtos e um longo). O motor deve então começar a funcionar.

Aplicações

  • Fazer um drone voar
  • Impulsionar um barco controlado à distância

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 4.5 / 5. Vote count: 2

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?