Problème avec un moteur pas a pas : fait du bruit mais ne tourne pas

Bonjour,
je travaille sur un projet d'étude et j'ai besoin de faire fonctionner des moteurs pas à pas.. Je viens de les recevoir chez moi aujourd'hui, et j'ai essayer simplement de le faire tourner à vitesse constante, juste pour voir justement si j'arrive à le faire tourner, et il se trouve que non...
Il s'agit d'un NEMA 17, dont les principales propriétés sont ici :

Rated current : 1.7A/phase
Number of phase : 2
Step Angle : 1.8deg
Rated voltage : 3.06V
Phase Resistance : 1.8Ohms
Inductance : 3.8mH

J'utilise pour le faire tourner le driver DRV8825, de chez POLULU, et je n'utilise PAS les librairies arduino car le contrôle du driver doit être fait dans mon système, par la suite, via un microprocesseur ATtiny45, que je possède déjà.

Alors voilà comment ça s'est passé : j'ai programmer le microprocesseur pour que le Pin0 reste LOW ( qui correspondra au signal DIR ) et pour que le Pin1 envoie une impulsion de 10ms toutes les 100ms... J'ai testé le fonctionnement du microprocesseur avec une LED, elle s'allume effectivement environ 10 fois par seconde.
( J'alimente le microprocesseur avec la borne 5V de la arduino, elle-même reliée à mon PC en USB. Et c'est aussi la carte Arduino qui alimente le driver DRV8825)
Je branche ensuite mon moteur comme spécifié sur le site POLULU, en connectant le 5V de arduino aux broches SLEEP et RESET. Je branche mon microprocesseur aux bornes DIR et STEP. Je branche le GND de la Arduino avec le GND du driver.
Ensuite, je n'ai pas de condensateur 100uF... alors j'en ai mis 2, en parallèle, de 47uF chacun, pour me rapprocher le plus possible des 100uF conseillés. Et puis je branche l'alimentation de mon moteur : une pile 9V, via l'intermédiaire d'un bouton pour faire tourner mon moteur quand j'appuie...
Je pensais avoir tout fait comme il fallait, mais au moment d'appuyer sur le bouton, le moteur ne bouge pas du tout, il y a simplement un bruit, haute fréquence, un genre de bruit électronique vraiment pas agréable... J'ai toutes fois constaté que, lorsque le bouton est appuyé, il y a bien un couple transmis au moteur car je n'arrive pas à le faire tourner avec mes doigts ; alors que je peux le faire quand rien n'est branché. Mais le moteur ne tourne pas et c'est bien le problème...

J'ai regarder un peu sur internet et certains ont déjà eu ce problème : la solution était simplement de tourner le potentiomètre sur le Driver pour réduire l'intensité apportée au moteur... Mais ça n'a rien donner chez moi...
Je ne sais pas comment faire, d'où mon post ici.. Merci de votre temps...

Virgile S.

Pin0 et Pin1 de votre Arduino sont liées au port série, utilisez en 2 autres juste pour voir?

une impulsion de 10ms toutes les 100ms

essayez juste un signal "carré" à plus haute fréquence

// defines pins numbers
const byte stepPin = 3;
const byte dirPin = 6;

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

  digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction
  // 200 steps = 1 rotation
  for (int x = 0; x < 200; x++) {
    digitalWrite(stepPin, HIGH);
    delay(1);
    digitalWrite(stepPin, LOW);
    delay(1);
  }
  delay(1000); // 1 second delay

  // 400 steps = 2 rotation
  digitalWrite(dirPin, LOW); //change la direction
  for (int x = 0; x < 400; x++) {
    digitalWrite(stepPin, HIGH);
    delay(1);
    digitalWrite(stepPin, LOW);
    delay(1);
  }
  delay(1000);
}

Wayhlan:
J'ai regarder un peu sur internet et certains ont déjà eu ce problème : la solution était simplement de tourner le potentiomètre sur le Driver pour réduire l'intensité apportée au moteur... Mais ça n'a rien donner chez moi...
Je ne sais pas comment faire, d'où mon post ici.. Merci de votre temps...

Virgile S.

bonsoir
probleme d'inversion d'enroulement ?
ça donne quoi en inversant la connection d'un des enroulements ?

Bonsoir, merci des réponses rapides !
J-M-L : je n'utilise pas ces pin de arduino, c'est le pin0 et pin1 du microprocesseur; arduino n'est là que pour alimenter les modules.. ( si j'ai bien compris ce que vous vouliez me dire... )
Pour le signal carré, j'aurais besoin a terme, de choisir le temps entre chaque pas de façon très précise, est-ce que des impulsions de 1ms comme vous le proposez dans votre code suffiraient ? Ou est-ce que je dois absolument le faire avec un signal carré de toutes façon ?

Artouste : J'ai essayer d'inverser l'un, puis l'autre, rien n'a changé... :confused: Merci quand même :slight_smile:

ah ok pour les pins.

avez vous essayé - juste pour voir si ça change la donne - avec le code ci dessus?

reset et sleep sont bien à HIGH?

je n'ai pas essayer le même code, mais voici le mien, je pense que c'est équivalent... Non ? :

 void loop() {
  digitalWrite(0, LOW);
  digitalWrite(1, HIGH);   
  delay(1);                      
  digitalWrite(1, LOW);    
  delay(1);                       
}

Toujours le même bruit, aucun mouvement...

Reset et sleep sont bien a HIGH oui... Est-ce que le problème pourrait venir de mon alimentation ( la pile 9V ) ?

Wayhlan:
je n'ai pas essayer le même code, mais voici le mien, je pense que c'est équivalent... Non ? :

 void loop() {

digitalWrite(0, LOW);
 digitalWrite(1, HIGH);  
 delay(1);                      
 digitalWrite(1, LOW);    
 delay(1);                      
}




Toujours le même bruit, aucun mouvement... 

Reset et sleep sont bien a HIGH oui... Est-ce que le problème pourrait venir de mon alimentation ( la pile 9V ) ?

l'alim de puissance est une pile 9V ?
si oui c'est peut etre l'intensité dispo qui est trop limite.

ça donne quoi en augmentant sensiblement les delay(1) par delay(5) ?
le bruit reste le meme ?

J'ai essayer avec delay(5), aucun changement, même bruit, aucun mouvement...
J'ai remarquer que, le fait d'inverser les fils des boucles n'avait aucune influence sur le bruit, ni sur le mouvement du moteur.

Je n'ai pas mieux que la pile 9V chez moi.. Avez-vous des conseils sur une autre alimentation ? Le problème serait une intensité trop faible ...? Pourtant le couple semble transmis, je n'arrive vraiment absolument pas à faire bouger le rotor manuellement lorsque le moteur est alimenté.

Serait-ce possible que le problème vienne d'un soucis de compatibilité entre le module et le moteur ? Je pense à une éventuelle "mauvaise séquence", dans l'ordre des impulsions..? Ou quelque chose en rapport avec le ratio de pas ? ; à priori j'aimerai travailler en full-step...

J'avais essayer manuellement de coder un module en arduino, en sortant directement sur 4 pins, des pics, en séquence correcte, je me rappelle avoir réussis a faire tourner un moteur plus petit que celui que j'ai maintenant. ( après avoir eu plusieurs problèmes de séquence justement )

Wayhlan:
... Pourtant le couple semble transmis, je n'arrive vraiment absolument pas à faire bouger le rotor manuellement lorsque le moteur est alimenté. ...

Si tel est le cas, alors, oui, le courant est suffisant pour commander le moteur. Le problème semble venir du fait que les phases ne commutent pas.

Cordialement.

Pierre

Le problème semble venir du fait que les phases ne commutent pas.

Il y aurait-il un moyen de gérer ce problème ?

Wayhlan:
Il y aurait-il un moyen de gérer ce problème ?

perso , je testerais déjà avec une lib éprouvée comme comme là
ça levera déjà un doute sur la circuiterie

Alors, j'ai essayé avec une lib, celle que vous m'avez envoyé.. et maintenant, en plus du bruit aigu, il y a des petits "tac tac tac", environ 2 fois par seconde, mais toujours aucun mouvement...

Wayhlan:
Alors, j'ai essayé avec une lib, celle que vous m'avez envoyé.. et maintenant, en plus du bruit aigu, il y a des petits "tac tac tac", environ 2 fois par seconde, mais toujours aucun mouvement...

et avec inversion d'un enroulement ?

Question bête et méchante : Vous êtes sûr que les bobines du moteur sont bien branchées là où elles doivent l'être ?

  • Bobine 1 ente A1 et A2
  • Bobine 2 entre B1 et B2

Une inattention aurait pu mener par exemple à :

  • Bobine 1 entre A1 et B1
  • Bobine 2 entre A2 et B2

Cordialement.

Pierre

Oui les bobines sont bien branchées, j'ai revérifier encore une fois à l'instant...

J'ai recherché encore sur internet, j'ai essayer avec d'autre librairies, avec des programmes tout faits.. mais rien a faire, le moteur ne tourne absolument pas... toujours ce bruits par contre.

Je n'ai plus d'idée sur la source possible du problème...

Qu'avez-vous comme moyen(s) de mesure ?

Cordialement.

Pierre

Wayhlan:
Oui les bobines sont bien branchées, j'ai revérifier encore une fois à l'instant...

test Ω des 2 enroulements du moteur , ça repond quoi ?

J'ai un volt-mètre pour mesurer les tensions, intensités, résistances..
Il a un problème de faux contact.. Mais j'arrive a me débrouiller quand même, pour les valeurs des resistances, je ne suis pas sûr de m'y prendre tout à fait comme il faudrait :
je trouve 0.003 Ohm pour chacun des enroulements.. ( voilà comment j'ai fait : j'ai relier la borne COM et laborne Ohm/V/mA du volt-mètres avec l'enroulement 1, puis avec l'enroulement 2 ; en ayant régler le curseur sur "2k", dans la catégorie Ohms... )

je trouve ça un peu bizarre de trouver 0.003, alors que dans le data sheet, ils disaient "Phase resistance : 1.8Ohms" ...

Wayhlan:
.. ( voilà comment j'ai fait : j'ai relier la borne COM et laborne Ohm/V/mA du volt-mètres avec l'enroulement 1, puis avec l'enroulement 2 ; en ayant régler le curseur sur "2k", dans la catégorie Ohms... )

Vous avez bien déconnecté vos enroulements du module DRV8825 avant de faire votre mesure ?

Vous n'avez pas un calibre 200 ohms ?

Cordialement.

Pierre

Oui oui, tout était débranché, le calibre 200 Ohm était saturé.. j'ai refais les mesures et voilà ce que je trouve :

39.6 Ohms pour l'une, et 38.5 Ohms pour l'autre