Aller au contenu


Photo
- - - - -

Servo qui oscille


7 réponses à ce sujet

#1 shuptuu

shuptuu

    Nouveau membre

  • Membres
  • 4 messages

Posté 17 janvier 2023 - 10:30

Bonjour,

Voilà, je suis musicien et pour les besoins d'un projet, j'ai fabriqué une marionnette chanteuse robotisée... Elle s'appelle Pepita! :-)

Pepita a une bouche qui bouge, 2 petits bras articulés et peut tourner la tête: on est sur du simple et basic, le tout animés par des servomoteurs.

J'ai commencé par une v1, fabriquée rapidement, en mode bricolage, qui fonctionne mais sous dimensionnée côtés servos (des 9497MG-D) qui du coup hurlaient au moindre mouvement.

J'ai donc voulu passer à une v2, plus costaud et mieux fini, à base de MG996R, sauf pour la bouche qui reste sur un 9497MG-D.

Je viens de terminer et ai fait les premiers tests: pour les bras, c'est beaucoup mieux. Pour la rotation de la tête, j'ai un problème d'oscillation...
Une petite video du problème dispo ici: https://u.pcloud.lin...o0HNSeqMyh9KQUy

Forcement, ma réalisation moins bricolée est plus lourde et j'imagine qu'il y a du coup une inertie dans les mouvements que le servo a du mal à contrer.
Qu'en pensez vous? Comment empêcher ça?
Comme vous pouvez le voir sur la video, j'utilise une transmission par engrenages. Est ce que passer sur une transmission par courroie crantée peut changer les choses? Ou c'est le servo qui est mauvais?
Autres pistes:

-L'axe de rotation est monté sur roulements et tourne donc très très bien. Est ce qu'il ne tourne pas trop bien justement?

-Est ce que d'alléger l'ensemble peut aider? (je peux faire des trous dans les plaques en alu pour que ça fasse moins lourd.)

Bref, tous vos commentaires me seraient bien utiles!
Et pour voir Pepita en action: 



#2 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 220 messages
  • Gender:Male

Posté 18 janvier 2023 - 11:25

Bravo, c'est super !

 

Le MG996R est un servo tout à fait correct. Pour des petits servos comme le 9497MG-D qui est assez cher, moi je préfère le MG92B que j'utilise en 7.4V, bien qu'il soit donner pour du 6V. De plus, ils sont beaucoup moins cher.

Tu devrais nous en dire plus sur ton code et ton matériel.

 

Aujourd'hui, j'étalonne mes servos avant leur utilisation. Pour cela, j'affine les valeurs des paramètres de la fonction Servo.attach(), https://www.arduino....s/servo/attach/

 

Je t'invite à regarder cette vidéo, https://www.robot-ma...ammer/?p=115625, ou je montre comment étalonner un GeekServo qui a une amplitude de 360°, mais le principe est identique pour un servo de 180°.

 

Dans cet exemple, les deux derniers paramètres de la fonction Servo.attach() sont de 500 et 2500. En modifiant ces valeurs par pas de 5 ou de 10, on arrive à supprimer les éventuels vibrations d'un servo. Une fois que j'ai déterminé ces valeurs, je les inscris sur une petite étiquette que je colle sur le servo.

Attention, si ces valeurs sont trop éloignées des valeurs de base, le servo peut être détruit.

 

Merci de nous tenir au courant de l'évolution de ton projet.



#3 shuptuu

shuptuu

    Nouveau membre

  • Membres
  • 4 messages

Posté 18 janvier 2023 - 02:08

Merci Oracid pour ton message.
Côté matériel, j'utilise une carte Seeed Xiao à base de Samd21, alimenté par l'usb.

Les servos sont alimentés en 7.5V par un bloc alim 5A.

J'étalonne mes servos également (recherche des min et max) et n'utilise que des .writeMicroseconds() pour les contrôler.

Après côté code, c'est très simple: je reçois des ordres via port série et fait un refresh des servos toutes les 20ms:

if ((millis()-servosupdate)>20){
    myHead.writeMicroseconds(Headvalue);
    myMouth.writeMicroseconds(Mouthvalue);
    myLeftArm.writeMicroseconds(LeftArmvalue);
    myRightArm.writeMicroseconds(RightArmvalue);
    servosupdate=millis();  } 

Mais je ne crois pas que mon problème d'oscillation soit lié à l'étalonnage: dans la petite video que j'ai faite, le servo est en position médiane donc loin du min ou du max, et la consigne pwm ne change pas. C'est vraiment interne au servo, dans sa régulation pour maintenir une position.



#4 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 220 messages
  • Gender:Male

Posté 18 janvier 2023 - 02:19

Dans ton code, je ne vois pas quelles sont les valeurs dans ta fonction Servo.attach().

Je suppose que tu utilises la bibliothèque Servo.h. Si c'est le cas, je ne comprends pas pourquoi tu rafraichis la position toutes les 20ms. C'est peut-être là, le problème.

Perso, quand j'envoie une position à un servo, le servo maintient la consigne, indéfiniment.



#5 shuptuu

shuptuu

    Nouveau membre

  • Membres
  • 4 messages

Posté 18 janvier 2023 - 03:28

J'ai des #define des valeurs min et max pour chaque servo au début de mon code
#define MouthMin 1052  
#define MouthMax 1376
#define LeftArmMin 610
#define LeftArmMax 2080
#define RightArmMin 544
#define RightArmMax 2030
#define HeadMin 890
#define HeadMax 2100
et ensuite:
 
  myMouth.attach(pinMouth,MouthMin,MouthMax);
  myLeftArm.attach(pinLeftArm,LeftArmMin,LeftArmMax);
  myRightArm.attach(pinRightArm,RightArmMin,RightArmMax);  
  myHead.attach(pinHead,HeadMin,HeadMax);

Oui, quand on envoie une position, le servo maintient la consigne. Dans mon cas, l'ordi peut être très bavard sur le port série et en fait mon refresh n'est pas pour maintenir la consigne mais pour éviter des modifications de consigne trop rapides. Je pourrais rajouter des if et ne faire le writeMicroseconds que si la valeur a changé, mais ça ne change pas grand chose.
Vérifié à l'oscillo, le signal pwm envoyé est très stable. L'oscillation ne vient donc pas du signal pwm et donc pas de mon code.   



#6 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 220 messages
  • Gender:Male

Posté 18 janvier 2023 - 06:47

L'oscillation ne vient donc pas du signal pwm et donc pas de mon code.   

Je veux bien le croire. Néanmoins, Servo.h envoie un signal toutes les 20ms, et toi tu superposes un ordre à la même fréquence.

 

Mes compétences en électronique sont très limités, mais si j'ai bien compris, la porteuse du signal est constant à 20ms, ce qui permet de tenir une position déjà atteinte, mais le servo n'est peut-être pas suffisamment rapide pour changer de position en 20ms.

 

Perso, je fais un code plus simple, voir simpliste.

Sinon, peut-être, changer de servo à l'identique pour voir si cela ne vient pas du servo. Ou alors, changer avec un servo différend.

 

En tout cas, ton code est très propre.



#7 shuptuu

shuptuu

    Nouveau membre

  • Membres
  • 4 messages

Posté 18 janvier 2023 - 11:27

Problème réglé!!

Merci Oracid, tu m'as mis la puce à l'oreille en me parlant du MG92B que tu utilises en 7.4V, bien qu'il soit donner pour du 6V. Suis retourné voir les specs des MG996R: Operating voltage: 4.8~ 6.6v
Sauf que mon alim envoie du 7.5v

Du coup je viens de tester en baissant la tension à 6v: plus de problème!!

Et ça s'explique: plus la tension est haute, plus le moteur tourne vite. à 7.5v, le moteur va trop vite pour l'électronique interne. Le temps de stopper le moteur quand il a atteint la position, que le moteur a déjà trop dépassé la position. L'électronique reactive le moteur en sens inverse et encore le temps de stopper le moteur quand il a atteint la position, que le moteur a encore déjà trop dépassé la position => oscillation.

Comme quoi, les données constructeurs, ça n'est pas pour rien...
Dans ton cas, tant mieux si ça marche. Fait attention quand même. Selon le type d'effort appliqué sur le servo, ça pourrait se mettre à osciller aussi.
Pour moi, par exemple, sur les bras, je n'ai pas le problème, mais il n'y a pas d'inertie comme il peut y avoir sur la rotation de la tête.
Bonne continuation et encore merci!

 



#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 518 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 19 janvier 2023 - 04:50

Juste pour info et même si c'était pas le problème ici, avoir une tension trop faible peut aussi provoquer le problème d'oscillations ! =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 




Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users