Trop de servo pour mon alim ?

Bonjour à tous !

J'ai besoin de contrôler 16 servomoteurs. Sur la fiche de mon servo, il est indiqué :

Current draw at idle 10mA
No load operating current draw 170mA
Stall current draw 1400mA

Sachant que seul un servo bouge à la fois, je pense que mon alim 6V6A est largement suffisante !

Sauf que j'ai un comportement étrange au démarrage d'un petit programme que j'ai fait pour tester les servos un par un.

Dès que j'allume mon montage, TOUS les servo se mettent à bouger très légèrement par accoups et mon alim semble en difficulté (son voyant vert clignote en même temps que les servo bougent).

Si je débranche quelques servos (12 par exemple) de montage, plus de problème d'alim et seul le servo sensé bouger bouge.

Dans ce même cas qui fonctionne, je vois que les autres servo encore branchés ont un très léger mouvement au début.

C'est donc ce mouvement, sur les 16 servos, qui parasite mon alim à l'allumage.

Est-ce normal ? Comment éviter que tous les servos bougent légerement au lancement ?

Merci d'avance.

falsuss:
Bonjour à tous !

J'ai besoin de contrôler 16 servomoteurs. Sur la fiche de mon servo, il est indiqué :

Current draw at idle 10mA
No load operating current draw 170mA
Stall current draw 1400mA

Sachant que seul un servo bouge à la fois, je pense que mon alim 6V6A est largement suffisante !

Sauf que j'ai un comportement étrange au démarrage d'un petit programme que j'ai fait pour tester les servos un par un.

Dès que j'allume mon montage, TOUS les servo se mettent à bouger très légèrement par accoups et mon alim semble en difficulté (son voyant vert clignote en même temps que les servo bougent).

Si je débranche quelques servos (12 par exemple) de montage, plus de problème d'alim et seul le servo sensé bouger bouge.

Dans ce même cas qui fonctionne, je vois que les autres servo encore branchés ont un très léger mouvement au début.

C'est donc ce mouvement, sur les 16 servos, qui parasite mon alim à l'allumage.

Est-ce normal ? Comment éviter que tous les servos bougent légerement au lancement ?

Merci d'avance.

Bonsoir
ET si tu donnais toutes les references (servos/alim) , ainsi que ton prog de "test" , tu ne pense pas que ce serait "mieux" ?
8)

Salut et merci,

pour l'alim, je ne sais pas trop quoi te dire de plus que 6 volts 6 ampères =p Tu veux la marque ?

Pour les servos, il s'agit de MG996R, voici les spec :

Et voici donc mon code :

int pinServo1=22; // variable pour stocker le pin pour la commande
int pinServo2=23; // variable pour stocker le pin pour la commande
int pinServo3=24; // variable pour stocker le pin pour la commande
int pinServo4=25; // variable pour stocker le pin pour la commande
int pinServo5=26; // variable pour stocker le pin pour la commande
int pinServo6=27; // variable pour stocker le pin pour la commande
int pinServo7=28; // variable pour stocker le pin pour la commande
int pinServo8=29; // variable pour stocker le pin pour la commande
int pinServo9=30; // variable pour stocker le pin pour la commande
int pinServo10=31; // variable pour stocker le pin pour la commande
int pinServo11=32; // variable pour stocker le pin pour la commande
int pinServo12=33; // variable pour stocker le pin pour la commande
int pinServo13=34; // variable pour stocker le pin pour la commande
int pinServo14=35; // variable pour stocker le pin pour la commande
int pinServo15=36; // variable pour stocker le pin pour la commande
int pinServo16=37; // variable pour stocker le pin pour la commande

Servo leServo1; // on définit un objet Servo nommé leServo
Servo leServo2; // on définit un objet Servo nommé leServo
Servo leServo3; // on définit un objet Servo nommé leServo
Servo leServo4; // on définit un objet Servo nommé leServo
Servo leServo5; // on définit un objet Servo nommé leServo
Servo leServo6; // on définit un objet Servo nommé leServo
Servo leServo7; // on définit un objet Servo nommé leServo
Servo leServo8; // on définit un objet Servo nommé leServo
Servo leServo9; // on définit un objet Servo nommé leServo
Servo leServo10; // on définit un objet Servo nommé leServo
Servo leServo11; // on définit un objet Servo nommé leServo
Servo leServo12; // on définit un objet Servo nommé leServo
Servo leServo13; // on définit un objet Servo nommé leServo
Servo leServo14; // on définit un objet Servo nommé leServo
Servo leServo15; // on définit un objet Servo nommé leServo
Servo leServo16; // on définit un objet Servo nommé leServo

void setup() {
  leServo1.attach(pinServo1); // on relie l'objet au pin de commande
  leServo2.attach(pinServo2); // on relie l'objet au pin de commande
  leServo3.attach(pinServo3); // on relie l'objet au pin de commande
  leServo4.attach(pinServo4); // on relie l'objet au pin de commande
  leServo5.attach(pinServo5); // on relie l'objet au pin de commande
  leServo6.attach(pinServo6); // on relie l'objet au pin de commande
  leServo7.attach(pinServo7); // on relie l'objet au pin de commande
  leServo8.attach(pinServo8); // on relie l'objet au pin de commande
  leServo9.attach(pinServo9); // on relie l'objet au pin de commande
  leServo10.attach(pinServo10); // on relie l'objet au pin de commande
  leServo11.attach(pinServo11); // on relie l'objet au pin de commande
  leServo12.attach(pinServo12); // on relie l'objet au pin de commande
  leServo13.attach(pinServo13); // on relie l'objet au pin de commande
  leServo14.attach(pinServo14); // on relie l'objet au pin de commande
  leServo15.attach(pinServo15); // on relie l'objet au pin de commande
  leServo16.attach(pinServo16); // on relie l'objet au pin de commande
  
}

void loop() {
  
leServo1.write(1); 
delay(5000);
leServo1.write(120);
delay(5000);

}

Code qui fonctionne bien correctement quand je n'ai pas 16 servos sur mon alim =p

Bonjour,

Essaies de mettre un delai (par exemple delay(100)) entre chaque attach() pour éviter que tous les servos soient activés en même temps.

Salut,
En effet, avec tout ça je suis pas étonné.

Je ne vois pas l’appel de la bibliothèque <Servo.h>, mais si tu l’utilises, c’est normal que ça tremble.
Tes servos sont dans une positions et luttent pour y rester, c’est pour cela qu’on ne peut pas (tout doux), les faire tourner à la main.
Donc ils consomment tous du courant.

A voir les pics de consommation, tu dois très vite arriver à saturation de ta batterie. Ils n’ont donc individuellement pas assez de courant et se mettent à trembloter.

Même si tu les bouges individuellement, le temps passé à “ne pas bouger”, en fait ils sont en micro-mouvements pour rester dans la position que tu leur as indiquée.

pour l'alim, je ne sais pas trop quoi te dire de plus que 6 volts 6 ampères =p Tu veux la marque ?

AMHA, le pic de ta batterie est atteinte, et ca doit être une 6A/h
Un peu pour ca que sur les drones, on prend des lipos avec un C élevé, surtout pour les racers.

myservo.detach() permetrait de ne plus avoir de tremblements, ni de consommation, mais un servo détaché ne conserve pas sa position si on le force mécaniquement.
A voir si on a besoin ou pas de verrouiller les 16 positions.

Je suis d'accord avec Kamill pour le delai entre chaque déclaration de servo.

Au départ le servo est dans n'importe quelle position, dans les initialisations faites par la bibliothèque servo il y a un pré-positionnement commun et connu.

Le micro va beaucoup plus vite que la mécanique et une fois l'ordre reçu le servo devient autonome
Si les déclaration servo.attach(xxx) se succèdent les une à la suite des autres le résultat sera que tous les servo sont activés simultanément pendant quelques fractions de secondes et l'alim se mettra à genoux.

C'est bien là l'utilité de la fonction delay(), pas vraiment utile ni oportune dans la programation mais absolument nécessaire pour la configuration du matériel surtout quand il s'agit de mécanique.

Bonjour à tous et merci pour vos infos.

J’ai fait tous les tests proposés.

Au vue de la doc et des autres tests que j’ai effectué, je pense qu’il s’agit bel et bien d’un problème au niveau de la mise sous tension et non pas de l’attache.

Quand je mets sous tension, le servo prend une position entre 40 et 120° (je ne me suis pas amusé à chercher précieusement =p).

J’ai testé l’attache, avec des delais parfois assez important, ça ne change rien du tout.

La doc spécifie bien que le servos consomme 1.3A en mouvement. Et que la position maintient de position ne consomme que 10mA ou 170mA (idle or no load).

Je suis reparti sur un allumage en débranchant de l’alim 12 servos. Ça s’allume et ça fonctionne comme dit précédemment.

Et là, si je rebranche les servos 3 par 3, j’arrive au final à brancher mes 16 servos, qui tournent tous normalement comme il faut !

Et je peux modifier et uploader mon code, faire des changements etc sans problème.

Par contre, si je coupe l’alim et la relance avec les 16 servos de déjà branchés, à nouveau même problème !

J’ai une solution bricole (passer par des relais pour alimenter les servos par groupe), mais si vous avez mieux, je suis preneur !!!

qu'est ce que j'ai écrit plus haut, ta batterie se met à plat en A
6A/h pour 16 servos 1.3A, fais le calcul, elle tient pas le choc si tout se met en route en même temps.
si tu prends une batterie de 20A mini, ca le fera.

C'est réglé. J'ai mais 3 relais et j'active les servos 4 par 4 au démarrage.