Accueil > Forum > Electronique > Arduino > Calibrage ESC

Calibrage ESC

1 2
djeje djeje 4 Messages
Bonjour,

Je suis subjugué par la qualité des articles et je vous remercie pour ce partage.

Je me pose une question sur le calibrage des ESC. Dans le tuto on augmente automatiquement le vitesse puis on le stop net.
Ce qui m'étonne c'est que le calibrage ne dépende pas de la radiocommande aussi.
Ma vrai question, j'ai un ESC trackstar 80A que je n'arrive pas à calibrer avec ma radiocommande je pensais donc faire ça avec l'arduino. Qu'en pensez vous ?

Bien cordialement
Jérome
lobodol lobodol 635 Messages BIG BOSS
Salut djejde, content que les articles te plaisent, ça fait plaisir à lire

Pour la partie calibration je te conseille en effet d'utiliser ton Arduino, tu maîtrisera plus les signaux envoyés.
djeje djeje 4 Messages
Merci.

Je me posais une question car je n'arrive pas à le calibrer, à quoi correspondent les valeurs 1000,2000.
Est -ce que ça pourrait en être la cause ?

Merci par avance !
lobodol lobodol 635 Messages BIG BOSS
Ces valeurs correspondent respectivement à la durée min et max de l'impulsion (en ms).
D'après moi c'est clairement ça qu'il faut adapter dans ton cas. Il va te falloir fouiller dans la doc de tes ESC pour trouver leur plage de fonctionnement.
Fredblock Fredblock 13 Messages
Hello
Je me permet de reprendre ce sujet, qui est une bonne base pour solutionner mon problème.
Je suis également sur un projet de drone quadrirotor, malgré le fait que je sois débutant dans l'arduino (mais c'est en faisant que l'on apprend  )
J'ai passé l'étape calibrage des ESC en m'aidant du tuto calibrage des ESC, et jusque là, cela fonctionne. Les moteurs cherchent leurs positions lors de l'alimentation des ESC, et lorsque j'envoie la commande 0 dans le moniteur série, les moteurs s'arrêtent suite au bip bip bip rapproché.
Et suite à la commande 2, les moteurs prennent leurs régimes crescendo jusqu'au régime max et enfin la coupure.
Normalement, arrêtez-moi si je me trompe, mais l'apprentissage est terminé, on peut donc couper l'alimentation des ESC.

Mon problème surgit maintenant.
J'ai voulu tester mes 4 moteurs via un potentiomètre (1er étape avant d'essayer avec un joystick en liaison filaire) afin de simuler manuellement une accélération et/ou décélération des moteurs.
J'ai branché le signal ESC1 sur la pin 4 de l'arduino, l'ESC2 sur la pin 5, l'ESC3 sur la pin 6 et l'ESC4 sur la pin 7.
La masse ESC1/2/3/4 sur la masse breadboard.
5V arduino sur la breadboard + et GND arduino sur la breadboard -
Et la pin A0 sur mon potentiomètre.

Et voici mon code :


#include <Servo.h> //Appel de la library Servo.h
int valeur = 0; //Variable potentiomètre
Servo esc ; //Variable de type servo et de nom esc

void setup() {
  esc.attach(4); //attribution de la pin 4 à la variable esc
  esc.attach(5); //attribution de la pin 5 à la variable esc
  esc.attach(6); //attribution de la pin 6 à la variable esc
  esc.attach(7); //attribution de la pin 7 à la variable esc
  esc.writeMicroseconds(1000); //attribution de la valeur mini
  Serial.begin(9600);
}

void loop() {
  valeur = analogRead(A0);
  int valeuresc = map (valeur , 0 , 1023 , 1000 , 2000);
  esc.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
  Serial.println(valeuresc);

Résultat des courses ? Sur les 4 moteurs, celui relié à la PIN7 fonctionne comme je le souhaite, c'est à dire que son régime varie bien selon la position potentiomètre.
Mais les 3 autres moteurs ne fonctionnent pas. Ils cherchent leurs positions en faisant des BIP.

De ce fait, plusieurs interrogations me viennent à l'esprit :
- est-ce que l'apprentissage du couple ESC/MOTEUR est toujours ok malgré que le code apprentissage n'est plus dans l'arduino ? en clair, est-ce que l'ESC garde en mémoire cet apprentissage ? Puisque j'ai l'impression que c'est un problème d'apprentissage/calibrage des ESC vu que 3 moteurs cherchent leurs positions.
- Si l'apprentissage est enregistré, cela semblerait être un problème de connexion du fil signal ESC non ?

Il faut peut-être même combiner les 2 codes, c'est à dire celui du calibrage et essayage des moteurs via potentiomètre ?
J'ai essayé plusieurs fois, et le phénomène est répétable. Ce n'est pas aléatoire.

Rappel du matériel :

- 4X Racerstar 2207 BR2207S Fire Edition 2500KV
- 4X ESC XXD HW30A 30A
- ARDUINO UNO
- LIPO 5000 mAh 3S


Merci par avance pour l'aide apportée :)
Fred
lobodol lobodol 635 Messages BIG BOSS
Salut Fredblock, ton problème vient de esc.attach(); Tu dois créer une variable de type Servo par ESC. Là tu ne fait qu'écraser l'assignement à chaque fois.
Ton code doit donc être le suivant :


#include <Servo.h>

Servo esc1 esc2 esc3 esc4 ;

void setup() {
  esc1.attach(4);
  esc2.attach(5);
  esc3.attach(6);
  esc4.attach(7);

  esc1.writeMicroseconds(1000);
  esc2.writeMicroseconds(1000);
  esc3.writeMicroseconds(1000);
  esc4.writeMicroseconds(1000);

  Serial.begin(9600);
}

Avec ça, ça devrait marcher nickel
Fredblock Fredblock 13 Messages
Merci pour ta réponse.
Il est vrai que ça paraît plus logique de cette manière.
Mais par contre il faut que je rajoute ma fonction loop par dessus non ?

Mon autre question, lorsque l'apprentissage de l'ESC est fait, et que l'on enlève le code de l'apprentissage de l'arduino, l'ESC garde bien en mémoire l'apprentissage ?

Fred
lobodol lobodol 635 Messages BIG BOSS
Mais par contre il faut que je rajoute ma fonction loop par dessus non ?
Oui, bien sûr. Je n'ai mis là que ce qui change par rapport à ton code.
Une fois que l'ESC est calibré, c'est stocké dans sa mémoire interne, donc plus besoin du code.
La seule chose indispensable c'est d'initialiser la valeur du zero-throttle dans la fonction setup().
Fredblock Fredblock 13 Messages
Un grand merci à toi :)
Malheureusement j'ai essayer ton code avec le reste  du mien (variable potentiomètre et fonction loop)
Mais un message d'erreur survient après compilation sur la ligne Servo esc1 esc2 esc3 esc4 ;
Avec comme message : " expected initializer before 'esc2'
Fredblock Fredblock 13 Messages
J'ai dupliqué les variables servo pour chaque ESC et ça fonctionne. Voici une copie de mon code :


#include <Servo.h> //Appel de la library Servo.h
int valeur = 0; //Variable potentiomètre
Servo esc1 ; //Variable de type servo et de nom esc
Servo esc2 ; //Variable de type servo et de nom esc
Servo esc3 ; //Variable de type servo et de nom esc
Servo esc4 ; //Variable de type servo et de nom esc

void setup() {
  esc1.attach(4); //attribution de la pin 4 à la variable esc
  esc2.attach(5); //attribution de la pin 5 à la variable esc
  esc3.attach(6); //attribution de la pin 6 à la variable esc
  esc4.attach(7); //attribution de la pin 7 à la variable esc
  
  esc1.writeMicroseconds(1000); //attribution de la valeur mini
  esc2.writeMicroseconds(1000); //attribution de la valeur mini
  esc3.writeMicroseconds(1000); //attribution de la valeur mini
  esc4.writeMicroseconds(1000); //attribution de la valeur mini
  
  Serial.begin(9600);
}

void loop() {
  valeur = analogRead(A0);
  int valeuresc = map (valeur , 0 , 1023 , 1000 , 2000);
  esc1.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
  esc2.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
  esc3.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
  esc4.writeMicroseconds(valeuresc); //attribution de la variable mappée à l'esc
  Serial.println(valeuresc);
}


il y a très probablement moyen de le réduire. mais ça fonctionne.
Si quelqu'un peut m'aiguiller pour le rendre plus optimisé, ça m'intéresse :)

Fred
lobodol lobodol 635 Messages BIG BOSS
Impec. Ton est code tout ce qu'il y a de plus court, pas moyen de le réduire :)
Fredblock Fredblock 13 Messages
Merci pour ton aide.
Je vais maintenant essayé de remplacer le potard par un Joystick type celui de ma radiocommande, et m'attaquer au calibrage du capteur Gyroscopique :)
Fred
Fredblock Fredblock 13 Messages
Hello

Après avoir savourer les premiers décollages de ma petite bête à 4 bras, j'ai très vite remarqué après plusieurs checks, que mes ESC deviennent rapidement (après plusieurs minutes d'alimentation/essais) tiède.

Est-ce un phénomène normal ?
Il faut dire qu'ils sont plutôt consommateur, mais de là être tiède aussi rapidement ...

Hâte de vous lire

Fred
lobodol lobodol 635 Messages BIG BOSS
Yo, oui c'est totalement normal. Tes ESC sont des 30A, avec une LiPo 3S  la puissance dissipée vaut $P = U \times I$ :
$$11.1 \times 30 = 333W$$
Ça en fait des watts !

Réellement, ils ne dissipent pas cette puissance en continue, ça varie en fonction du courant tiré. Mais quand même, c'est normal que ça chauffe.
Fredblock Fredblock 13 Messages
Hello
Merci pour ta réponse.
Cela semble logique, mais la rapidité à laquelle ils chauffent me laissait songeur.

J'ai beaucoup d'autres questions liées au stade auquel mon drone progresse.
Si tu es d'accord, je vais ouvrir un ou plusieurs autre sujets différents ( pour structurer un peu tout de même )

Merci
Fred
1 2
Vous devez être connecté pour pouvoir répondre à ce sujet.
Utilisation des données

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