Auteur Sujet: Piloter un moteur pas à pas  (Lu 35335 fois)

papytrain

  • Invité
Piloter un moteur pas à pas
« le: septembre 27, 2019, 05:32:40 pm »
Bonjour à tous

J'ai le projet de construire un pont tournant piloté par un arduino. Ce pont n'aura qu'une entrée sortie, donc il faudrait qu'il tourne de 180° à chaque appui sur un bouton poussoir.

Le matériel à ma disposition

1 carte Arduino
1 moteur nem17, bipolaire 200 pas
1 driver tb6600

Le soucis est que je suis complètement largué avec la programmation Arduino, malgré la lecture et relecture sur les moteurs pas à pas.

Voici le câblage que j'ai réalisé d'après un schéma trouvé sur le web

@+


msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Piloter un moteur pas à pas
« Réponse #1 le: septembre 27, 2019, 09:15:26 pm »
Bonsoir,
avez-vous testé le code de la page où vous avez trouvé votre schéma ?
https://wiki.dfrobot.com/TB6600_Stepper_Motor_Driver_SKU__DRI0043

7, 6, 5 sont les n° des broches de l'Arduino comme il apparait sur le schéma.
le fil rouge est au +5V.
Si votre moteur est bien un 200 pas, il correspond au programme avec un angle de 1,8° / pas.

Ce code fait faire alternativement 32 tours dans un sens puis 32 dans l'autre sens.
En modifiant le nombre de pas dans chaque sens à 100, comme ci-dessous, il fera des 1/2 tours :

Il vous reste à mettre un bouton entre GND et la pin 4 en INPUT_PULLUP, à tester sa valeur et alternativement sur chaque appui à lancer le forward et le backward.

Pensez à choisir votre alimentation pour la tension du moteur.


int PUL=7; //define Pulse pin
int DIR=6; //define Direction pin
int ENA=5; //define Enable Pin
void setup() {
  pinMode (PUL, OUTPUT);
  pinMode (DIR, OUTPUT);
  pinMode (ENA, OUTPUT);

}

void loop() {
  for (int i=0; i<100; i++)    //Forward 100 steps
  {
    digitalWrite(DIR,LOW);
    digitalWrite(ENA,HIGH);
    digitalWrite(PUL,HIGH);
    delayMicroseconds(50);
    digitalWrite(PUL,LOW);
    delayMicroseconds(50);
  }
  for (int i=0; i<100; i++)   //Backward 100 steps
  {
    digitalWrite(DIR,HIGH);
    digitalWrite(ENA,HIGH);
    digitalWrite(PUL,HIGH);
    delayMicroseconds(50);
    digitalWrite(PUL,LOW);
    delayMicroseconds(50);
  }
}
Cordialement

papytrain

  • Invité
Re : Piloter un moteur pas à pas
« Réponse #2 le: septembre 28, 2019, 12:11:24 am »
Bonsoir

Merci pour votre réponse.

Dans un premier temps j'ai fait un essai avec le programme donné sur votre lien. C'est ok, il tourne un certain nombre de tours dans un sens et idem dans l'autre sens. Je n'ai pas compté mais il fait plusieurs tours.

J'ai refait avec les valeurs que vous m'avez donné, il fait de même mais avec une vitesse lente. J'aurais voulu qu'il s'arrête à un demi-tour. Par contre pour la vitesse ce serait bon pour mon pont tournant.

Je pense qu'il faut ajouter du code..

@+

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Piloter un moteur pas à pas
« Réponse #3 le: septembre 28, 2019, 09:50:43 am »
Curieux que le nombre de pas (6400) change la vitesse ...
Testez ceci (sans garantie), la commande est en mettant la broche 4 au GND
int PUL=7; //define Pulse pin
int DIR=6; //define Direction pin
int ENA=5; //define Enable Pin
int RUN=4; //define appui Pin
int appui=0; // sur le bouton
int sens=0; // sens 0, 1

void setup() {
  pinMode (PUL, OUTPUT);
  pinMode (DIR, OUTPUT);
  pinMode (ENA, OUTPUT);
  pinMode (RUN, INPUT_PULLUP);
}

void loop() {
  appui = digitalRead (RUN);
  if (appui == 0) {
    if (sens == 0) {
      aller();
    }
    else {
      retour();
    }
  }
}

void aller(){
  for (int i=0; i<100; i++)    //Forward 100 steps
  {
    digitalWrite(DIR,LOW);
    digitalWrite(ENA,HIGH);
    digitalWrite(PUL,HIGH);
    delayMicroseconds(50);
    digitalWrite(PUL,LOW);
    delayMicroseconds(50); 
  }
  sens = 1;
}

void retour(){
  for (int i=0; i<100; i++)   //Backward 100 steps
  {
    digitalWrite(DIR,HIGH);
    digitalWrite(ENA,HIGH);
    digitalWrite(PUL,HIGH);
    delayMicroseconds(50);
    digitalWrite(PUL,LOW);
    delayMicroseconds(50);
  }   
  sens = 0;
}
Cordialement

papytrain

  • Invité
Re : Piloter un moteur pas à pas
« Réponse #4 le: septembre 28, 2019, 10:22:33 am »
Vu votre réponse, une chose m'interpelle et j'aurais dû le signaler au 1er post, désolé.

Il y a 6 inters dip sur le driver avec un tableau pour la configuration. Je pense que le résultat obtenu d'après votre 1er codage vient de là.
Voir les photos jointes

@+

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Piloter un moteur pas à pas
« Réponse #5 le: septembre 28, 2019, 12:37:34 pm »
Le sens du ON (flèche) me semble inversé, vérifiez sur la notice, 200 pas par tour est standard.
Ce qui voudrait dire que le courant du driver est réglé sur 2,8A. Vérifiez sur votre moteur si cela convient.
Avez vous adapté la tension à votre moteur ?

Mon premier code est, sauf erreur, exactement celui de l'exemple, sauf le nombre de pas décrit par le moteur : 100 au lieu de 6400 soit 1/2 tour au lieu de 32 tours.
Je ne vois pas ce qui aurait pu changer la vitesse avec l'exemple.
Le deuxième est la copie du 1er mais complété par un bouton qui lance une 1/2 rotation en sens inverse à chaque appui.
Ce code n'est bien sur pas testé.
Cordialement

papytrain

  • Invité
Re : Piloter un moteur pas à pas
« Réponse #6 le: septembre 28, 2019, 01:48:41 pm »
Le moteur a un courant de 1,7 A en nominal

Pour le régler à 200 pas, il faut que je mette s1 s2 sur on et s3 sur off si j'ai bien compris d'après le tableau?

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Piloter un moteur pas à pas
« Réponse #7 le: septembre 28, 2019, 04:09:32 pm »
S1 s2 sur on et s3 sur off SI le ON sur le switch n'est pas inversé par rapport au montage lui-même. Il y a une notice ?
Et le site dit : Up: OFF; Down: "ON" = haut : OFF; bas : ON, or la flèche pour ON est en bas !

Si le site dit vrai, il faut mettre S4 haut, S5 haut, S6 bas et garder S1 S2 et S3

Et surtout si avec 100 pas, le moteur fait un demi-tour avec S1 S2 et S3 comme sur la photo.

Pour diminuer la vitesse de rotation, il suffit d'ajouter un delay entre chaque pas.
Cordialement

papytrain

  • Invité
Re : Piloter un moteur pas à pas
« Réponse #8 le: septembre 28, 2019, 05:19:34 pm »
Désolé, j'abandonne. Tout ça est trop compliqué pour moi. J'ai essayé de toutes les façons, ça ne marche pas. Je pense que tout vient de ce driver
@+

papytrain

  • Invité
Re : Piloter un moteur pas à pas
« Réponse #9 le: septembre 28, 2019, 11:37:20 pm »
Après réflexion, je pense que je n'ai pas le bon matériel. J'ai acheté ça sans réfléchir...D'ailleurs j'ai tout renvoyé à Amazon.

D'où ma question:

Que me conseillez-vous comme moteur pas à pas et quel driver faut'il?  ( Références )

@+

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Piloter un moteur pas à pas
« Réponse #10 le: septembre 29, 2019, 12:31:22 pm »
Cordialement

papytrain

  • Invité
Re : Piloter un moteur pas à pas
« Réponse #11 le: septembre 29, 2019, 01:27:50 pm »
Merci, super!

J'ai passé commande

@+

papytrain

  • Invité
Re : Piloter un moteur pas à pas
« Réponse #12 le: octobre 01, 2019, 06:52:06 pm »
Hello

Impeccable, ça marche super avec le code indiqué sur la doc.

Maintenant que faut'il modifier pour un pas de 180° à chaque impulsion sur un bouton poussoir?

@+

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Piloter un moteur pas à pas
« Réponse #13 le: octobre 01, 2019, 06:54:32 pm »
J'ai l'impression d'avoir joint un code à un précédent message pour cela.
Cordialement

papytrain

  • Invité
Re : Piloter un moteur pas à pas
« Réponse #14 le: octobre 01, 2019, 11:51:04 pm »
Le code sue vous m'aviez donné correspondait au driver microstep et les branchements sont différents par rapport au code sur l'article de Locoduino