Go Down

Topic: Débutant qui galère avec 2steps, 2servos, et 4 potentiomètre  (Read 729 times) previous topic - next topic

aligote

Bonjour,

Je m'invite dans votre débat car je me demande si on a pensé à surveiller la tension d'alimentation (5V DC) quand le système "perd les pédales"

C'est à dire : l'alimentation continue est-elle toujours capable de fournir l'intensité sans que la tension s'écroule. (mettre un multimètre aux bornes pour surveiller)

Serge .D

ChPr

... à mon avis votre 28BYJ-48 n'a pas 100 ticks (pas)  par tour... essayez plutôt avec 64 ou 48 ou carrément 2048 ou 4096 mais 100 c'est louche
Les essais que j'ai faits sur ce moteur, avec l'instruction "step(1), montrent que le nombre de pas est "2048" pour un tour de l'axe sortant.

Dans ces conditions, la vitesse max que j'ai pu obtenir sous 5 V est de 20 t/mn (setSpeed(20)) soit un tour en 3 secondes.

Cordialement.

Pierre
Pourquoi faire simple alors qu'il est si facile de faire compliqué !

proautobot

ici :)

Sinon:
Code: [Select]
Stepper moteur1(100, 9, 11, 10, 12);

à mon avis votre 28BYJ-48 n'a pas 100 ticks (pas)  par tour... essayez plutôt avec 64 ou 48 ou carrément 2048 ou 4096 mais 100 c'est louche

vous avez un lien vers ce truc? vous l'avez acheté où?
-Sympa la blague, j'avais déjà les liens en violets. je pensais à un tuto vf , mais ainsi je vais travailler mon anglais. et puis j'ai tout de même trouvé ceci:  https://openclassrooms.com/forum/sujet/arduino-programmation-d-un-moteur-pas-a-pas . c'est pas pour le même type de moteur mais je comprend mieux le sense d' accelstepper.h .

-J'ai trouvé un Tuto http://tiptopboards.free.fr/arduino_forum/viewtopic.php?t=41&43 avec le même moteur utilisant 100...j'ai mal compris son origine alors je l'ai laissé. Erreur de débutant.

-J'ai 48 pas avec un réducteur 1/64 j'ai donc 48*64 , soit 3072 position angulaire. Si j'ordonne à mon moteur 48 pas ( la roue crantée)  , je ne fait donc pas un tour complet mais seulement 48/64 soit 0,75 tour. Et d'ou il viennent les 2048 ? tout est confus

Mais merci, je vous envois mes résultats très prochainement.

Bon week-end.




 

ChPr

... -J'ai 48 pas avec un réducteur 1/64 j'ai donc 48*64 , soit 3072 position angulaire. Si j'ordonne à mon moteur 48 pas ( la roue crantée)  , je ne fait donc pas un tour complet mais seulement 48/64 soit 0,75 tour. Et d'ou il viennent les 2048 ? tout est confus  ...
Comme je vous l'ai dit, ce moteur (28BYJ-48) comporte 2048 pas au niveau de l'axe de sortie. Comme nous n'avons pas accès à l'arbre moteur, il est impossible de dire comment se situe la répartition entre le moteur et le réducteur et de toutes façons, peu importe puisqu'on a seulement accès à l'axe de sortie.

Si vous commandez le moteur en demi-pas, vous en aurez 4096.

Cordialement.

Pierre
Pourquoi faire simple alors qu'il est si facile de faire compliqué !

ZigZag

Bonsoir:

En regardant la doc du moteur, il s'avére que non, il n'a pas 48 pas au niveau du moteur, mais

"Stride Angle 5.625° /64" des pas de 5,625° avant reduction.
Soit 360/5,625=64 pas (electrique si on peut appeler cela ainsi).

Ensuite il y a un "moto-reducteur" qui fait une réduction de la vitesse de 1/64, ce qui veut dire que l'axe primaire fait 64 tours quand l'axe secondaire en fait 1.

Et comme l'axe primaire fait 64 pas, il faut pour faire 1 tour d'axe secondaire 64x64=4096 pas.

Voici un lien INSTRUCTIF ICI

Qui dit, en anglais, desolé:

"But ...

You must take something  in consider :

This Motor has a Gear ratio of 64 , and Stride Angle 5.625°  so this motor has a 4096 Steps ."

ChPr

... This Motor has a Gear ratio of 64 , and Stride Angle 5.625°  so this motor has a 4096 Steps ."
Dans le document que vous citez (que j'avais déjà vu), l'auteur n'est pas allé au terme des tests. Il dit en substance :

Quote
"The reference  said You can put the positive value to turn one direction, negative to turn the other.

If that's  OK With Your stepper Motor , You  don't need to read the following .

If Not , Your Motor turn to same direction even you Put the steps Positive Value or negative , What is the issue ?

This Motor need to operate as the Table on the attachment .

the arduino Stepper Library need to modify to match this requirement .

I wrote a code which is allow to this motor to Move clockwise and counter clock wise "
Je pense qu'il a dû tomber sur ce problème et n'est pas allé plus loin avec la bibliothèque Arduino "stepper"

Or, si on regarde en détails la bibliothèque Arduino "stepper", on s'aperçoit qu'un cycle est divisé en quatre ; à chaque partie du cycle deux bobines sont alimentées.

Si maintenant, on analyse ce que l'auteur propose, on voit qu'un cycle est divisé en huit. Dans ce cycle, c'est une alternance de commandes de deux bobines, puis une bobine, cela quatre fois de suite. C'est ce qu'on appelle du demi-pas, et, effectivement, dans ces conditions, un tour est décomposé en 4096 éléments.

Donc dans sa "datasheet", quand le fabricant dit "Stride Angle 5.625° /64", il considère que "Stride" est un demi-pas.

En conclusion, si on utilise la bibliothèque Arduino "stepper", on décomposera un tour en 2048 pas et si on utilise le code que l'auteur propose, on aura 4096 demi-pas.

NOTA : Il faut remarquer que dans l'utilisation des demi-pas, une fois sur deux, une seule bobine est alimentée, cela a pour conséquence de diminuer la couple disponible.

Cordialement.

Pierre
Pourquoi faire simple alors qu'il est si facile de faire compliqué !

ZigZag

En fait, cela ne m'a pas l'air trés clair.

Je partais du principe que "stride" = "Pas" et non "1/2 pas".

"stride", c'est ce qui est indiqué sur le site du FABRICANT qui lui se fout de quelle bibliothèque on utilise pour commander son moteur.

On peut aussi considérer que ce moteur estt conçut pour fonctionner en 1/2 de pas (5 fils) donc se poser la question de savoir si le fabricant finalement ne veut pas dire des 1/2 PAS au lieu de PAS?

ICI

"Yes. It also helps that I've done the experiment with a fragment of mirror on the motor shaft, a laser pointer, and a bit of tape on the wall, confirming the 4096 and refuting the 4048."

Je crois que l'auteur voulait écrire 2048 au lieu de 4048, et il ne précise pas non plus si c'est des PAS ou 1/2 pas ...

Il faut faire le test, si c'est possible, avec une marque sur l'axe de sortie, et lui demander de faire 2 tours par exemple, pour voir si c'est 2048 PAS ou 4096 PAS.

ChPr

... Il faut faire le test, si c'est possible, avec une marque sur l'axe de sortie, et lui demander de faire 2 tours par exemple, pour voir si c'est 2048 PAS ou 4096 PAS.
Ben c'est déjà fait :

Les essais que j'ai faits sur ce moteur, avec l'instruction "step(1), montrent que le nombre de pas est "2048" pour un tour de l'axe sortant. ...
J'ai refait la manip avec step(2048) ce matin, je confirme ce que j'avais dit.

Cordialement.

Pierre
Pourquoi faire simple alors qu'il est si facile de faire compliqué !

ZigZag


ChPr

Donc notre moteur 28BYJ-48 présente 2048 pas ou 4096 demi-pas, ce qui nous fait une résolution de 360/2048 = 0.175 ° voire 0.088 °.

Je me suis amusé à titiller l'axe de sortie (sans aucun effort) en rotation, j'ai pu constater sur les deux moteurs que je possède ont chacun un jeu en rotation de ... 5° soit environ 30 fois pire que la résolution de 2048 pas.

Par ailleurs, la taille de ces petits engrenages ne doit certainement pas être meilleure que quelques centièmes de millimètre (prenons-en un seul) pour un rayon de petit étage de l'ordre de 2mm, donc chaque étage présente une non-linéarité potentielle de arcTan(0.01/2) =  0.28 °. Au global, on s'éloigne bien de la résolution.

Cela n'est pas étonnant pour  ce genre de composant à trois francs six sous.

On peut toujours trouver un montage (rotation en sens unique) où on arrive à compenser ce jeu. Mais bon, je pense qu'il est illusoire de faire joujou avec les demi-pas. Que cela ne nous empêche pas de jouer avec.

Cordialement.

Pierre
Pourquoi faire simple alors qu'il est si facile de faire compliqué !

ZigZag

De toutes façons, c'est l'axe primaire qui est piloté par un pas à pas avec 64 pas de 5,625°.
La démultiplication est de 64.
Donc si j'ai bien compris:

Résolution au secondaire = (5,625/64)° +/- 5°, à la louche.

ChPr

... Résolution au secondaire = (5,625/64)° +/- 5°, à la louche.
J'ai mesuré un jeu de 5°, mais pas ± 5°. Compte tenu des autres petits problèmes, on va estimer tout cela à ± 3 °.

Pour autant, ne pas confondre résolution et précision (sans rentrer dans les terminologiess en cours et les débats qui tournent autour). Pour faire simple :

 - La résolution est la finesse avec laquelle on découpe l'étendue de mesure ; elle est ici de : 5.625/64 °.

 - La précision est l'incertitude avec laquelle on approche la valeur vraie ; elle est ici de ± 3 °.

Cordialement.

Pierre
Pourquoi faire simple alors qu'il est si facile de faire compliqué !

ZigZag

La résolution du primaire est liée au pas à pas et est de 5.625° par pas.

Ensuite le tout est divisé par 64 à propos duquel vous écrivez concernant la résolution (et non de la précision):

Par ailleurs, la taille de ces petits engrenages ne doit certainement pas être meilleure que quelques centièmes de millimètre (prenons-en un seul) pour un rayon de petit étage de l'ordre de 2mm, donc chaque étage présente une non-linéarité potentielle de arcTan(0.01/2) =  0.28 °. Au global, on s'éloigne bien de la résolution.



Pierre
Enfin, ça c'est si je sais bien lire.

Aprés, on chipotte je crois.



proautobot

Pour les débutant comme moi, pour installer accelstepper ...inutile de chercher dix plombs sur le net. Vous y avez accès depuis l'IDE . Il suffit d'aller dans l'onglet [croquis] -> [inclure une bibliothèque] -> [gérer les bibliothèques] puis vous tapez accelstepper dans le filtre  -> [more information]  puis [installer.]

Je vais enfin pouvoir bidouiller avec =) ...désolé si je suis lent.

Sur ceux, j'ai fait des testes avec stepper.h, si je rentre 2048 dans ''stepper (steps,pin1,pin2,pin3,pin4)'' , mes moteurs ne fonctionne pas et font du bruits avec une vitesse de 280 ils font même des bips sonore. J'ai testé avec 64, puis je leur demande de faire de simple aller retour de 2048 pas, ils font bien un tour complet (à l'oeil , un légé décalage de 5° environs ). Avec 100 au lieu de 64 j'ai moins de décalage.

Et la je me rend compte que je suis resté buté dans ma bétise ...je viens de comprendre que j'ai un moteur 64 pas, peut importe le réducteur. Je pilote un 64 pas. Ensuite je m'intéresse au réducteur pour savoir combien de pas je doit réaliser pour faire un tour. ici (64*64)/2...

A aucun moment vous parlez du "48" mais avec 48, au lieu de 100 ou  64 j'ai un tour complet sans décalage visible à l'œil nue. 


proautobot

Pour continuer, voila mon premier pas avec accelstepper :

Code: [Select]
#include <AccelStepper.h> // bibliothèque pour contrôler en même temps plusieurs moteurs pas à pas.
#include <MultiStepper.h> //vérifier si utile//

AccelStepper mystepper1(8, 9, 11, 10, 12);// A unipolar stepper motor , controlled by 4 transistors...or  ULN2003

AccelStepper mystepper2(8, 5, 7, 6, 8);


void setup() {
  mystepper1.setMaxSpeed(300); //Sets the maximum speed. stepsPerSecond
  mystepper1.setAcceleration(300); // accelération en seconde²
  mystepper1.setSpeed(20); // paramètre de vitesse
  mystepper1.moveTo(2048); //se déplacer vers 2048 = nombre de pas pour un tour.

  mystepper2.setMaxSpeed(300); //Sets the maximum speed. stepsPerSecond
 mystepper2.setAcceleration(300); // accelération en seconde²
  mystepper2.setSpeed(20); // paramètre de vitesse
  mystepper2.moveTo(2048); //se déplacer vers 2048 = nombre de pas pour un tour.


}

void loop() {
  //Change direction when the stepper reaches the target position
  //change de sens quand le moteur à atteint sa position précédente. il fait donc des allés-retours de 360°
  if (mystepper1.distanceToGo() == 0) {
    mystepper1.moveTo(-mystepper1.currentPosition());
  }
  mystepper1.run();

   if (mystepper2.distanceToGo() == 0) {
    mystepper2.moveTo(-mystepper2.currentPosition());
  }
  mystepper2.run();
}


Je pilote bien deux moteurs mais seulement avec une instruction fixe, pour l'instant.
Je n'ai pas tous compris sur le code. j'ai essayé de modifier des paramètres comme la vitesse max.je pensais au début que set speed fixais la vitesse, mais non.
Alors set speed influe sur l'accélération ?
Code: [Select]
  if (mystepper2.distanceToGo() == 0) {} je  traduit ça en:
si la distance parcourue est égale à 0 (en pensant que la distance parcourue ce réinitialise à chaque tour)
alors j'exécute l'instruction entre {} ...J'ai bon ?
Code: [Select]
mystepper2.moveTo(-mystepper2.currentPosition()); currentPosition égale à 2048 alors je bouge de -2048 ...ensuite currentPosition est à -2048 alors je bouge de "--" soit + 2048
Le tout est exécuté seulement avec l'instruction
Code: [Select]
mystepper2.run(); ?





Go Up