Calibrer ses ESC avec un Arduino - drone ch. 3

Bonjour à tous,

Dans ce troisième chapitre, nous allons nous intéresser au calibrage des ESC. C'est une étape indispensable sans laquelle vous ne pourrez faire tourner vos moteurs à votre convenance.

Bien évidemment, ce calibrage se fera à l'aide d'un Arduino 🙂

1. Introduction

Maintenant que vous avez acheté tout votre matériel, arrive le moment de tester tout ça. Cependant, il va d'abord falloir calibrer vos ESC pour pouvoir les utiliser.

On n'a pas moyen de se passer de cette étape de calibrage ?

Que neni. Les ESC sont conçus être compatibles avec un maximum de radiocommandes/ordinateur de bord mais, en contrepartie, ils ont besoin d'être calibrés pour fonctionner avec votre matériel.

Concrètement, la calibrage n'a rien de compliqué: il s'agit d'envoyer aux ESC les extremums des commandes de gaz soit, en clair, le signal correspondant à la commande "arrêt moteur" et le signal correspondant à la commande "plein gaz".
Ainsi, les ESC connaîssent leur plage de fonctionnement.

2. Rappels sur la commande PWM

Nous avons vu dans le chapitre précédent que les ESC se comportent comme des servomoteurs. Aussi, nous allons devoir générer un signal PWM bien particulier pour les contrôler.

Voici ses caractèristiques principales:

  • Durée minimale à l'état haut: $1ms$
  • Durée maximale à l'état haut: $2ms$

Ce qu'il faut bien comprendre ici c'est qu'un servomoteur se positionne par rapport à la durée à l'état haut uniquement et non par rapport au rapport cyclique comme on pourrait être amené à le penser.

Voici pour rappel la définition du rapport cyclique d'un signal rectangulaire:
$$\alpha = \dfrac{\tau}{T}$$
$\alpha$  rapport cyclique
$\tau$ temps à l'état haut sur une période
$T$ période

Pour bien illustrer ce comportement, prenons deux exemples avec la même durée à l'état haut mais avec des fréquences de PWM différentes:

Exemple 1: F = 50Hz
$F =50Hz \rightarrow T$ = $20ms$
$\tau$ = $1.5ms$
$\alpha$ = $\dfrac{1.5}{20} = 7.5\%$
Exemple 2: F = 200Hz
$F = 200Hz \rightarrow T$ = $5ms$
$\tau$ = $1.5ms$
$\alpha$ = $\dfrac{1.5}{5} = 30\%$
Contrôle d'un servomoteur par un signal PWM

On constate bien qu'avec des fréquences de PWM différentes, le rapport cyclique est également différent. Et pourtant, le servomoteur se positionnera avec le même angle dans les deux cas.

C'est donc bien la durée à l'état haut qui compte, peu importe la fréquence de fonctionnement.

3. Présentation de la bibliothèque Servo

Fort heureusement pour nous, il existe une bibliothèque Arduino qui va nous permettre de générer facilement le signal PWM: la bibliothèque Servo.

Cette bibliothèque permet de contrôler jusqu'à 12 moteurs sur un Arduino Uno, ça nous laisse de la marge avec nos 4 ESC 🙂

Son utilisation est relativement simple comme vous pouvez le voir sur cet exemple:


#include <Servo.h> 

// Déclaration d'un servo.
Servo myservo;

void setup() 
{ 
  // On attache le servo au pin #9 de l'arduino.
  myservo.attach(9);

  // Et on écrit la valeur 90, ce qui correspond à un angle 0°.
  myservo.write(90);
} 

void loop() {}

La fonction qui permet d'envoyer la valeur souhaitée est la fonction write() qui accepte en paramètre une valeur comprise entre 0 et 180.

Pour un servomoteur classique, la valeur 0 le positionnerait à -90° tandis que la valeur 180 le positionnerait à +90°.
Dans le cas de nos ESC, la valeur 0 stoppe la rotation du moteur alors que la valeur 180 le fait tourner à plein régime.

4. Câblage

Il est maintenant temps de brancher tout ça. Commencez par relier vos moteurs à vos ESC.

Pour rappel, les moteurs brushless se comportent comme des moteurs triphasés, aussi le sens de branchement du trio de fils n'affectera que le sens de rotation. On s'en fou pour cette étape mais notez tout de même les sens de branchement pour plus tard.

Ne placez surtout pas vos hélices maintenant ou vos moteurs risquent de partir dans tous les sens. Vous ne voulez pas déjà abimer vos hélices ou vos doigts 🙂

Ensuite, reliez vos ESC à votre Arduino comme suit:

  • ESC 1: pin #4 de l'Arduino
  • ESC 2: pin #5 de l'Arduino
  • ESC 3: pin #6 de l'Arduino
  • ESC 4: pin #7 de l'Arduino
Cablage d'un ESC à l'Arduino

Attention à ne PAS alimenter l'Arduino avec la sortie BEC d'un ESC. L'Arduino sera alimenté en USB.

5. Calibrage

Arrive le moment tant attendu du calibrage. Et comme je suis sympa, je vous ai écrit un sketch Arduino qui vous permettra de calibrer vos ESC facilement:


/**
 * Usage, according to documentation(https://www.firediy.fr/files/drone/HW-01-V4.pdf) : 
 *     1. Plug your Arduino to your computer with USB cable, open terminal, then type 1 to send max throttle to every ESC to enter programming mode
 *     2. Power up your ESCs. You must hear "beep1 beep2 beep3" tones meaning the power supply is OK
 *     3. After 2sec, "beep beep" tone emits, meaning the throttle highest point has been correctly confirmed
 *     4. Type 0 to send 0 throttle
 *     5. Several "beep" tones emits, wich means the quantity of the lithium battery cells (3 beeps for a 3 cells LiPo)
 *     6. A long beep tone emits meaning the throttle lowest point has been correctly confirmed
 *     7. Type 2 to launch test function. This will send 0 to 180 throttle to ESCs to test them
 */

#include <Servo.h>

Servo motA, motB, motC, motD;
char data;

/**
 * Initialisation routine
 */
void setup() {
    Serial.begin(9600);
    
    motA.attach(4, 1000, 2000); // 1000 and 2000 are very important ! Values can be different with other ESCs.
    motB.attach(5, 1000, 2000);
    motC.attach(6, 1000, 2000);
    motD.attach(7, 1000, 2000);
    
    displayInstructions();
}

/**
 * Main function
 */
void loop() {
    if (Serial.available()) {
        data = Serial.read();

        switch (data) {
            // 0
            case 48 : Serial.println("Sending 0 throttle");
                      motA.write(0);
                      motB.write(0);
                      motC.write(0);
                      motD.write(0);
            break;

            // 1
            case 49 : Serial.println("Sending 180 throttle");
                      motA.write(180);
                      motB.write(180);
                      motC.write(180);
                      motD.write(180);
            break;

            // 2
            case 50 : Serial.print("Running test in 3");
                      delay(1000);
                      Serial.print(" 2");
                      delay(1000);
                      Serial.println(" 1...");
                      delay(1000);
                      test();
            break;
        }
    }
}

/**
 * Test function sending angle to the ESCs from 0 to 180 degrees
 */
void test()
{
    for (int i=0; i<=180; i++) {
        Serial.print("Speed = ");
        Serial.println(i);
        
        motA.write(i);
        motB.write(i);
        motC.write(i);
        motD.write(i);
        
        delay(200);
    }

    Serial.println("STOP");
    motA.write(0);
    motB.write(0);
    motC.write(0);
    motD.write(0);
}

/**
 * Displays instructions to user
 */
void displayInstructions()
{  
    Serial.println("READY - PLEASE SEND INSTRUCTIONS AS FOLLOWING :");
    Serial.println("\t0 : Sends 0 throttle");
    Serial.println("\t1 : Sends 180 throttle");
    Serial.println("\t2 : Runs test function\n");
}

Vous pouvez retrouver la dernière version de ce code sur mon repo github.

Commencez d'abord par uploader le sketch sur votre Arduino. Ensuite et SANS que les ESC ne soient encore alimentés:

  1. Connectez votre Arduino à votre PC grâce à son câble USB, ouvrez un terminal depuis Arduino Software et tapez 1.
    Cela va faire entrer les ESC en mode de programmation.
  2. C'est le moment d'alimenter vos ESC. Vous devriez entendre 3 bips "bip1 bip2 bip3" signifiant que votre alimentation est OK.
  3. Après 2 secondes, vous devriez entendre "bip bip" signifiant que la position "plein gaz" (valeur 180) à bien été enregistrée par les ESC.
  4. Tapez maintenant 0 dans le terminal pour envoyer la commande "arrêt moteur" (valeur 0) aux ESC.
  5. Plusieurs bips sont émis correspondant au nombre de cellules de votre batterie (et donc à son voltage). Par ex, 3 bips pour une LiPo 3S.
  6. Un bip long est émis signifiant que la position "arrêt moteur" a bien été enregistrée par les ESC.
  7. Les ESC sont maintenant calibrés. Tapez 2 dans le terminal pour démarer la fonction de test. Cette fonction va envoyer une commande de gaz partant de 0 pour progressivement arriver à 180.
    Vous devriez voir vos moteurs commencer à tourner de plus en plus vite jusqu'à atteindre leur vitesse de rotation maximale.

Vous n'êtes pas obligés de brancher vos 4 ESC en même temps, vous pouvez les calibrer un par un si vous le souhaitez.

6. Conclusion

Vos ESC sont maintenant calibrés pour votre Arduino et prêts à l'emploi. Vous pouvez d'ores et déjà vous amuser avec en attendant le prochain chapitre qui portera sur la réalisation du cadre et de la power distribution board.

A bientôt sur Fire-DIY !

Vos réactions (0) :

  1. Sois le/la premier(e) à commenter cet article !
Tu as besoin d'aide ? Utilise le Forum plutôt que les commentaires.

Un commentaire ?

* Champs obligatoires
Utilisation des données

Afin d'améliorer ton expérience utilisateur, nous utilisons des cookies 🍪