moteur pas a pas faire avancer de 1 degré

Hello

Je débute sur Arduino.
J’ai un moteur 14HS17-0504S et un driver DM432C que je pilote avec ce programme:

/*
 * Test fait avec le moteur 14HS17
 * alimentation externe 13V
 * Friver en demi pas 5 sur Off 22,5° correspond a x = 25
 */
//defines pins
const int stepPin = 6;  //PUL -Pulse
const int dirPin = 7; //DIR -Direction

void setup(){
  //Sets the pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);

for (int m=0; m<=15; m++){
  //Enables the motor direction to move
  digitalWrite(dirPin,HIGH);
  //Makes 400 Pulses for making one full cycle rotation
  for(int x = 0; x < 25; x++){
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(2000); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(2000); 
  }
    delay(1000); 
}
}

void loop(){
}

Je souhaite faire juste un tour donc je n’utilise pas la void loop.

Sur le driver je peux changer le nombre de pulse par révolution.
Dans ce cas ci-dessus, j’ai mis 400 pulses et avec x = 25, le moteur avance de 22,5° chaque fois.

Ca fonctionne bien.

Maintenant j’aimerais le faire avancer d’un degré par degré! Sauf que même en prenant le plus grand des pulses (25600) je ne vois pas comment je pourrais arriver à le faire avancer de 1°…

Est ce impossible?

Merci d’avance.

Sur le driver je peux changer le nombre de pulse par révolution

Que voulez vous dire par là ?

Le nombre de pas par révolution dépend du moteur, pas du driver... Le moteur 14HS17-0504S a un Angle de pas de 1.8 degrés. ça veut dire que lorsque vous faites un "step" vous avez tourné de 1.8°. En 200 pas vous faites donc les 360° d'un tour

voulez vous parler de mode micro-step ? ce sera difficile de trouver un mode qui vous donne exactement 1° mais vous pourrez vous en approcher. par exemple en réglant les switch sur 800 micros-pas par tour ça veut dire qu'un microstep correspond à 360°/800 = 0,45° - en en faisant 2 vous serez à 0,9° donc - pas tout à fait 1.
en réglant les switch sur 25000 micros-pas par tour ça veut dire qu'un microstep correspond à 360°/25000 = 0,0144° - en en faisant 69 vous serez à 0,9936 ° ou avec 70 micro pas vous obtenez 1,008° donc - pas tout à fait 1 mais quand même plus proche

sans doute un bon intermédiaire c'est 5000 micros-pas par tour et en faisant 14 micro-pas vous aurez fait 1,008° - vous serez dans la marge d'erreur mécanique sans doute de votre montage

tartarin:
Hello

Je débute sur Arduino.
J’ai un moteur 14HS17-0504S et un driver DM432C que je pilote avec ce programme:

/*
  • Test fait avec le moteur 14HS17
  • alimentation externe 13V
  • Friver en demi pas 5 sur Off 22,5° correspond a x = 25
    */
    //defines pins
    const int stepPin = 6;  //PUL -Pulse
    const int dirPin = 7; //DIR -Direction

void setup(){
 //Sets the pins as Outputs
 pinMode(stepPin,OUTPUT);
 pinMode(dirPin,OUTPUT);

for (int m=0; m<=15; m++){
 //Enables the motor direction to move
 digitalWrite(dirPin,HIGH);
 //Makes 400 Pulses for making one full cycle rotation
 for(int x = 0; x < 25; x++){
   digitalWrite(stepPin,HIGH);
   delayMicroseconds(2000);
   digitalWrite(stepPin,LOW);
   delayMicroseconds(2000);
 }
   delay(1000);
}
}

void loop(){
}



Je souhaite faire juste un tour donc je n'utilise pas la void loop.

Sur le driver je peux changer le nombre de pulse par révolution.
Dans ce cas ci-dessus, j'ai mis 400 pulses et avec x = 25, le moteur avance de 22,5° chaque fois.

Ca fonctionne bien.

Maintenant j'aimerais le faire avancer d'un degré par degré! Sauf que même en prenant le plus grand des pulses (25600) je ne vois pas comment je pourrais arriver à le faire avancer de 1°...

Est ce impossible?

Merci d'avance.

Bonsoir
le moteur a une resolution mecanique d’ 1.8° par pas entier = 360/200
faire un deplacement mecanique d’exactement 1° n’est pas possible meme en utilisant les micropas: les drivers courants
ont generalement des ratio de micropas de 1/2 1/4 1/8 1/16 1/32 1/64 , il n’y a pas de diviseur commun possible

Edit : je n’avais pas vu la reponse de jml +1 avec son approche

Je vois d'abord un problème de choix du driver.
Le moteur 14HS17-0504S a pour caractéristiques qui m'intéresse ici:
Alimentation: 7,5 V
Courant/phase: 0,5 A
Le driver DM432C
Tension d'alimentation de 20 à 40 Vcc
Courant de sortie paramétrable de 1,3 à 3,2 A

Si on alimente en 20V, il y aura 1,3A au minimum dans le moteur. Si on veut ne pas dépasser les 0,5A, il faut alors sous alimenter le DM432C, ce qui n'est pas dans sa gamme d'alimentation.


1° est donc impossible en théorie. Mais quand on utilise les pas entiers, il ne faut pas croire que le moteur va avancer toujours de la même quantité. Il y a des erreurs de positionnement dû aux frottements mécaniques. Si on passe à 128 microspas, certains microspas vont faire avancer le moteurs d'autres non. Le couple développé par un moteur pas à pas est nul si il est dans l'axe du pas, le couple maximum est obtenu pour un pas de différence et on admet que le couple est une fonction sinusoïdale en fonction de l'angle de différence. Si le moteur est parfaitement aligné et que l'on demande d'avancer d'un dixième de pas, le couple est alors de 15% du couple maximal. Si cela ne suffit pas à vaincre les frottements secs, le moteur ne va pas bouger. Il peut alors ne bouger qu'une fois sur 2 ou plus.

Il est donc illusoire de croire que en passant aux micros pas on va augmenter la résolution dans la même proportion. Avec un moteur 90 pas par tour et 4 micros pas, on ne sera jamais exact.

Si ton problème est: je veux avancer 360 fous d'un degré mais avec une précision honnête (on n'est pas en maths pur, on est en mécanique appliquée), on peut par exemple passer en 16 micros pas (j'aime bien 16, parce qu'au delà c'est de l'illusion), on va avoir 20016 = 3200 micropas par tour, soit 8.88.. micropas par degré. Pour faire cette avance, on peut alors approximer en disant pour avancer de N degrés (N est un uint), j'avance de round(N360/3200) (qui est aussi un uint) pas.

On a un moteur numérique (le nombre de pas est fini), on veut une grandeur analogique ( des angles dont le nombre est infini). C'est le même problème pour tous les appareils numériques. Exemple j'ai un son dont la pression est une grandeur analogique, et je la représente par un nombre pour l'enregistrer sur un CD. Il y a une approximation, mais tout le monde s'en contente.

Passer en 25000 micropas, c'est comme avoir des CD en 32 bits.

Merci beaucoup pour vos réponses!
@J-M-L Oui je parlais de changer les micro-step et j’ai comme vous j’ai fait les différents calculs en fonction de chaque mode pour m’apercevoir que je ne tomberai jamais précisément sur 1°… Je découvre les moteurs pas à pas \o/

@Vileroi bien vu! Je sous alimente le driver en 13V effectivement. Je fais des tests pour commencer avec le matériel dont je dispose.

Bonjour,
pour y arriver, il faut passer par une reduction mecanique dans le rapport 5/9.
Avec des poulies gt2, chez Ali, cela va te couter +/- 5€.
Disponible en 20T et 36T, il faut un peu chercher.

Bonne journée

+1 avec Artouste et JMe87
C'est intellectuellement satisfaisant d' exploiter le matériel dans ses derniers retranchements mais ici ce n'est pas la solution technique la plus appropriée.

Plus la démultiplication sera élevée plus le moteur fonctionnera à vide ce qui diminuera drastiquement le risque de sauter un pas qu'il soit entier ou en sous multiples.

Le risque avec un moteur pas à pas auquel on accorde une confiance absolue c'est les sauts de pas non détectés s'il n'y a pas un organe de retour comme un potentiomètre ou un encodeur qui permet de connaître avec certitude la position.

Au bout de quelques heures on peut être hors des clous.

68tjs,
il ya des millions d’imprimantes 3D qui fonctionnent en boucle ouverte pendant des heures a la grande satisfaction des utilisateurs. Si l’alimentation et le driver sont bien dimensionnés il n’y a pas de probleme.

Si l'alimentation et le driver sont bien dimensionnés il n'y a pas de probleme.

et j'ajouterai que le moteur est lui aussi bien dimensionné et démultiplié en interne, ce n'est pas parce qu'on ne voit rien qu'il n'y a pas une démultiplication à l'intérieur.
Dans une imprimante il y a aussi des fin de course optiques, ça peut aider.

Le risque de glissement c'est quand le moteur travaille avec une charge importante, pas quand il travaille à vide.
C'est bien ce que j'ai voulu dire : la démultiplication permet plus de souplesse dans l'utilisation du moteur et permet d'augmenter le couple utile, ou selon comment on voit la chose faire travailler le moteur à vide.

Je ne connais pas de moteur pas-a-pas demultiplie en interne.
Si tu as des references, je suis preneur.
Dans une imprimante 3D, les fins de course servent uniquement au lancement de l’impression.
Si ils sont actionnés en cours d’impression, les choses se passent mal :wink:
La demultiplication que je propose c’est pour avoir un pas entier par degré.
Le but n’est pas ici d’augmenter le couple.

Pour y arriver, il faut passer par une réduction mécanique dans le rapport 5/9.

Faut pas y penser. Sur un point de vue mathématique, c'est la seule bonne solution. Mais le moteur est dans la vie réelle et il fait une erreur qui est largement supérieur à 1/16 pas. Si on démultiplie, on introduit un jeu supplémentaire qui diminue la précision. La démultiplication est intéressante pour diminuer la puissance du moteur.

Le risque avec un moteur pas à pas auquel on accorde une confiance absolue c'est les sauts de pas non détectés s'il n'y a pas un organe de retour comme un potentiomètre ou un encodeur qui permet de connaître avec certitude la position.

Si c'est pour mettre un encodeur ou de façon générale un asservissement, je trouve stupide de mettre un pas à pas. C'est un moteur qui a un rendement faible quand il tourne et qui consomme beaucoup à l'arrêt. Autant mettre un CC ordinaire ou un brushless. L'intérêt du pas à pas c'est qu'il peut se passer de boucle de retour.
J'ai des copains qui utilisent des pas à pas sans démultiplication pour percer des bandes de carton de plus de 10m avec par exemple 14000 trous à faire et donc au moins 14000 mouvements. Il n'y a pas d'asservissement, et cela fonctionne très bien.

Si on perd des pas c'est forcément par paquets de 4 pas, et cela se voit immédiatement si on perce du carton. J'ai fait des essais à vide en allant jusqu'à 1800tr/m, je n'ai jamais constaté une seule perte. D'ailleurs quand j'en constate parce que je dépasse cette vitesse, c'est plusieurs paquets de 4 pas que je perds.

Si il y a perte de pas c'est que l'on a pris un moteur trop petit.

Le risque de glissement c'est quand le moteur travaille avec une charge importante, pas quand il travaille à vide.

A vide il y a des glissements, mais ils sont à plus haute vitesse. C'est pour cela qu'on ne peut pas tourner plus vite.

ce n'est pas parce qu'on ne voit rien qu'il n'y a pas une démultiplication à l'intérieur.

Si il y démultiplication, on le sait de suite. Un moteur a aimants permanents ne peut guère avoir plus de 60 pas par tour. Si vous en avez un qui fait 1024 pas par tour, c'est qu'il y a une démultiplication dedans. Et un hybride fait en principe 200 à 1000 pas par tour.

Je ne connais pas de moteur pas-a-pas demultiplie en interne

Le 28BYJ-48 est un moteur que l'on voit souvent. Il est démultiplié.
Les hybrides démultipliés existent, mais je ne pense pas pour le grand public

J’ai dit 5/9 qui est une simplification de la fraction 200/360.

Je ne connais pas de moteur pas-a-pas demultiplie en interne.
Si tu as des references, je suis preneur.

Que penser des moteurs dont l'axe de sortie est déporté vers la périphérie ?

Jouet.

Faux, j’ai déjà vu le moteur cité par Bernard dans un projecteur de recherche de bateau. A plus de 10k€, c’est pas un jouet, je te l’assure.

Le sujet pique ma curiosité: pourquoi vouloir faire 1º précisément?

68tjs:
Que penser des moteurs dont l'axe de sortie est déporté vers la périphérie ?

ce sont des pap unipolaires 48 pas faciles à passer en bipolaire
qui entraine un train d'engrenage pou la reduction
c'est facile à ouvrir , mais ça reste de la "petite" mécanique , pratique pour faire des petites animations , attention aux jeux tres important.
je posterais une photo demain

en attendant la photo

ce sont des pap unipolaires 48 pas

La vidéo indique 32 pas. Et c'est bien le cas, il y a 8 dents sur chaque galette, 4 galettes soit 32 pôles en tout.

vileroi:
La vidéo indique 32 pas. Et c’est bien le cas, il y a 8 dents sur chaque galette, 4 galettes soit 32 pôles en tout.

ok , pas de soucis c’est le suffixe 48 qui m’a “embourbé” :smiling_imp:

JMe87:
Jouet.

J'ai pris la première photo trouvée sur le web, j'ai trouvé qu'elle était suffisamment parlante.
Déjà le pas de base pour le Néma est ( c'est ce qui a été écrit par @J-M-L) :

Le nombre de pas par révolution dépend du moteur, pas du driver... Le moteur 14HS17-0504S a un Angle de pas de 1.8 degrés.

Imaginez le nombre d'enroulements qu'il faudrait pour faire 1,8° en pas entier !

C'est certain que ce moteur a déjà une démultiplication interne et que le couple annoncé tient compte de cette démultiplication.

68tjs,
desole de te contredire mais tu es en plein delire.

Les moteurs p-a-p 200 steps/tour ou 1,8° comme ceux utilises, entre autres, dans les imprimantes 3D sont a sortie directe sur "l'induit" si on peux dire. Il n'y a pas la moindre trace d'une reduction quelconque.

Une petite video pour les explications complementaires : How does a Stepper Motor work ?