Aller au contenu


Romaric

Inscrit(e) (le) 12 mars 2019
Connecté Dernière activité il y a 2 minutes
-----

Messages que j'ai postés

Dans le sujet : Commande d'un moteur pas à pas avec arduino

il y a 33 minutes

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:  !


Dans le sujet : Commande d'un moteur pas à pas avec arduino

hier, 14: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.
 


Dans le sujet : Commande d'un moteur pas à pas avec arduino

hier, 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".


Dans le sujet : Commande d'un moteur pas à pas avec arduino

hier, 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:


Dans le sujet : Commande d'un moteur pas à pas avec arduino

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é.