fbpixel
Etiquetas: , , ,

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.

brushless-ap03 Controlar um motor sem escovas com o Arduino

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.

arduino-esc-brushless_bb Controlar um motor sem escovas com o Arduino

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