Servomoteur MC-410 & Arduino ?

Bonjour à tous,

Ca fait un bail, j'espère que vous allez bien.

Je suis en train de préparer un char "animé" pour le carnaval des enfants de mon village et malheureusement en ne regardant que le prix et la tension, j'ai pris un peu trop vite des MC-410 (BMS410C) de chez Modelcraft.

L'ennui c'est qu'avec la librairie servo je ne parviens à obtenir qu'une liberté de 145° et entre 20° et 165°. Sur la boîte je n'ai que ceci comme "spec" : 0.17sec/60° C/0,15sec/60°
J'avoue que j'ai du mal à saisir...

Si je regarde plus loin, dans le site où je l'ai acheté, j'ai ceci :
. Dead Bend Width : 0.004ms (4us)
. Instant Speed Reaction Time : 3ms (High Response System [HRS] of Futaba-4PK & Sanwa-M11X)
. Rotating Direction : Clockwise / Pulse Traveling 1500 ~ 1900u sec
. Operating Travel : 90° (When 1100 ~ 1900 μ sec)

Je ne suis pas - encore - très familier avec les servomoteurs, mais avec un autre de chez Reely (RS-606WP) je n'ai aucun problème pour lui faire aller n'importe où sur 360°. L'ennui c'est que j'ai 3 MC-410 et plus le temps pour les échanger... :frowning:

Un petit peu d'aide serait donc fortement appréciée...

Merci d'avance !
Z

Sur la doc technique de ce moteur, il est indiqué que la course maximale (§ 3.5) est de 90°. On l'obtient en faisant varier la largeur de l'impulsion de 1100 µS à 1900 µS.

Les valeurs données aux § 1.3 et 1.4 indiquent le temps que met le moteur pour parcourir un angle de 60° sans charge.

Pour ce qui est de le "Dead Bend Width" données au § 3.2, il s'agit de l'intervalle de temps mini entre deux commandes successives afin qu'elles soient prises en compte. L'écart de temps max étant 1900 - 1100 = 800 µS, avec un pas mini de 4 µS, cela fait 200 pas possibles, donc en accord avec un PWM sur un octet.

Cordialement.

Pïerre

Merci ChPr,

J'avais cru comprendre ce que tu décris, j'ai naturellement déclaré mon objet servo comme suit :

Servo monMoteur;
monMoteur.attach(2, 1100, 1900);

Mais ca ne bouge que sur 20°...

Il y a vraiment quelque chose qui m'échappe, c'est comment dire à la librairie Servo que c'est 90° entre les deux largeurs d'impulsion ?

Dois-je juste me dire que comme c'est prévu pour une course de 180°, je dois modifier le max pour bien mapper 90° ?

ok, en fait, avec ta confirmation ca m’a fait faire des essais plus certains et ca marche bien mieux maintenant. J’arrive bien à lui faire faire ce que je souhaite sans un comportement qui m’échappe.
Merci ! :slight_smile:

Pour info, la plage de 145° se passe donc entre 750 et 2245. J’ai calculé ces valeurs par déduction en tenant compte qu’avec les valeurs par défaut ca bougeait entre 20 et 165°.
Ensuite pour pouvoir utiliser correctement la plage de 145° il faut mapper les 180° sur les 145° réellement accessibles dans la course totale.

Enfin, je suis conscient que l’utilisation en déhors de la plage spécifiée par le fabriquant peut être néfaste. Mais au moins je comprends bien mieux maintenant !

Encore merci ! :slight_smile:

bon, on dirait bien qu'il y a un bug dans la librairie Servo :
dès que la valeur min de la plage de largeurs d'impulsion donnée lors d'attach() dépasse 1000us, ca fait n'importe quoi...

Si je fais :

monServo.attach (2, 900, 1900);
monServo.write (0);
monServo.readMicroseconds(); // = 900 => OK

Par contre si je fais :

monServo.attach (2, 1100, 1900);
monServo.write (0);
monServo.readMicroseconds(); // = 76 => KO (!?)

Ca explique pourquoi j'ai un comportement erratique si j'utilise la spec du servo telle quelle, mais sinon : Il y a une explication logique à cela ou c'est bien un bug ?!

un petit up maintenant que le projet est fini.
Quelqu'un aurait une explication à cela ?

Merci d'avance,
Z