Quand on donne à un servo l'ordre d'aller à une position à une autre, il y va avec sa vitesse maximum. Bon nombre de posts que j'ai vu le faisait fonctionner en pas à pas degré par degré pour le ralentir. Cela fonctionne bien.
Par contre à la mise sous tension comme on ne sait pas où on s'est arrêté, on ne peut pas donner une rampe, et on a un fonctionnement brusque au départ, puis après seulement on peut avoir un fonctionnement plus cool.
Y aurait-il un moyen soft pour faire démarrer les servos à vitesse réduite? Cela permet par exemple d'écrire le code dans une bibliothèque.
J'ai testé sur mon servo plusieurs façons, mais rien ne fonctionne:
− au lieu d'envoyer un train d'impulsion de 500µs, j'en envoie qu'une seule puis calme plat (broche maintenue à 0V). Le servo se positionne avec la première impulsion, même si le train est à 1Hz au lieu de 50Hz.
− j'ai essayé d'envoyer des impulsions incohérentes, par exemple une impulsion à 500µs suivies d'impulsions plus courtes que 200µs ou plus grandes que 5000µs, les trop courtes sont ignorées et les trop longues sont prises comme si elle faisaient 2500µs.
minus; J'ai essayé aussi une suite d'impulsions 500µs 2500µs 500µs 2500µs ... mais il les prend aussi en compte et se met à brouter.
D'ailleurs après mes essais je me dit que c'est pas la peine d'envoyer un train d'impulsion, il suffit d'envoyer une seule impulsion chaque fois que l'on veut changer de place. Mais cela ne fonctionne sans doute pas avec tous les servos.
Dans les deux cas on ralentit le servo quand on en connait sa position. Cela fonctionne pour le fonctionnement général, mais pas au démarrage. Il n'y a qu'au démarrage qu cela pose un problème. Pour moi dédier une carte microcontrôleur en plus alors qu'on a souvent la place dans la première est une usine à gaz. Ce que peut faire le boîtier peut se faire au départ.
Ponctuellement le hard peut se faire, mais c'est un peu comme les poussoirs, cela ne coûte rien de le faire par logiciel. Surtout que quand c'est fait une fois, c'est utilisable 1000 fois.
On voit ceux qui sont hard, et ceux qui sont soft!
Dans le tuto d'Eskimon on trouve le principe d'un servo analogique : charge d'un condensateur à l'aide de MLI pour créer une tension de commande.
Le retour du potentiomètre est comparé à cette tension.
S'il n'y a qu'une impulsion, la tension aux bornes du condensateur restera nulle.
Les servo classiques que l'on rencontre ici sont toujours des servos analogiques bien que maintenant il y a des circuits intégrés.
Je pense qu'il faudrait se pencher sur les fonctions de ces circuits intégrés.
J'en avais identifié un : AA51880
Société : Agamem
Site : www.agamem.com.tw
La doc est sommaire.
@vileroi : le "hard" sera toujours plus rapide que le "soft", et là je pense que tu cherches de la vitesse.
C'est pas la conclusion que je fais. Je mets une impulsion seule impulsion, et mon servo se place correctement. Et j'ai pris le moins cher pour faire des essais. Je pensais effectivement qu'il ne bougerait qu'un peu si il n'y en avait qu'une. Forcément, il y a un CI intelligent dedans.
C'est surtout pour m'écrire ma bibliothèque une fois pour presque toutes.
Depuis que j'ai arrêté de travailler, je suis moins pressé. Et là justement, je cherche à aller lentement et ce C.. de servo va trop vite!
C'est assez drôle dan la datasheet de ce circuit, il n'en pas mention des temps, en particulier de ce qui se passe si on ne donne qu'une impulsion par heure.
C'est bien le problème. Par logiciel si l'on veut ralentir un servo on lui demande un déplacement à partir de la position de départ X jusqu'à la position d'arrivée Y, avec un délai entre chaque pas.
Mais si l'on ne connait pas la position Z de départ (rechargement du code ou reboot par exemple), le servo, à la première commande, va se positionner de Z en X en très peu de temps.
A la limite on pourrait enregistrer la position actuelle dans l'EEPROM. Mais cela pose un problème de durée de vie.
C'est pas génial non plus (bien que soit soft) parce qu'on ne connait pas en général la position actuelle. On ne connait que la position demandée. Et à chaque demande nouvelle, il y a un temps pendant lequel les deux ne coïncident pas.
Si on va vite, on peut avoir demandé la position 180°, mais le servo serait encore en 0° au moment de la coupure. Et si on va lentement, degré par degré, il faut pour chaque mouvement, écrire 180 fois dans l'EEprom. Ou alors il faut un détecteur de coupure d'alimentation, mais on complique pas mal les choses. Et cela n'est pas possible pour écrire une bibliothèque générale.
Je pense surtout à une maquette genre train électrique et paysage animé. Je vois un passage a niveau avec une barrière mue par un servo. Il y aurait un problème de démarrage. Pareil avec un petit bonhomme qui scie...
Je crois avoir trouvé l'unique solution: je m'occupe du ralenti en fonctionnement et pas de ce qui se passe à la mise sous tension.
Moi, j'étais dans l'électronique donc j'en fais le moins possible maintenant!
En fait ce qu'il faut, c'est amener manuellement le servo en position RAZ avant de le commander.
Et pourquoi ne pas ajouter un servo pour ramener le premier servo en position zéro ?
Avec un condensateur et une diode on peut facilement stocker suffisamment d'énergie pour sauvegarder une position dans l'EEPROM en cas de coupure d'alimentation.
Mais cela suppose un peu de hard. Et une librairie servo peut difficilement tenir compte de cela de manière générique, bien que l'on puisse conditionner la détection de coupure secteur dans le code.
Déjà proposé (très sérieusement) en #3.
Il est possible d'ailleurs de conditionner l'utilisation du retour de position dans le code, en passant le N° de broche analogique au constructeur de la classe, et -1 s'il n'y a pas de retour.
Cela permettrait en outre d'utiliser des servos avec retour de position avec la même librairie.
Ben parce qu'il en faudrait un troisième pour ramener le deuxième.
Peut être aussi qu'ils ne sont pas tous réversible.
Mais ce retour ne sert qu'à la mise en position initiale Non? Cela sert aussi en fonctionnement?
J'ai l'impression qu'avec celui que j'ai il est suffisamment démultiplié pour être non réversible et suffisamment en plastique pour ne pas admettre un blocage.
Absolument, en tous cas c'est comme cela que je l'ai utilisé sur une porte à guillotine.
A chaque fois que je rechargeais le code, le servo se remettait brutalement en position ZERO. Avec cette modif, plus de problème.
Par contre le retour peut aussi être utilisé pour détecter un blocage mécanique.
Après réflexions et tests, j'ai opté pour pouvoir utiliser des servos 4 fils. Dans la vidéo qui suit, un programme fait faire des aller retours en en 8s sans fin. Si on appuie sur reset, au démarrage les battements reprennent de la position actuelle sans a-coups.
Avec un servo 3 fils (il suffit de débrancher le 4ème fil), au démarrage, on a une remise en position fixe rapide avant les mouvements lents. video ici
Merci notamment à Henri pour ce 4ème fil et à tous les comiques qui mettent des couleurs
Grâce au 4ème fil, dès le démarrage, j'ai le servo lent.