Servomoteur de modèlisme

Bonjour,

Je parle des petits servomoteurs de modélisme que l’on trouve à pas cher.

J’aimerai bien savoir s’il y a une norme, ou au minimum un accord de principe entre les fabricants pour le dimensionnement des signaux de commande.

Il se trouve que je cherche à utiliser un servo 270° en plus d’un classique 180°

Pressentant une source d’embrouille j’ouvre les fichiers de la bibliothèque servo et je trouve dans servo.h :

void write(int value);  // if value is < 200 its treated as an angle, 
                        // otherwise as pulse width in microseconds

Donc si je demande 240° la méthode fera 240 µs !

D’autre part j’ai lu à plusieurs reprises que les signaux de commande faisait 1,5ms pour la position centrée, 1 ms pour un extrême et 2 ms pour l’autre extrême.

Mais alors pourquoi dans la bibliothèque servo on défini le temps min à 544 µs et le temps max à 2400 µS ?
Ne m’aurait t-on pas tout dit ? :grin:

Passons à la pratique cela dissipera peut-être les brumes.

Test avec deux servos : un classique 180° et le 270°.
Utilisation de la méthode write qui reçoit une valeur d’angle.
Servo 180 :
entre write(0) et write(180) il fait bien 180° (enfin un peu plus mais là je pense que c’est du à la réalisation du servo).

Servo 270
Entre write (0) et write (180) le servo fait en gros 270° pour en savoir plus il faudrait que je fasse des mesures d’angle plus précises mais à première vue ce devrait être 270°

Autre test :

void test_4()
{ 
  servo_270.writeMicroseconds(1000); 
  delay(1000);
  servo_270.write(0);
  delay(1000); 
}

Le servo devrait être immobile et il fait en gros des angles de 30° entre les deux ordres.

Dernier test :

servo_270.write(170);
  delay(1000);
 servo_270.write(175);
  delay(1000);
 servo_270.write(180);
  delay(1000);
 servo_270.write(185);
  delay(1000);
 servo_270.write(190);
  delay(1000);
  servo_270.write(195);
  delay(1000);

Normalement une valeur d’angle inférieure à 200 est valide.
Au delà de write (180) le servo est immobile, les valeurs supérieures à 180 ne sont pas prise en compte. Cela semble cohérent mais alors pourquoi cette limite à 200 ?

Mesure des temps :
Write (0) si ce qu’on lit est vrai l’impulsion devrait faire 1ms or je mesure 543,8 µs soit, comme par hasard, la limite basse définie dans la bibliothèque.
Idem pour 180 je mesure 2,398 ms

Conclusion
La définition de la méthode write est fausse profondément incomplète car elle n’est valable que pour un seul modèle de servo les 180.
Par contre elle fait quand même le travail avec des servos non 180 mais sans le dire.

En fait 0 correspond à l’angle minimal et 180 à l’angle maximal peu importe la valeur de cet angle.
Je pense qu’avec un servo 1/4 de tours on obtiendrait l’angle max de 90° en en demandant 180 !

Les temps réellement pratiqués n’ont rien à voir avec ce que l’on lit (de 1ms à 2 ms).

Quelqu’un a t-il une norme sur les servo de modélisme ?

Bonjour 68tjs

d'apès cette page : Pololu - Servo control interface in detail

pas de standard

There is no standard correspondence between the pulse width and the servo position. Generally speaking, moving from 1.0 ms to 2.0 ms will yield about 90 degrees of servo movement........

al1fch:
Bonjour 68tjs

d’apès cette page : Pololu - Servo control interface in detail

pas de standard

bonjour
A ma connaissance il n’existe pas de normalisation formelle concernant le “signal servo”
c’est au systeme de commande de fournir le signal “kivabien” pour un servo donné
la pseudo norme est pour moi une impulsion de 1 à 2 ms avec 1.5 ms pour la position mediane du servo , la récurrence est de 25 ms

L’ideal est de se faire un petit testeur permettant de regler la durée de l’impulsion entre 0.5 et 2.5 ms , la recurrence entre 5 et 100 ms et la hauteur de l’impulsion entre 0 et +V alim servo

Merci à tous les deux.

@Artouste : je pencherai plutôt sur une récurrence de 20 mS pour des raisons pratiques : les servos industriels utilisent le secteur et 20 ms correspond à 50 Hz. Le 50 Hz en milieu industriel est une base de temps précise et gratuite.

Je n'arrive pas à me faire aux approximations Arduino ( approximations : je pèse mes mots), je n'ai pas été habitué à travailler comme cela.

C'est quoi cette histoire de 1 à 2 ms alors que la réalité montre que c'est 0,6 ms - 2,4 ms ?

Je viens de télécharger pour voir la version 0013 de 2007 et c'était déjà 0,6 ms / 2,4 ms.
Au passage pour le plaisir dans la version 1.8.10 la bibliothèque Servo utilise toujours pour les interruptions la macro SIGNAL qui est "deprecated" au minimum depuis 18 ans !

C'est vraiment du n'importe quoi alors que c'est si facile de dire les choses corectement dans la documentation.

Je confirme ce qui a été dit plus haut : à l'époque où je faisais du modélisme, dans ma jeunesse pas si loin mais plus si proche (c'est à dire les années 90), il n'y avait quelques fabricants de servo. Graupner, Futaba, Hitec, Sanwa, Multiplex et je ne dois pas en oublier beaucoup. Tous fonctionnaient déjà suivant le même principe, mais suivant les marques les neutres oscillaient entre 1,2 et 1,6ms. Pas de normalisation.
Et ça ne semble pas être dans les tuyaux, les normes c'est pas le truc des modélistes : tout le monde utilise désormais la bande de fréquence de 2,4GHz pour les radiocommandes, mais personne n'utilise les même composants, et personne n'utilise donc les mêmes sauts de fréquence. C'est une parenthèse.

Pour ce qui est de faire avec (ou plutôt sans !) les bibliothèques standard d'Arduino, l'idéal est d'utiliser les timers du microcontrolleur. Il y a quelques années j'avais voulu faire une carte de contrôle de quadricopter,j'avais trouvé des articles assez clairs sur cette question-là. L'idée est d'utiliser les deux compteurs d'un timer, l'un qui fait la remise à zéro toutes les 20ms, et l'autre qui donne la bonne longueur d'impulsion au servo. Si on a qu'un seul servo on peut le brancher directement sur une des broches contrôlées par le timer, autrement on change l'état de la broche correspondante dans une fonction d'interruption.

Oui on peut toujours.......mais qui peut le faire ?

Personnellement j'ai suffisamment d'expérience en électronique pour "sentir où cela pourrait coincer" et c'est bien comme cela que ça c'est passé.

Sur le fond je n'ai aucun problème, j'ai compris le truc, une règle de 3 et c'est réglé.
Il me reste juste à trouver la précision obtenable avec writeMicrosecond(), autrement dit quel est le pas minimal.
L'étape d'après sera dans le servo : est-ce que l'asservissement à l'intérieur du servo est capable de gérer ce pas minimal -> c'est inutile donc indispensable, c'est mon coté vieil électronicien en retraite qui se fait plaisir ( je sens qu'il va y avoir un miroir fixé au servo et un pointeur laser).

Mon coup de gueule est autre : je vois passer de nombreux débutants totaux qui tout naturellement croient dur comme fer ce qui est écrit sur le site arduino.

Là où je trouve que c'est grave c'est quand ce qui est écrit est présenté comme une généralité alors que ce n'est qu'un cas particulier.

S'il existait un constructeur qui permettent d'introduire les paramètres du servo réel.
Tmin, Tcentré, Tmax, angle
L'explication serait toute faite.

Oui, nous sommes d'accord : Arduino est à la fois un outil fantastique et irremplaçable pour mettre facilement un pied dans la programmation interactive, et mettre en place des systèmes qui peuvent être puissants.
Mais Arduino est aussi un outil relativement limité comparé aux capacités des techniques mises en œuvre, et passer du bidouillage à quelque chose de plus carré et puissant est difficile. Et les informations sont à chercher ailleurs, ce qui est dommage.