Comment diviser les pas d'un moteur pas à pas

Bonjour astronomy

Une fois le moteur transformé, comme tu as un driver, le DRV8825, qui gère les micros-pas, tu mets les signaux M0, M1 et M2 à +5V, ainsi ton moteur a 32 fois plus de "pas", c'est à dire, pour un tour de l'axe à la sortie du réducteur (32 pas/tour (11.25°) et un réducteur de 64:1= 2048 (63.68395:1 2038 pas/tour réel) tu auras 2038*32 pas = 65216 "pas", à toi d'inclure cette valeur dans ton programme, tu fais comme si ton MPAP avait 65216 pas/tour.

Cordialement
jpbbricole

Peut-être Vileroi a t-il vu un schéma d'utilisation d'un driver pour moteur bipolaire en micro-pas où les points milieux des bobines restent reliés. Il serait intéressant qu'il nous donne la référence de cette data-sheet ou notice d'utilisation constructeur. Personnellement je n'ai jamais vu ça, et cela ne me surprend guère. Si on regarde la datasheet du A4988 qu'il a cité, on voit que, classiquement, il y a deux résistances de mesure de courant sur le 0V. Sans point milieu reliant les deux bobines, ces résistances mesurent exactement le courant dans chaque pont en H. Si on met en court-circuit les points milieux, les mesures de courant dans ces deux résistances non seulement sont faussées par un éventuel courant dans la liaison entre les deux points milieux, mais de plus un pont en H qui commute peut parasiter l'autre, ce qui peut produire des accrochages sur certaines fréquences entre les deux asservissements de courant des deux ponts / bobines. Donc je confirme ce que j'ai écrit, à la nuance près que j'ai écrit "on ne peut pas utiliser un driver prévu pour des moteurs bipolaires en micro-pas" et j'aurais du écrire "on ne doit pas". Certes on peut le faire... on peut aussi brancher sur du 400V une ampoule sur laquelle le fabricant a écrit qu'elle est prévue pour 230V...

Ok
par contre, je n'ai pas encore compris comment alimenter le driver puisque le driver doit être alimenté en 12v ou il peut aussi être alimenter en 5v ???
En attendant merci
cdt

Bonjour astronomy

Le DRV8825 s'alimente entièrement depuis Vmot (8.2-45V) contrairement au A4988 qui a une entrée VDD 3-5.5V.
Il faut, bien sûre un GND commune avec l'Arduino. La tension Vmot est indépendante de la tension du MPAP, 5V. dans ton cas puisque ces drivers règlent le courant dans les bobinages.

Cordialement
jpbbricole

1 Like

Bonsoir astronomy

J'ai fait l'essai de la transformation et des micros-pas (avec un A4988) et ai adapté, un peu, ton programme:

const int mpapDrvSteps = 4; const int mpapDrvDir = 5; AccelStepper stepper1(1, mpapDrvSteps, mpapDrvDir); // https://www.pjrc.com/teensy/td_libs_AccelStepper.html

Ca fonctionne super, attention à régler le courant du driver pour éviter la surchauffe du MPAP

Le câblage:
Driver drv8825 > MPAP
B2 > Bleu
B1 > Jaune
A1 > Orange
A2 > Rose

Cordialement
jpbbricole

1 Like

Attention pour que l'on puisse avoir les micros pas, il faut absolument que le courant soit correctement réglé à la bonne valeur.
Supposons que l'on alimente une seule bobine (5V, 50ohms soit 100mA) le driver en 5V et que le courant soit réglé à 1A, le courant ne sera jamais atteint et le driver mettra en permanence toute la sauce, vu que le courant ne sera pas atteint:


Le tableau ci-dessus est celui du DRV8825. Pour un réglage du courant à 1A, le DRV8825 va limiter le courant à 1A . "winding current". La limitation n'interviendra que pour les angles 0° et 3°. Pour les autres micros pas le courant sera de 100mA. Si on passe en 16 micros pas ou moins, pour le premier pas, seule la bobine A est alimentée, pour tous les autres pas les deux bobines sont alimentées au max. Ce n'est pas régulier, c'est même pire qu'en mode demi pas.

C'est pour cela qu'il faut alors absolument pour profiter des micros pas que le courant soit réglé correctement, à savoir 100mA si on utilise le 28BYJ 48 avec un seul enroulement, et 70mA si on en utilise deux en série (je conseille un seul enroulement).

Si tel est le cas, il y a régulation en courant, et la tension n'a plus d'importance. Ou plutôt plus la tension d'alimentation est élevée, meilleure sera les performances à hautes vitesses. Mais pour faire 0,096 pas toutes les 12s, cela n'a pas d'intérêt.

Non. Pour un moteur bipolaire, on peut mettre le courant maximal dans la bobine d'une phase en continu. Pour un moteur unipolaire, il y a deux enroulements par phase, mais il est conçu pour n'alimenter qu'une seule des deux bobines à la fois. Pour avoir le même champ magnétique (même couple) l'enroulement est deux fois plus gros, et la taille du moteur est donc plus augmentée. Autre façon d'exprimer les choses c'est de voir est que je peux utiliser un seul des deux enroulement, et l'autre ne sert jamais à rien, mais il est là et prend de la place.
2 moteurs de même couple -> l'unipolaire est plus gros
2 moteurs de même taille -> l'unipolaire à moins de couple
Exemple
Nema 17HS13-1334D 42x42x33mm 22Ncm 1.33A 2.8V Bipolaire 4 Fils
Nema 17HS13-0316S 42x42x33mm 16Ncm 0.31A 12V Unipolaire 6 Fils
Même taille, mais l'unipolaire a moins de couple.

La saturation magnétique n'est pas tout ou rien, la courbe excitation champ est une droite au début qui s'incurve. J'ai fait les mesures sur un seul moteur (le mien), et la saturation commence un peu avant le nominal. Rien ne sert alors de doubler l’excitation, on y gagne peu. Mai le problème est surtout un problème d'échauffement. Au nominal (une seule bobine alimentée sur les deux), la carcasse du moteur peut s'échauffer de 60° (110° dedans). Si on alimente deux bobines, on détruit le moteur.
Quand on ne connait pas le courant ou la tension d'un moteur, on peut soit tracer la courbe couple=f(courant) soit mesurer la température au bout de 10mn en fonction du courant et de ne pas dépasser les 60° sur le boitier.

[blague]Si an alimentant deux phases au lieu d'une, il y a bien transformation, et on perd le moteur![/blague]
Si on a un moteur unipolaire 1A, et que l'on le passe en bipolaire, il faut si on utilise un seul enroulement mettre 1A, et si on utilise deux enroulements en série mettre 0,7A (un peu plus de saturation, le NI est multiplié par √2, le couple sera peut être de 1,2?).

1 Like

Et le rapport 0,7 (en théorie racine(2)/2=0.707) d'avoir la même dissipation par effet Joule, et donc le même échauffement du moteur.

Bonsoir

Le driver s'occupe très bien de tout ça, j'ai fait l'essai, sans problème.

Cordialement
jpbbricole

Je ferais aussi l'essai quand j'en aurais le temps. Mais merci pour avoir donné ce résultat positif.

bonsoir
tu peux me mettre ton code que tu as modifié STP :grinning:
car chez moi il ne tourne pas en permanence
MERCI
cdt

Bonsoir astronomy

Voilà la version complète. Sans bouton pressé, le moteur tourne CW au ralenti (.setSpeed(50)), pendant que le bouton1 est pressé, le MPAP tourne CW à grande vitesse (.setSpeed(600)), pendant que le bouton2 est pressé, le MPAP tourne CCW à vitesse moyenne (.setSpeed(-400)). A ce stade les valeurs sont sans micros-pas, je te laisse jouer avec ça mais reste à ta disposition pour toute aide désirée.
Attention à régler le courant du driver, afin d'éviter la surchauffe.

#include <AccelStepper.h>
const int mpapDrvSteps = 4;
const int mpapDrvDir = 5;

AccelStepper stepper1(1, mpapDrvSteps, mpapDrvDir);  // https://www.pjrc.com/teensy/td_libs_AccelStepper.html

const int bouton1 = 2; //marche avant CW
const int bouton2 = 3; //marche arrière CCW

void setup() {

	pinMode (bouton1, INPUT_PULLUP);
	pinMode (bouton2, INPUT_PULLUP);

	stepper1.setMaxSpeed(1000);
}
void loop() {

	if (digitalRead(bouton1) == LOW) {
		stepper1.setSpeed(600);
	}
	else  if (digitalRead(bouton2) == LOW) {
		stepper1.setSpeed(-400);
	}
	else {
		stepper1.setSpeed(50);
	}
	stepper1.runSpeed();
}

A+
Cordialement
jpbbricole

1 Like

Juste encore une question :grinning: @jpbbricole
c'est le nombre de pas par minute ou par seconde dans ton code
merci
cdt

Bonjour astronomy

C'est des pas seconde, tout est là.

Cordialement
jpbbricole

1 Like

Ça fonctionne toujours pas :sleepy:
voici mon code si ça peut aider

#include <AccelStepper.h>
const int mpapDrvSteps = 4;
const int mpapDrvDir = 5;

AccelStepper stepper1(1, mpapDrvSteps, mpapDrvDir); 

const int bouton1 = 2; //AD+
const int bouton2 = 3; //AD-

void setup() {

  pinMode (bouton1, INPUT_PULLUP);
  pinMode (bouton2, INPUT_PULLUP);

  stepper1.setMaxSpeed(1000);

  stepper1.setSpeed(4.608);
  
}
void loop() {

  if (digitalRead(bouton1) == LOW) {
    stepper1.setSpeed(1000);
  }
  else  if (digitalRead(bouton2) == LOW) {
    stepper1.setSpeed(-1000);
  }
  else {
    stepper1.setSpeed(4.608);
  }
  stepper1.runSpeed();
}

merci encore
cdt

Bonjour astronomy

Est-ce-que ton montage fonctionne avec mon exemple?
Quel configuration de micros-pas as-tu mis sur ton driver?
A quoi correspond cette valeur de 4.608?

Cordialement
jpbbricole

Est ce qu'il ne faut pas régler obligatoirement l'accélération ? La doc ne dit pas s'il y a une rampe d'accélération / décélération lors des changements de vitesse de consigne.

Bonjour JiPe38

J'ai fais le montage et ça fonctionne sans ça?

Cordialement
jpbbricole

Oui là ça fonctionne
en fait je pense que ça vient des pas, car comme les 4.608 sont divisées par 32 ça nous fait 0.144 pas/seconde
est-ce que quelqu'un peu confirmer que c'est ça ???
Merci
cdt

Bonsoir astronomy

4,608 sont des pas/seconde.
Pour moi,
un tour = 32/4.608 = 6,94 sec.
1 pas = 6,94/32 = 0.217 sec.
1 tour de l'axe en sortie du réducteur = 6,94*2038 = 14143 sec. = 3,92 heures.

Avec stepper1.setSpeed(4.608);, il faut vraiment un toucher sensible pour sentir que ça tourne!
Un de tes problème provient du fait que la vitesse lors qu'un BP est pressé,
stepper1.setSpeed(1000);
stepper1.setSpeed(-1000);
est trop rapide, le MPAP vibre, en tâtonant, je suis arrivé à un maximum de 600.

Petite question, quelle tension as-tu sur Vmot, est-ce-que tom MPAP devient chaud?

A+
Cordialement
jpbbricole

Sur le driver j'ai mis un adaptateur secteur de 9 volt, mais je veux bien le faire avec un 12v s'il faut
le driver chauffe un petit peu, mais bien moins qu'avec les moteurs nema 17
sinon le moteur ne chauffe presque pas
et pour finir je vais essayer avec 250 pas par secondes pour l'accélération

cdt