Étiquettes : , , ,

L’un des objectifs principaux de la robotique est d’articuler des objets. Pour se faire, il est très courant d’utiliser des moteurs électriques. Dans le cas de robot volant, comme les drones les actionneurs ont besoin de vitesse de rotation important pour faire tourner les hélices et permettre le vol. Dans ce cas, des moteurs brushless sont souvent utilisés. La particularité du moteur brushless (sans-balai) est qu’il peut atteindre de très grande vitesse par rapport aux autres type de moteur avec un couple moins important, bien entendu.





Matériel

  • Ordinateur
  • ArduinoUNO
  • Câble USB A Mâle/B Mâle
  • Brushless



Principe de fonctionnement

Les moteur 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.




Schéma

Le moteur nécessite un courant élévé pour fonctionner corrrectement, l’ESC sera donc alimenté par une source d’énergie extérieur au microcontrôleur. La commande de l’ESC est branchée à une boche PWM du microcontrôleur.



Code

A chaque démarrage du code, l’ESC doit suivre une certaine procédure pour s’initialiser correctement. Cette procédure est décrite dans la fonction initProcedure() et consiste en une succession de commande PWM pendant un certains temps (correspondant à des signals provenant de télécommandes radio).

//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);
    }
}




Résultat

Lorsque vous allumez la carte Arduino et lancez le code, vous devriez entendre l’ESC émettre des sons pour informer de son avancement dans l’initialisation (deux beep court et un beep long). Vous devriez ensuite voir le moteur tourner.



Applications

  • Faites voler un drone
  • Propulser un bateau télécommandé

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