Instabilité servomoteurs

#1
Bonjour
Avec mes élèves je viens de conclure une petite expérience robotique et je suis un peu déçu par la programmation des servomoteurs.
En effet, on a beaucoup de peine à ajuster la vitesse de ceux-ci.
Ce sont des servo à rotation continue que je programme sous picaxe blockly avec l'instruction positionner servo.
J'ai une alimentation de 6V pour les servos (4 piles) et 4,5 V (3 piles) pour la carte (Powerprog)
Comme il est demandé dans la notice du logiciel je reste entre 75 et 225 avec une position d'arrêt proche de 150.
Quelquefois, le changement de 1 unité produit un changement de vitesse énorme
Quelquefois même un changement de valeur radical produit un changement de vitesse insignifiant
La valeur d'arrêt peut être changeante (avec le même servo il va de soit)

Je pensais que la partie électronique d'un servo moteur produirait plus de stabilité dans la programmation et surtout plus de certitudes. Là, le robot qui va droit grâce à ces 2 servos c'est presque un coup de chance.
Est-ce normal? Y'a t-il quelque chose que je n'ai pas compris?
Merci d'avance pour votre aide..J'aimerais faire mieux l'année prochaine.
PG
 

BESQUEUT

Senior Member
#2
Bonjour,
A priori, ce que vous décrivez est normal ; il y a beaucoup d'éléments qui rendent le fonctionnement d'un servo à rotation continue non linéaire par rapport à la commande.
Simplement, cette non-linéarité sera plus ou moins prononcée en fonction de la qualité de réalisation (et donc du coût) entre franchement aléatoire (ce qui semble être votre cas) et quasiment parfait pour des modèles dits "numériques" haut de gamme.
Pour avoir une certitude de linéarité, il n'y a que deux options :
- moteurs pas à pas,
- encodeur en bout d'axe (optique ou magnétique) ou au niveau des roues.

La partie "électronique" d'un servo est en fait un potentiomètre qui lit la valeur angulaire et un "comparateur" qui ajuste la position du servo au PWM reçu.
Dans le cas d'un servo à rotation continue, le potentiomètre est désactivé et le comparateur ne compare plus rien mais transmet plus ou moins directement le PWM vers le moteur. Les différents frottements dans le moteur, le train d'engrenages et le véhicule conduisent à une vitesse de rotation en bout d'axe passablement aléatoire. Aucune mesure de contre-réaction ne vient stabiliser la chose...

Il existe des servo-avec-retours-dinformations mais le tarif n'est pas le même.

Autre option (mais probablement hors de portée pour des élèves) vue sur le forum anglais : utiliser une boussole et/ou un gyromètre pour contrôler la trajectoire...

Article intéressant sur la qualité des servos standards : test-de-precision-des-servos-micro-mini-standard/ Comme dit, pour un servo à rotation continue, c'est forcément pire...

Vous pouvez également lire Servomoteurs-numeriques
et Dynamixel-AX-12-user-manual.pdf
Mais il me semble que l'encodeur de roue est plus facile à comprendre (plus visuel) et moins coûteux.

La solution PAP est très fiable et peu coûteuse si on n'a pas trop besoin de vitesse et/ou de puissance : Stepper-Step-Motor-Driver-Board-ULN2003-with-drive-Test-Module-, voir gratuit en récupérant les composants d'une vieille imprimante...
 
Last edited:
#3
Bonjour,
Effectivement les servomoteurs « entrée de gamme » sont potentiellement capricieux…

On a cependant une bonne chance de réussite à condition de respecter ce qui est indiqué p. 213 de http://www.picaxe.com/docs/picaxe_manual2_fr.pdf

Utiliser une fois l’instruction « servo » en début de programme pour initialiser le servo (met en service le timer interne au PICAXE qui va gérer le signal envoyé au servo), ensuite utiliser uniquement l’instruction « servopos » qui modifiera la consigne de temps (sans perturber le timer qui est déjà « en route »).

Si vous utilisez Blockly voir les commande de la rubrique Sorties : « initialiser servo à » à placer en tête de programme, puis « positionner servo à » à chaque fois que vous souhaitez changer la consigne.

Si vous programmez en Organigramme dans PE6 prendre la commande « servo » de la rubrique Autre Entrée/Sortie et sélectionnez le mode approprié (Initialiser, ou mettre à jour).

Ne pas utiliser « initialiser servo à » pour chaque changement de consigne sans quoi ça va probablement « pétouiller » le temps que le timer interne se réinitialise…
 
#5
Bonsoir à tous,

Expérimentant la commande de barrières d'un passage à niveau automatique avec un Picaxe, j'ai acheté un Servo bas de gamme pour tester. J'ai utilisé tout d'abord la fonction Servo pour initialiser le programme, puis ServoPos pour commander l'angle souhaité.

Tout comme l'auteur de ce sujet, je rencontre très souvent des fonctionnements anarchiques du servo, malgré une alimentation de qualité.

A l'oscillo, je me suis aperçu que ces "sauts" provenaient (fort logiquement) du fil de commande du servo. En déconnectant ce fil, le servo reste figé... Mais cela ne résoud pas mon problème.

La solution a été trouvée en évitant l'instruction servo, mais en envoyant des pulses de largeur appropriée, via la fonction Pulseout.

Par exemple :
Bas = 100
Haut = 200

For angle = Bas to Haut
Low MaSortie
Pulseout MaSortie, angle
pause 40
Next

J'obtiens alors un fonctionnement correct : les barrières descendent tranquillement, sans aucun à-coups.

Cerise sur le gateau, je peux, avec quelques lignes de code supplémentaires :

- arrêter le module "sonnerie" (WTV020-M01) lorsque les barrières sont presque au niveau "bas".
- faire un freinage accentué dans les derniers degrés, comme sur les vrais PN. C'est magique.

Bonnes bidouilles à tous.

Daniel
http://www.roverch.net/modelisme/Modelisme.html
 

BESQUEUT

Senior Member
#6
Last edited:
Top