Aller au contenu


Photo
- - - - -

Problème moteur pas-à-pas


10 réponses à ce sujet

#1 Clément13

Clément13

    Nouveau membre

  • Membres
  • 6 messages

Posté 09 juin 2021 - 10:12

Bonjour à tous et toutes,

 

Je travaille avec le moteur pas-à-pas proposé par robotmaker à arbre creux de 6mm,

J'utilise une carte arduino Uno pour le piloter et je veux faire en sorte de le faire tourner de 1 pas sois 1,8° mais le moteur ne tourne pas même si on entend qu'il essaie.

 

Voici le code que j'utilise ci joint ainsi que la photo du montage.

 

Comme vous le voyez sur le code, je ne peux pas le faire tourner à moins de 3 pas d'un coup sois ~7,2°

 

Des solutions ?

 

Merci d'avance :) 

 

Image(s) jointe(s)

  • Capture.PNG
  • 197417437_800922717228604_994512806217110747_n.jpg


#2 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 870 messages
  • Gender:Male

Posté 09 juin 2021 - 10:21

Bonjour,

est-ce que tu aurais un lien vers la documentation du contrôleur moteur?

 

Une possibilité serait que c'est dût aux micros pas.

Je vois que tu utilises setmicrosteps(256). Il faut donc 256 " micro-pas" pour faire un pas complet.

 

J'ai pas regardé la librairie en détail, mais il est bien possible que ton SPI_step(3) fasse en fait 3 microsteps. Dans ce cas, un microstep est quasiment imperceptible.

 

Je te proposes donc d'essayer setMicrosteps(1) au lieu de 256 pour voir.

 

Bonne journée

Sandro

 

PS : la prochaine vois, poste ton code directement comme texte (avec la balise code), c'est bien plus lisible, et ça permet de faire des copier/collers, de tester ton code de notre coté, ou de t'en proposer une version modifiée



#3 Clément13

Clément13

    Nouveau membre

  • Membres
  • 6 messages

Posté 09 juin 2021 - 10:25

Merci,

 

Voici le lien du shield : https://wiki.dfrobot...ld_SKU__DRI0035

 

Je vais essayer ça merci :)



#4 Clément13

Clément13

    Nouveau membre

  • Membres
  • 6 messages

Posté 09 juin 2021 - 01:53

Re bonjour

 

Malheureusement ça ne fonctionne pas :/

D'autres pistes ?



#5 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 103 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é 09 juin 2021 - 03:46

Est il possible de poster le code complet plutôt que juste la photo ?
Je vais essayer de proposer plusieurs versions modifiées, il faudra indiquer le résultat des différentes modifications.

à très bientôt.


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  

 

 

 


#6 Clément13

Clément13

    Nouveau membre

  • Membres
  • 6 messages

Posté 09 juin 2021 - 03:52

Bien sur tenez :

 

#include <SPI.h>
#include <TMC26XStepper.h>
//we have a stepper motor with 200 steps per rotation,CS pin 6, dir pin 4, step pin 5 and a current of 800mA
TMC26XStepper tmc26XStepper = TMC26XStepper(200,6,4,5,800);
void setup() {
    Serial.begin(9600);
    Serial.println("==============================");
    Serial.println("Mesure de la tension aux bornes de la LED (en V)");
    Serial.println("==============================");
    //char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement
    tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0);   // 
    tmc26XStepper.setRandomOffTime(0);                //
    tmc26XStepper.SPI_setCoilCurrent(100);           // Courant envoyé
    tmc26XStepper.setMicrosteps(1);                 // 
    tmc26XStepper.setStallGuardThreshold(4,0);     //

 for ( int i = 0 ; i < 50 ; i++ ){               // Permet d'arreter le programme après avoir réalisé un tour (360/50 = 7,2°)
      int valeur = analogRead(A0);              // Mesure la tension sur la broche A0
      float tension = valeur * (5.0 / 1023.0); // Transforme la mesure (nombre entier) en tension
      Serial.println(tension);                // Envoi la mesure au PC pour affichage
      tmc26XStepper.SPI_setSpeed(50);        // Configuration de la vitesse (MAX 115)
      tmc26XStepper.SPI_step(2);            // Configuration du sens de rotation (SIGNE) + Rotation (1 TOUR = 200) (~7°)
      tmc26XStepper.spi_start() ;          // Démarrage
      delay(500);                         // Attend 0,5s
 }
}
void loop() {}


#7 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 103 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é 10 juin 2021 - 09:14

Différents tests pour bien comprendre ce qui se passe : 

1) 
 

#include <SPI.h>
#include <TMC26XStepper.h>
//we have a stepper motor with 200 steps per rotation,CS pin 6, dir pin 4, step pin 5 and a current of 800mA
TMC26XStepper tmc26XStepper = TMC26XStepper(200,6,4,5,800);
void setup() {
    Serial.begin(9600);
    Serial.println("==============================");
    Serial.println("Mesure de la tension aux bornes de la LED (en V)");
    Serial.println("==============================");
    //char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement
    tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0);  // 
    tmc26XStepper.setRandomOffTime(0);               //
    tmc26XStepper.setMicrosteps(1);                 // 
    tmc26XStepper.setStallGuardThreshold(4,0);     //
    tmc26XStepper.SPI_setSpeed(50);          // Configuration de la vitesse (MAX 115)
    tmc26XStepper.SPI_step(200);            // Configuration du sens de rotation (SIGNE) + Rotation (1 TOUR = 200) (~7°)
    tmc26XStepper.spi_start() ;           // Démarrage
 }
}
void loop() {}

Est ce que le moteur pas à pas fait bien un tour complet ? 

 

Si non, vérifier le câblage et décrire ce qu'il se passe . 


Si oui 

2)

#include <SPI.h>
#include <TMC26XStepper.h>
//we have a stepper motor with 200 steps per rotation,CS pin 6, dir pin 4, step pin 5 and a current of 800mA
TMC26XStepper tmc26XStepper = TMC26XStepper(200,6,4,5,800);
void setup() {
    Serial.begin(9600);
    Serial.println("==============================");
    Serial.println("Mesure de la tension aux bornes de la LED (en V)");
    Serial.println("==============================");
    //char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement
    tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0);  // 
    tmc26XStepper.setRandomOffTime(0);               //
    tmc26XStepper.setMicrosteps(1);                 // 
    tmc26XStepper.setStallGuardThreshold(4,0);     //
    tmc26XStepper.SPI_setSpeed(1);           // Configuration de la vitesse (MAX 115)
    tmc26XStepper.SPI_step(200);            // faire 1 tour
    tmc26XStepper.spi_start() ;           // Démarrage
 }
}
void loop() {}

Est ce que le moteur pas à pas fait toujours son tour complet en allant tout doucement cette fois ci?

Si non, ajuster la valeur de vitesse dans set speed jusqu'à ce que le moteur fasse un tour complet et passer à l'étape 3...


Si oui , 

 

3) 
 

#include <SPI.h>
#include <TMC26XStepper.h>
//we have a stepper motor with 200 steps per rotation,CS pin 6, dir pin 4, step pin 5 and a current of 800mA
TMC26XStepper tmc26XStepper = TMC26XStepper(800,6,4,5,800);
void setup() {
    Serial.begin(9600);
    Serial.println("==============================");
    Serial.println("Mesure de la tension aux bornes de la LED (en V)");
    Serial.println("==============================");
    //char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement
    tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0);  // 
    tmc26XStepper.setRandomOffTime(0);               //
    tmc26XStepper.setMicrosteps(4);                 // 
    tmc26XStepper.setStallGuardThreshold(4,0);     //
    tmc26XStepper.SPI_setSpeed(50);          // Configuration de la vitesse (MAX 115)
    tmc26XStepper.SPI_step(800);            // Configuration du sens de rotation (SIGNE) + Rotation (1 TOUR = 200) (~7°)
    tmc26XStepper.spi_start() ;           // Démarrage
 }
}
void loop() {}

Est ce que le moteur fait toujours un tour complet ? 
Si oui est ce qu'il va à la même vitesse qu'avant ? 

 

 

ça sera déjà pas mal comme tests à faire =)

 


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  

 

 

 


#8 Clément13

Clément13

    Nouveau membre

  • Membres
  • 6 messages

Posté 14 juin 2021 - 02:23

Bonjour,

 

Malheureusement aucun des programmes que vous m'avez transmis ne fonctionne alors que le miens oui, je ne comprends pas pourquoi



#9 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 103 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é 14 juin 2021 - 07:28

Intéressant ... 

 

et celui là ?

 

#include <SPI.h>
#include <TMC26XStepper.h>
//we have a stepper motor with 200 steps per rotation,CS pin 6, dir pin 4, step pin 5 and a current of 800mA
TMC26XStepper tmc26XStepper = TMC26XStepper(200,6,4,5,800);
void setup() {
    Serial.begin(9600);
    Serial.println("==============================");
    Serial.println("Mesure de la tension aux bornes de la LED (en V)");
    Serial.println("==============================");
    //char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement
    tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0);  // 
    tmc26XStepper.setRandomOffTime(0);               //
    tmc26XStepper.SPI_setCoilCurrent(100);          // Courant envoyé
    tmc26XStepper.setMicrosteps(1);                // 
    tmc26XStepper.setStallGuardThreshold(4,0);    //
    tmc26XStepper.SPI_setSpeed(50);              // Configuration de la vitesse (MAX 115)
    tmc26XStepper.SPI_step(200);                // Configuration du sens de rotation (SIGNE) + Rotation (1 TOUR = 200) (~7°)
    tmc26XStepper.spi_start() ;                // Démarrage
 }
}
void loop() {}

Est ce que le code compile ?

 

 

Sinon :

#include <SPI.h>
#include <TMC26XStepper.h>

//we have a stepper motor with 200 steps per rotation, CS pin 2, dir pin 6, step pin 7 and a current of 300mA
TMC26XStepper tmc26XStepper = TMC26XStepper(200,2,6,7,700);

void setup() {

  //char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement
  tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0);
  tmc26XStepper.setRandomOffTime(0);
  tmc26XStepper.setMicrosteps(1);
  tmc26XStepper.setStallGuardThreshold(4,0);
  tmc26XStepper.start();
  tmc26XStepper.setSpeed(50);
  tmc26XStepper.step(200);
}

void loop() {
  tmc26XStepper.move();
}

Est ce que ce code compile ? Est ce que le moteur fait un tour ?


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  

 

 

 


#10 Clément13

Clément13

    Nouveau membre

  • Membres
  • 6 messages

Posté hier, 10:32

Le premier code compile et permet au moteur de faire un tour.

Le deuxième en revanche ne reconnais pas la ligne "tmc26XStepper.start(); sans la rajouté spi_. Une fois rajouté la compilation se fait mais aucune action du moteur



#11 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 103 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é hier, 12:18

Bon si le premier fonctionne ça veut dire que la ligne : 

tmc26XStepper.SPI_setCoilCurrent(100); // Courant envoyé

était absolument nécessaire ... 

pouvez vous essayer à nouveau les codes 2 et 3 proposés dans ce message : https://www.robot-ma...a-pas/?p=113702en ajoutant la ligne "manquante" qui est visiblement absolument nécessaire et me communiquer les résultats ? 

Pour le code qui ne compile pas c'est intéressant comme résultat... 
Je me suis pourtant inspiré de : 
https://github.com/trinamic/TMC26XStepper/blob/master/examples/TMC26XExample/TMC26XExample.ino 

 

que je pensais être la librairie officielle ... Quelle est la librairie que vous avez télécharger ? 

Bonne journée.


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  

 

 

 




Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users