Moteur pas à pas

Bonjour,

Je débute et je manipule pour la première fois à un moteur pas à pas ( un 28BYJ-48 ). Cela m'amène à me pencher sur son fonctionnement.

Il s'agit d'un moteur unipolaire, avec 6464=4096 pas par tours ( ou selon d'autres sources 3264=2048 ). Mais je ne comprends qu'un seul de ces 2 termes.

Si j'ai bien compris, l'un des 64 correspond à la démultiplication mécanique ( engrenage/roues dentées ), mais à quoi correspond l'autre 64 ( ou 32 ) ? Je pensais comprendre qu'avec 4 bobines à 90°, le rotor ne pouvait prendre que 4 positions ( en face de chaque bobine) ou à la rigueur 8 ( en alimentant 2 bobines adjacentes, on doit pouvoir positionner le rotor en 4 positions intermédiaires, non ? ). Alors pour moi ce serait 4 ou à la rigueur 8, mais pas 64 ou 32.

Pouvez-vous m'expliquer le point que je n'ai pas compris ?

Merci par avance

PS1 : pour comprendre, je me suis basé sur : A petits pas, le moteur pas-à-pas • Le blog d'Eskimon
PS2 : si vous pouviez me dire si c'est 32 ou 64, ça m'arrangerait aussi

une bonne vidéo à regarder pour voir les 32 "dents" métalliques qui font la base du déplacement du rotor et les engrenages de la boîte de vitesse qui font la démultiplication

ensuite le nombre dépend du moteur...

J-M-L:
pour voir les 32 "dents" métalliques

J'ai en effet vu des photos d'autres moteurs pas à pas où en effet il y a bien un rotor central à dents qui ressemble à une roue dentée. Mais pas de "32 dents" dans cette vidéo ou dans ce moteur pas à pas ( ou alors je n'ai vraiment pas compris ) ( dans le 28BYJ-48, ça semble être un tout autre système dont j'avoue je n'ai pas compris grand chose - on ne voit pas comment est fait le rotor central et les bobines ne sont pas du tout positionnées comme je m'y attendais )

Bien que je sois loin d'avoir compris ( encore plus pour le 28BYJ-48 ), j'ai un peu de mal à comprendre comment cela pourrait/peut fonctionner avec ces 32 dents, qui est un multiple de 4 ( quand une dent est en face d'une des 4 bobines, en face des 3 autres bobines, il y a aussi pile poil une dent, bien en face ). 33 dents je comprendrais, mais pas 32 ( en fait pas un multiple de 4 ).
Et d'après mes calculs cela me donnerait un rapport de 1/128 ( 1/132 pour 33 dents ), pas de 1/32 comme le dit la doc de mon moteur, qui correspondrait plutôt à 8 dents ( ou un équivalent )( ce qui ne m'arrange pas car c'est toujours un multiple de 4 donc je ne comprends toujours pas comment le mouvement peut se faire )

Si vous pouvez m'aider ( un site qui expliquerait tout ça ? ), c'est avec plaisir.


Suite à mes recherches et essais, il y a quelques autres questions que je me pose :

  1. J'ai cru comprendre qu'on pouvait doubler le nombre de pas quand avec 4 bobines A,B,C,D, on alimentait dans l'ordre les bobines A,A+B,B,B+C,C,C+D,D,D+A ,.... est-il possible de le faire avec mon 28BYJ-48 ? ( j'ai essayé en indiquant un nombre de pas doublé et le moteur ne tourne pas ). Ou cela vient-il de Stepper.h qui ne "fonctionne" pas comme cela ? il faudrait alors une autre bibliothèque ? laquelle ? ou que ce procédé fonctionne avec les moteurs bipolaire mais pas unipolaire ? ( faudra que je revoie ça )( j'ai trouvé une spécification de mon moteur qui indique quand même un mode full step et un mode half step donc ça doit être possible, non ? )

  2. Pour mes premiers essais, j'ai alimenté mon 28BYJ-48 en 5V par mon Arduino Uno ? ( aucune charge sur mon moteur ). Ce que certains déconseillent mais ça fonctionne. Avez-vous une idée de la valeur du courant consommé ainsi à vide par mon 28BYJ-48 ? est-ce quand même compatible avec mon arduino Uno pour des essais à vide ?

  3. en fonctionnement continu, à vide, mon moteur est relativement chaud ( mais pas brulant). Est-ce normal ?

  4. J'ai indiqué comme vitesse à mon moteur 10 tours par minutes : ça fonctionne. Si j'indique 20 tours par minute, il ne veut même pas tourner. Pourquoi ? Comment savoir de quoi est capable mon moteur ( je n'ai rien trouvé dans les spécifications ) à part en faisant des essais ?

Merci à tous ceux qui ont eu le courage de lire ce message relativement dense, et encore plus à ceux qui voudront bien m'aider en me répondant.

PM

Nouvel essai d'explication du fonctionnement avec petit dessin:

Le Rotor est constitué de 8 paires de pôles opposés (Nord Sud) côte à côte soit 16 pôles

On a 4 plaques métalliques de 8 dents. Vous avez 8 dents sur la plaque du dessus, 2x8 dents au milieu et 8 dents en bas. ça fait bien 32 dents.

Avec 8 dents sur un cercle, on a 360° / 8 = 45° par dent, chaque dent recouvre 22°5, avec un espace de 22°5 entre entre deux dents

chaque bobine est donc enserrée par 16 dents.

Vous remarquez aussi que les pointes ne sont jamais alignées entre celles de la bobine du haut et celles de la bobine du bas, les 8 dents d’un élément métallique sont décalées d’une demi-dent par rapport aux 8 dents de l’autre bobine.

Les bobines sont de type unipolaire, on a en fait deux demi bobinages, elles ont un point central (le fil rouge) en commun et on pilote le sens du courant dans les demis bobines par les 4 autres fils.

En commandant les demi bobines par les 4 fils (HIGH,LOW, LOW, LOW) (LOW, HIGH, LOW, LOW) (LOW, LOW, HIGH, LOW) (LOW, LOW, LOW,HIGH) on obtient alternativement des pôles Nord ou Sud ou Sud Nord, soit sur la bobine d'en haut, soit celle d'en bas.

On peut aussi alimenter (LOW, LOW, HIGH, HIGH), (HIGH, LOW, HIGH, LOW), (HIGH, HIGH, LOW, LOW) et ( LOW, HIGH, LOW, HIGH) et on renforcerait le magnétisme et donc augmenterait le couple (tout en consommant donc plus de courant)

Les 8 pôles magnétiques générés attirent les 8 poles inverses du rotor les plus proches des dents de cette bobine.

On pourra donc ainsi faire 32 pas pour un tour.

Ensuite le Train d’engrenages amène une Réduction de 64 donc on a bien 32 x 64 = 2048.

Pour votre autre question, avec le fil rouge en commun cependant je ne pense pas qu'on puisse faire des demi pas. En démontant le moteur et en supprimant le fil rouge et la jonction centrale pour bien séparer les bobines, on peut se fabriquer un moteur bipolaire dont les bobines seraient alors Jaune-Bleu et Orange-Rose.

Ensuite on trouve tellement de variantes de ce moteur que je suis sûr qu'il y en a qui sont un peu différents au niveau des engrenages, des bobines etc... Ils sont plus fait pour avoir un couple confortable que faire une course de vitesse

Il y a deux types de moteurs pas à pas actuellement, les moteurs hybrides et les moteurs à aimant permanents.

rotor central à dents qui ressemble à une roue dentée

c'est la caractéristique des moteurs hybrides, ce n'est pas le cas du vôtre.

un site qui expliquerait tout ça ?

Pour le principe, les sites (par exemple)donnent le moteur à aimant permanent à 4 pôles, et on a 4 pas. Le votre à 32 pôles, et donc 32 pas. Mais ce qu'il y a de mieux pour avoir un vrai moteur et pas un 4 pôles qui n’existe pas c'est ce qu'il y a au dessus!

J'ai cru comprendre qu'on pouvait doubler le nombre de pas quand avec 4 bobines A,B,C,D, on alimentait dans l'ordre les bobines A,A+B,B,B+C,C,C+D,D,D+A ,.... est-il possible de le faire avec mon 28BYJ-48 ?

C'est possible et je l'ai testé. Il y a juste un bémol. Normalement votre moteur est alimenté une phase à la fois en 5V. Cela veut dire qu'il va absorber une certaine puissance et produire un certain champ magnétique. Si on alimente deux bobines à la fois (les demis pas), il faut pour avoir le même champ et surtout la même puissance dissipée diminuer la tension d'un facteur racine de 2. On aura alors:
pas 1: bobine A 5V
pas 1,5: bobine A et bobine B alimentées en 3,5V
pas 1: bobine B 5V
pas 1,5: bobine B et bobine -A alimentées en 3,5V ...
Il y a un problème pour les tensions variables.

J'ai fait des essais, et on retrouve bien le couple constant et la puissance dissipée est nominale tout le temps.

Rien n'empêche de faire des 1/4 de pas ou moins, comme on le fait avec des moteurs hybrides, mais il faut le bon driver, et je ne sais pas si cela existe. Cela existe pour les moteurs bipolaires (pas de point commun).

est-ce quand même compatible avec mon arduino Uno pour des essais à vide ?

la documentation conseille de ne pas avoir plus de 20mA par sortie. Mettre un tel moteur revient à court-circuiter la sortie. Il y a danger pour l'Arduino en pilotage direct.

en fonctionnement continu, à vide, mon moteur est relativement chaud ( mais pas brulant). Est-ce normal ?

Qu'il soit à vide ou en pleine charge ne change pas grand chose. Il va chauffer, c'est normal. Mais je ne sais pas si on peut mettre du 5V permanent sur un de ses enroulements. Pour un NEMA17, la tension d'alimentation est donnée à 24V ou 36V, (dans la doc) mais aux bornes du moteur on ne doit avoir que 3V environ. On a 24V à la mise en route d'un enroulement, puis 3V après en permanence.

hello
je m'étais fais ce petit prg

const byte moteur_Gauche_pin_1 = 8;
const byte moteur_Gauche_pin_2 = 9;
const byte moteur_Gauche_pin_3 = 10;
const byte moteur_Gauche_pin_4 = 11;

void setup() {
 
 Serial.begin(1000000);
 for(byte f=8;f<12;f++){pinMode(f,OUTPUT);}
}
void loop() {
  // sens, nb_pas,vitesse
 dep('A',4096,1000,1);    //si 1 alors 1/2 pas
 dep('R',2048,1000,2);    //si 2 alors pas entiers
 
 
 //while(1);
}
void dep(char sens,long nb_pas, long vitesse, byte rapport)
{ 
  int  garde = 5000;//temps d'impulsion minimum
  long pas   = 1;
  long tempo = vitesse + garde;
  byte inc   = 2;
  long duree_accel = 0;
  bool accel = true;
  bool decel = false;
  for (long f = 0; f < nb_pas; f++)
  {
    if(sens=='A'){pas++;}  //dans le tableau d'avance, 
    else{pas--;}           //on comptera de 1 en 1
    if (pas > 8){pas = 1;}
    if (pas <1){pas = 8;}
if(rapport==2){            //ou de 2 en 2 ( 1 au dessus + 1 ici)
  if(sens=='A'){pas++;}
    else{pas--;}
    if (pas > 7){pas = 1;}
    if (pas <1){pas = 7;}
  
  }
    Serial.println(pas);
    if ( accel)
    {
      if (tempo >= vitesse)
      {
        tempo -= inc; duree_accel = f;
      }
      else 
      {
        accel = false;
        decel = true;
      }
    }
    if (decel) 
    {
      if ( f > (nb_pas - (garde / inc)))
      {
        tempo += inc;
      }
    }
    un_pas_de_plus( pas);
    delayMicroseconds(tempo);
  }
}

void un_pas_de_plus(long pas_en_cours)
{
  switch (pas_en_cours) {
    case 1:
      digitalWrite(moteur_Gauche_pin_1, LOW);
      digitalWrite(moteur_Gauche_pin_2, HIGH);
      digitalWrite(moteur_Gauche_pin_3, LOW);
      digitalWrite(moteur_Gauche_pin_4, LOW);
      break;
    case 2:
      digitalWrite(moteur_Gauche_pin_1, LOW);
      digitalWrite(moteur_Gauche_pin_2, HIGH);
      digitalWrite(moteur_Gauche_pin_3, HIGH);
      digitalWrite(moteur_Gauche_pin_4, LOW);
      break;
    case 3:
      digitalWrite(moteur_Gauche_pin_1, LOW);
      digitalWrite(moteur_Gauche_pin_2, LOW);
      digitalWrite(moteur_Gauche_pin_3, HIGH);
      digitalWrite(moteur_Gauche_pin_4, LOW);
      break;

    case 4:
      digitalWrite(moteur_Gauche_pin_1, LOW);
      digitalWrite(moteur_Gauche_pin_2, LOW);
      digitalWrite(moteur_Gauche_pin_3, HIGH);
      digitalWrite(moteur_Gauche_pin_4, HIGH);
      break;
    case 5:
      digitalWrite(moteur_Gauche_pin_1, LOW);
      digitalWrite(moteur_Gauche_pin_2, LOW);
      digitalWrite(moteur_Gauche_pin_3, LOW);
      digitalWrite(moteur_Gauche_pin_4, HIGH);
      break;
    case 6:
      digitalWrite(moteur_Gauche_pin_1, HIGH);
      digitalWrite(moteur_Gauche_pin_2, LOW);
      digitalWrite(moteur_Gauche_pin_3, LOW);
      digitalWrite(moteur_Gauche_pin_4, HIGH);
      break;
    case 7:
      digitalWrite(moteur_Gauche_pin_1, HIGH);
      digitalWrite(moteur_Gauche_pin_2, LOW);
      digitalWrite(moteur_Gauche_pin_3, LOW);
      digitalWrite(moteur_Gauche_pin_4, LOW);
      break;
    case 8:
      digitalWrite(moteur_Gauche_pin_1, HIGH);
      digitalWrite(moteur_Gauche_pin_2, HIGH);
      digitalWrite(moteur_Gauche_pin_3, LOW);
      digitalWrite(moteur_Gauche_pin_4, LOW);
      break;  
  }
}

Merci J-M-L ! ( rédigé avant d'avoir vu la réponse suivante de vileroi )

Vos schémas m'ont permis de comprendre une grande partie de ce que je n'avais pas assimilé dans la vidéo.

Me resterait aussi à assimiler encore comment le champ magnétique "vertical" crée/induit par l'une des 4 bobines ( perpendiculaire au plan de la bobine ) "devient" par l'intermédiaire des dents un champ magnétique radial dans le plan de la bobine, en plus à l'intérieur même de la bobine ( enfin je crois ). Et sans doute intense en face des dents et pas entre 2 dents. Mais mes connaissances en magnétisme ne sont pas suffisantes ( j'en déduis que ça se passe comme ça ( ? ), mais pour l'expliquer c'est une autre paire de manches ! )( J'espère ne pas avoir raconté trop de bêtises ! )
( Si vos 3 photos sont tirées d'un site internet, pouvez m'en indiquer le lien ? )


Comme vous l'aviez je pense compris, dans mon message précédent, je parlais d'un type de rotor central denté comme ce que j'avais vu dans l'animation suivante ( et sur des photos ) :

Difficile de compter les dents sur les images des sites mais sur l'animation il y en a 25 ( pas un hasard je pense ). Le raisonnement du début de mon message précédent est-il exact ? ( ne tourne pas si - avec 4 bobines - il y a un nombre de dents multiple de 4 )( c'est pour voir si j'ai à peu près compris ou pas )

Bon encore Merci à vous ! ( et à tous ceux qui me répondent - voir questions 1 à 4 de mon message précédent )

Merci Vileroi ( pas bien compris pourquoi un court circuit mais OK pour le reste ) et dfgh ( je vais de ce pas ( de moteur ) me pencher sur votre programme ).

( Si vos 3 photos sont tirées d'un site internet, pouvez m'en indiquer le lien ? )

j'ai fait les dessins rien que pour vous :slight_smile: mais j'ai utilisé des images en lignes pour l'intérieur du moteur. (juste un google sur les images de ce type de moteur)

Me resterait aussi à assimiler encore comment le champ magnétique "vertical" crée/induit par l'une des 4 bobines ( perpendiculaire au plan de la bobine ) "devient" par l'intermédiaire des dents un champ magnétique radial dans le plan de la bobine, en plus à l'intérieur même de la bobine ( enfin je crois ). Et sans doute intense en face des dents et pas entre 2 dents

Mon interprétation du phénomène:

Les "dents" sont en fer doux, matériau qui s'aimante facilement et perd rapidement sa capacité d'aimantation une fois qu'il n'est plus soumis à un champ magnétique.

Sur une bobine on a 16 dents, 8 en haut, 8 en bas. Quand une demi bobine est parcourue par un courant, les dents deviennent un aimant, celle d'en haut prennent donc le rôle d'un pôle et celles d'en bas celle du pôle opposé en fonction du sens de circulation du courant.

Ces 16 dents sont à un instant en face de 16 pôles verticaux du rotor.

Si les pôles verticaux du rotor ne sont pas en opposition avec les dents qui leur font strictement face à ce moment là, on a une instabilité dont la nature à horreur.

Vous vous souvenez peut-être de la règle de la main droite, ou règle des 3 doigts ou règle champ-chemin-courant - si vous avez le courant qui passe le long du majeur, le champ magnétique est dans l'axe du pouce et la force induite sur l'index
3doigts.png

Ça force les 8 dipôles du rotor à aller s'aligner sur les 8 dipôles opposés (le Nord en face du Sud)

En alternant dents du haut, dents du bas, et sens du courant dans les demis bobines, on oblige le rotor à se décaler en permanence, créant ainsi le mouvement

3doigts.png

La photo du post 6 correspond à un moteur à réluctance variable. Je crois que c'est un type de moteur quasiment plus fabriqué (pas de couple de maintien notamment). Mais c'est assez proche du moteur hybride, pas du tout du type du votre.

Le moteur à une résistance de 50ohm (doc de la page d’où vient le dessin) sous 5V cela doit faire 100mA. cela fait un courant beaucoup trop grand pour l'Arduino. Je pensais que la bobine avait une résistance plus faible. C'est pour cela que je parlais de court-circuit. Ce terme est mal choisi. Mais avec une telle bobine un Arduino peut voir sa sortie qui devrait être à 5V s'écrouler à 2,5V.

Normalement si c'est bien 50ohms par enroulement, la puissance dissipée devrait être de 1/2W cela ne devrait pas chauffer. Que donne la mesure de la résistance?

Pour la vitesse maximale, comment est alimenté le moteur? Plus la tension est élevée plus il peut tourner vite. Si il est directement sur les sorties de l'Arduino, il est sous alimenté et la vitesse est réduite.

@ J-M-L : Encore Merci. C'est bien ce que j'avais compris. C'est le "les dents deviennent un aimant" et surtout comment la forme des dents change la direction du champ ( à 90° ) ( ou "transforme les dents en aimants" ) que j'essayais de comprendre ( et ça reste quand même un peu mystérieux )

@ vileroi :

  • J'ai mesuré 21 ohm par bobine ( pas 50 ( ? ) ). Et mon programme, qui utilise stepper.h, alimente constamment 2 bobines à la fois ( cycle AB - BC - CD - DA ). Ce qui ferait une consommation d'environ 500mA ( en imaginant que la seule consommation soit la partie résistive des bobines, ce qui me parait très peu crédible, surtout pour un moteur ( ! ), et même utilisé à vide). Ça semble donc vraiment beaucoup, mais pour l'instant, je n'ai rien fait griller. Mais j'ai bien compris que ça semble vraiment limite et je ne vais pas insister. Je me contenterai maintenant de faire seulement des essais sur un tour ou deux.
  • Pour la vitesse, j'ai en effet constaté qu'en alimentant mon moteur par une pile 9V, il acceptait une vitesse plus grande ( très momentanément, sans doute que ma pile n'est pas capable de délivrer une intensité si grande plus que quelques secondes )

Merci à tous

C'est le "les dents deviennent un aimant" et surtout comment la forme des dents change la direction du champ ( à 90° ) ( ou "transforme les dents en aimants" ) que j'essayais de comprendre ( et ça reste quand même un peu mystérieux )

Dans le coeur d'une bobine vous créez un champ magnétique Nord - Sud qui est orthogonal au plan de la bobine (les lignes de force du champ) et dont le sens dépend du sens du courant.


(source)

Une vidéo pour visualiser cela

Un noyau qui est au centre de la bobine - là où les lignes de forces sont parallèles (en gros) va servir à canaliser le champ magnétique et se polariser dans le sens du champ avec un pôle nord et un pôle sud donc.

Le fer doux a des propriétés intéressantes pour cela. Ce noyau peut avoir plusieurs forme, on voit souvent un cylindre mais le cœur magnétique peut aussi avoir la forme d'un anneau - on parle de noyau "torroïde" dans ce cas et ce sont ces fameuses dents qui vont jouer ce rôle

L'aimant ainsi formé correspond aux aimants du rotor qui viennent donc s'aligner en opposition de pôle (8 dents sud en face des 8 pôles nord du rotor, et 8 dents nord en face des 8 pôles sud du rotor)

Pour plus de détail il faut relire un traité d'electro-magnétisme :slight_smile: ou wikipedia pour commencer

quelques liens:

Fer doux
Champ magnétique
electromagnétisme
Bobine
Électroaimant