Aller au contenu


Photo
- - - - -

Commande d'un moteur pas à pas avec arduino


  • Veuillez vous connecter pour répondre
10 réponses à ce sujet

#1 Romaric

Romaric

    Nouveau membre

  • Membres
  • 57 messages

Posté 18 octobre 2019 - 03:06

Bonjour les makers !

Alors voilà je travaille sur un projet avec des moteurs pas à pas type Nema17 que je commande via une carte arduino Uno et un driver A4988.

J'ai suivi ce tutoriel : https://www.makergui...duino-tutorial/ pour m'initier au pilotage de ce moteur avec le A4988 mais j'ai un mouvement parasite du moteur pendant la phase d'initialisation du programme est ce que quelqu'un à une idée de ce que ça peut-être ?

 

Merci d'avance pour votre aide !

Romaric.



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 253 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 18 octobre 2019 - 03:12

Peux tu poster ton code exacte? 
Ainsi on pourra t'aider. 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#3 Romaric

Romaric

    Nouveau membre

  • Membres
  • 57 messages

Posté 18 octobre 2019 - 03:31

/*Programme de pilotage d'un moteur pap via arduino, 2 switchs et un driver A4998*/

/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
// Décalaration des variables
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
// PINS du moteur 1
#define enablePin1 8 // Activation du driver (0=> activé)
#define dirPin1 4 // sens de rotation du moteur (0=> sens horaire)
#define stepPin1 5 // commande de rotation

// PINS des boutons poussoirs
#define BP1 2 // bouton fin de course
#define BP2 3 // bouton poussoir jaune => haut


// Variables générales
#define stepsPerRevolution 400 // nombre de pas du moteur (ici un JK42HM48-1684 => copie NEMA17)
bool fin = false;
bool sens;
bool mvt = false;

/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
// Fonctions secondaires ou interruptions
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
void fin_de_course () {
    // fin de course détecter on arrête le moteur
    fin = true;
}

void haut () {
    // appui sur le bouton poussoir de déplacement vers le haut, on arrête la rotation du moteur en relachant le bouton
    sens = true;
    mvt = !mvt;
}


/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
// Initialisation
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
void setup() {
  // Déclaration des pins en tant que sortie:
  pinMode(enablePin1, OUTPUT);
  pinMode(stepPin1, OUTPUT);
  pinMode(dirPin1, OUTPUT);
  // Initialisation de l'état des différents pins
  digitalWrite(enablePin1, HIGH); // Drivers non-activé
  // Déclaration de la fonction d'interruption du capteur de fin de course
  attachInterrupt(0, fin_de_course, RISING);
  attachInterrupt(1, haut, CHANGE);
}


/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
// Programme principal : on pilote le moteur grâce aux différents boutons poussoirs
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
void loop() {
    if (mvt == true && fin == false){
        digitalWrite(enablePin1,LOW);
        digitalWrite(dirPin1,sens);
        // On avance d'un pas (! attention au réglage de MS1,MS2 et MS3 !)
        digitalWrite(stepPin1, HIGH);
        delayMicroseconds(1000);
        digitalWrite(stepPin1, LOW);
        delayMicroseconds(1000);
    }
    else {
      digitalWrite(enablePin1,HIGH);
    } 
} 

Avec ce code je commande la mise en rotation du moteur par une pression sur un bouton poussoir, le moteur est à l'arrêt si le bouton poussoir n'est pas pressé ou si le capteur de fin de course est activé.



#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 253 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 18 octobre 2019 - 05:22

Je suppose que tu as un mouvement parasite de l'ordre d'un pas de stepper... 

 

Si c'est bien cela ton problème je te propose d'essayer ceci  pour l'initialisation: 

 

void setup() {
  // initialisation des pins:
 pinMode(enablePin1, OUTPUT);
 digitalWrite(enablePin1, HIGH); // Drivers non-activé

 pinMode(stepPin1, OUTPUT);
 pinMode(dirPin1, OUTPUT);

  // Déclaration de la fonction d'interruption du capteur de fin de course
  attachInterrupt(0, fin_de_course, RISING);
  attachInterrupt(1, haut, CHANGE);
}

 le but est d'être sur que le driver est bien désactivé en tout premier avant de faire quoi que ce soit.


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#5 Romaric

Romaric

    Nouveau membre

  • Membres
  • 57 messages

Posté 21 octobre 2019 - 08:00

Non le mouvement et de l'ordre d'un huitième de tour (sur un 400 pas ça en fait 50 !), j'ai essayé de garder au niveau haut la broche Enable (de manière hardware) du driver lors de l'initialisation mais ça n'a rien changé et c'est ça qui m'intrigue le plus  :dash2:



#6 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 253 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 21 octobre 2019 - 08:21

Le code n'est pas très compliqué et l'erreur éventuelle ne me saute pas aux yeux ... du coup ce que je recommande dans ce genre de cas c'est de repartir d'un truc qui marche et d'avance jusqu'à ce que ça marche plus pour trouver le problème ^^

Si tu met un programme vide sur ta arduino, est ce que ça fait aussi le problème ? 

 

si non, Si tu met juste le setup et les #define ? problème ou pas ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#7 Romaric

Romaric

    Nouveau membre

  • Membres
  • 57 messages

Posté 21 octobre 2019 - 09:10

Edit : Quand je force de manière hardware le pin enable au niveau haut, il n'y a plus de mouvement parasite. Par contre même avec un code "vide" si je gère le pin enable de manière soft j'ai toujours ce mouvement initial non souhaité --' voici les quelques lignes utilisées :

#define dirPin 4
#define stepPin 5
#define stepsPerRevolution 400

void setup() {
  digitalWrite(8,HIGH);
  // Declare pins as output:
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}

void loop() {
 
}

Je trouve ça étrange, le mouvement est au alentours des 60° avec ce programme "vide".



#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 253 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 21 octobre 2019 - 02:31

As tu essayé en changeant de pins ( on sais jamais ... ) ? J'ai jamais eu ce genre de problème ...  
Le A4988 est il bien connecté ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#9 Romaric

Romaric

    Nouveau membre

  • Membres
  • 57 messages

Posté 21 octobre 2019 - 02:53

Pour illustrer mon problème et le rendre un plus compréhensible j'ai pris le temps de filmer le phénomène observé ( à 15 sec dans la vidéo) :

https://www.youtube....eature=youtu.be

 

@Mike : mon programme fonctionne donc j'estime que le driver est bien connecté surtout que ça fait au moins 5 fois que je fais le montage pour trouver d'où peut venir le problème.

 

Je pense utiliser un transistor afin de bloquer le pin Enable du driver au niveau haut "au repos", je reviens vers vous pour vous indiquer si cette solution fonctionne ou non.
 



#10 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 253 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 21 octobre 2019 - 05:36

Je cherche juste à aider ...  Je ne sais pas d'où vient le problème ...
Je me demande si cela pourrait avoir un lien avec les pins utilisés ...  
Genre est ce que quelque chose fait que le pin step oscille avant que le pin enable soit bloqué ...


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#11 Romaric

Romaric

    Nouveau membre

  • Membres
  • 57 messages

Posté 22 octobre 2019 - 09:14

Merci Mike pour ton aide, finalement en mettant des résistances de Pull-up sur le Enable et le step le problème semble résolu, je me méfierai d'avantage de ces tutos qui sont réalisés dans des mondes parfaits  :close_tema:  !






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users