Aller au contenu


Photo
- - - - -

premier programme Arduino moteur Nema


42 réponses à ce sujet

#1 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 16 septembre 2018 - 04:22

Bonjour,

 

J'ai pour projet de piloter un moteur Nema 17 piloter avec un pilote TB6600 + une carte arduino UNO.

 

Les branchements sont les suivants :

ENA-(ENA), DIR-(DIR) & PULL-(PULL) --> relié à l'un des ports GND de la carte Arduino Uno
ENA+(+5V) --> relié à DIGITAL PORT 8 de la carte Arduino Uno
DIR+(+5V) --> relié à DIGITAL PORT 7 de la carte Arduino Uno
PULL+(+5V)-- > relié à DIGITAL PORT 4 de la carte Arduino Uno
B- --> relié à câble bleu du moteur Nema
B+ --> relié à câble rouge du moteur Nema
A- --> relié à câble vert du moteur Nema
A+ --> relié à câble noir du moteur Nema
GDN TB6600 > relié à V- de l'alimentation 12V400W
VCC --> V+ de l'alimentation 12V400W

 

Est-ce que ce code pourrait convenir ?

    AccelStepper stepper(1, 8, 7);

    void setup()
    {
      stepper.setMaxSpeed(10000);
    }

    void loop()
    {

      stepper.setSpeed(4000);

      stepper.runSpeed();
    }

Je me suis inspiré du web.

 

Par contre je ne comprends pas comment déterminer le 10000.

 

Merci d'avance pour vos retours.



#2 Mike118

Mike118

    Staff Robot Maker

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

Posté 16 septembre 2018 - 05:40

Alors, 

Pour piloter un moteur pas à pas tu as 3 "commandes" sur le driver : 

 

STEP ( PULSE / CLK ) qui permet de dire quand le moteur bouge d'un pas. 

DIRECTION ( DIR ou CW/CCW )  qui permet d'indiquer dans quel sens ton moteur tourne au prochain pas.
ENABLE ( EN ) qui permet d'activer ou pas le driver. En général quand le moteur est à l'arrêt et qu'on a pas besoin qu'il maintienne la position on coupe le moteur.

 

L'initialisation du " stepper " "AccelStepper stepper(1, 8, 7);"

 

Le 1 est pour indiquer qu'on va utiliser un driver. 

les deux autres sont là pour indiquer les pins STEP et DIR hors toi visiblement tu as essayer de mettre le pin enable dans cette initialisation.

 

Du coup pour être plus claire dans le code il faudrait mieux écrire quelque chose du style : 

#define STEPPIN 4

#define DIRPIN 7

 

AccelStepper stepper(AccelStepper::DRIVER, STEPPIN, DIRPIN);

 

 

Le pin Enable peut aussi être géré par la lib, tout est expliqué ici si tu veux apprendre à utiliser la lib : 
https://www.airspayc...77838ca81ac39ab

 

Tu y trouveras aussi les explication pour les valeurs de vitesse et d'accélération. 


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 !

 

Les réalisations de Mike118  

 

 

 


#3 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 16 septembre 2018 - 08:21

D'accord, juste pour le tuto ça va être un peu compliqué tout de suite pour moi, mais je le mets de côté.

 

J'ai fait une eurreur, je pensais écrire ceci :

 

"AccelStepper stepper(1, 4, 7); // soit 1 pour le Driver , 4 pour PULL, 7 pour DIR"

 

du coup si je comprends j'ai 2 options :

#include <AccelStepper.h>
#define STEPPIN 4
#define DIRPIN 7

AccelStepper stepper(AccelStepper::DRIVER, STEPPIN, DIRPIN);

void setup()
{
stepper.setMaxSpeed(10000);
}

void loop()
{

stepper.setSpeed(4000);

stepper.runSpeed();
}

ou alors

#include <AccelStepper.h>

AccelStepper stepper(1, 4, 7);

void setup()
{
stepper.setMaxSpeed(10000);
}

void loop()
{

stepper.setSpeed(4000);

stepper.runSpeed();
}

Par contre, je n'ai toujours pas compris d'où viennent les 10000 (quelle unité ?) et comment on choisit ces vitesses et leurs unités (tour/s, tour/min, nombre de pas ...).

 

Comme je n'ai jamais pratiqué, je voudrais savoir ce que va faire le moteur quand le programme sera lancé, il va tourné à 4000 (unité ?/?) sans s'arrêter ?

 

Bonne soirée.



#4 Mike118

Mike118

    Staff Robot Maker

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

Posté 16 septembre 2018 - 09:39

D'accord, juste pour le tuto ça va être un peu compliqué tout de suite pour moi, mais je le mets de côté.

 

J'ai fait une eurreur, je pensais écrire ceci :

 

"AccelStepper stepper(1, 4, 7); // soit 1 pour le Driver , 4 pour PULL, 7 pour DIR"

 

du coup si je comprends j'ai 2 options :

#include <AccelStepper.h>
#define STEPPIN 4
#define DIRPIN 7

AccelStepper stepper(AccelStepper::DRIVER, STEPPIN, DIRPIN);

void setup()
{
stepper.setMaxSpeed(10000);
}

void loop()
{

stepper.setSpeed(4000);

stepper.runSpeed();
}

ou alors

#include <AccelStepper.h>

AccelStepper stepper(1, 4, 7);

void setup()
{
stepper.setMaxSpeed(10000);
}

void loop()
{

stepper.setSpeed(4000);

stepper.runSpeed();
}

 

 

Oui les deux notations sont équivalente . 

Mais je préfère celle avec des #define c'est une bonne habitude à prendre pour que la reprise de code soit plus facile. 

 

 

 

 

Comme je n'ai jamais pratiqué, je voudrais savoir ce que va faire le moteur quand le programme sera lancé, il va tourné à 4000 (unité ?/?) sans s'arrêter ?

 

 

 

Exactement =)


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 !

 

Les réalisations de Mike118  

 

 

 


#5 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 17 septembre 2018 - 05:42

D'accord, c'est très clair.

 

La seule chose que je ne comprends toujours pas c'est d'où viennent les 10000 et comment on les détermine dans

stepper.setMaxSpeed(10000);

et quelle est leur unité (tour/s, tour/min, nombre de pas ...) ? Comment fait-on ?

 

Je suis quand même allé voir le tuto et j'ai trouvé ça : "The desired maximum speed in steps per second.", donc a priori ce sont des pas/s.

 

Pourriez-vous m'éclairer sur ce point voire m'indiquer d'autres tutos qui pourraient peut-être m'aiguiller ?

 

Merci d'avance et bonne journée.



#6 Mike118

Mike118

    Staff Robot Maker

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

Posté 17 septembre 2018 - 07:47

Oui mais ce sont des " pas" =   X pas   ...           avec  X ton mode, pas complet, demi pas, 8 ème de pas etc... 

si tu es en 1/16 pas, et que ton moteur à 200 pas / tours  ça te fait 3200 "pas" / tour

Donc si tu mets 3200 tu es censé faire 1 tour par seconde dans cette configuration. 

Par contre si tu es en 1/8 pas et que tu mets 3200 le moteur est censé faire 2 tours / secondes...


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 !

 

Les réalisations de Mike118  

 

 

 


#7 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 17 septembre 2018 - 04:01

Bonsoir,

Ok, merci beaucoup, c'est clair pour moi.

Bonne soirée.



#8 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 17 septembre 2018 - 04:03

Je ne sais pas si la question est claire, mais, comment connait-on le "setMaxSpeed" d'un moteur, j'image que tous les moteurs ne peuvent pas tourner à la même vitesse et pour un Nema 17 par exemple, il y a une limite ?

 

Merci.



#9 Mike118

Mike118

    Staff Robot Maker

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

Posté 17 septembre 2018 - 04:19

Oui il y a une limite, 

ça dépend des caractéristiques de ton moteurs et du couple exercé par ton moteur. 

Tu fais des essais et tu vois ce qui marche 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 !

 

Les réalisations de Mike118  

 

 

 


#10 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 17 septembre 2018 - 06:47

 
J'ai mis ci-dessous les caractéristiques de mon moteur.
 
spec_moteur.jpg
 
Je comprends bien qu'on ne puisse pas donner de réponse fixée d'avance, mais est-ce que je pourrai tout de même avoir une valeur de "setMaxSpeed" de base pour démarrer ?
 
Merci.


#11 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 090 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 18 septembre 2018 - 05:39

Sans être affirmatif , mais tu as 2500pps (Pas Par Seconde) comme indice



#12 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 21 septembre 2018 - 02:50

Bonjour,

Juste pour dire que j'ai bien eu vos réponses, j'attends de pouvoir faire quelques tests, et je reviendrai sur le post.

Bon après-midi.



#13 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 28 septembre 2018 - 08:09

Bonjour,

 

J'avance dans mes débuts, pour l'instant tout le matériel est branché comme nous avons validé depuis le départ dans le post#1 de ce sujet (je vérfie et (re)(re)revérfie que j'ai bien mis les câbles). Mais je n'ai pas encore mis l'alimentation . Pour l'instant j'ai juste validé que ma carte Arduino UNO fonctionnait (la LED clignote bien).

 

J'aurais quelques questions à vous poser avant de lancer. Dans le post#4, nous avons validé ce programme,

#include <AccelStepper.h>
#define STEPPIN 4
#define DIRPIN 7

AccelStepper stepper(AccelStepper::DRIVER, STEPPIN, DIRPIN);

void setup()
{
stepper.setMaxSpeed(10000);
}

void loop()
{

stepper.setSpeed(4000);

stepper.runSpeed();
}

mais je m'interroge sur l'arrêt du moteur ?  :wacko:   Je m'explique : si je lance le programme, le moteur devrait tourner mais a priori sans s'arrêter ? comment peut-on faire pour le faire tourner pendant un temps donné voire peut-être mieux pour moi le "stopper proprement" ? Je me suis posé cette question car quand j'ai téléversé "Blink", dès que je branche la carte UNO, ça clignote exactement comme je l'avais programmé avant, et donc je me dis, si je téléverse le programme du moteur dans la carte, dès que je brancherai, il tournera (et du coup même, je ne suis pas sûr qu'on puisse tout débrancher alors que le moteur tourne ? :huh:  pourriez-vous m'éclairer sur cet aspect ? 

 

Pour info, j'ai cet interrupteur s'il pouvait me servir.

 

Merci d'avance pour vos retours quand vous le pourrer car il ne me reste plus que cette étape à  comprendre avant de pouvoir lancer ^_^

 

Bonne journée.



#14 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 28 septembre 2018 - 12:39

Je complète mon message de ce matin, j'ai branché et :

- le moteur a bien tourné avec le programme ci-dessus (post#13)

- par contre, pour pouvoir l'arrêter j'ai utilisé le code ci-dessous (while en plus à la fin) :

#include <AccelStepper.h>

AccelStepper stepper(1, 4, 7);

void setup()
{
stepper.setMaxSpeed(1000);
}

void loop()
{

stepper.setSpeed(100);

stepper.runSpeed();

while (1){};

}

par contre j'ai fait ça en trouvant l'info sur le web, mais je ne comprends pas bien la fonction de ce paramètre "while" et ce qu'il fait exactement dans mon programme

 

Pour résumer j'aimerais bien pouvoir facilement stopper mon monteur quand je le souhaiterais.

 

Pour info en matériel supplémentaire j'ai des fils breadboards, une breadboard, cet interrupteur, ce potentiomètre, des endstops.

 

Merci d'avance pour vos retours.



#15 Mike118

Mike118

    Staff Robot Maker

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

Posté 28 septembre 2018 - 09:20

#include <AccelStepper.h>
 
#define INTERUPTEURPIN 10
AccelStepper stepper(1, 4, 7);
 
void setup()
{
pinMode(INTERUPTEURPIN,INPUT);
stepper.setMaxSpeed(1000);
}
 
void loop()
{

if( digitalRead(INTERUPTEURPIN) ) stepper.setSpeed(100);
else stepper.setSpeed(0);

stepper.runSpeed();
 

 
}

un truc du genre ça marche =) par contre il faut brancher le bouton : Le centre du bouton va sur le pin 10 dans le cas du code que je t'ai filé, et les autres pin droite et gauche du bouton l'un sur 5V l'autre sur le GND . 


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 !

 

Les réalisations de Mike118  

 

 

 


#16 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 29 septembre 2018 - 09:17

Bonjour,

 

Merci beaucoup pour ce retour, ça fonctionne très bien. Le plus difficile ça a été de faire tenir le mini-interrupteur sur la breadboard et dès fois il se décroche mais ça va quand même.

 

Si c'était possible je souhaiterais aussi pouvoir régler la température avec ce potentiomètre (si ça peut marcher). Pourriez-vous m'aider svp pour le code et les branchements ?

 

Je profite aussi du message pour vous demander la différence entre cet interrupteur que je possède aussi et qui lui ressemble (6 broches et à l'air d'avoir 3 positions) et celui avec 3 broches que j'ai installé ?

 

Merci d'avance, bonne journée.



#17 Mike118

Mike118

    Staff Robot Maker

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

Posté 29 septembre 2018 - 11:59

En fait ce second interrupteur peut être mis à la place du premier et tiendra mieux sur la breadboard. ( Je te l'ai mis dans le colis exprès ) 
C'est comme si c'était deux interrupteurs collés avec un seul levier pour les deux interrupteurs.
 


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 !

 

Les réalisations de Mike118  

 

 

 


#18 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 29 septembre 2018 - 01:14

En effet, il remonte un peu mais semble mieux tenir que celui avec 3 broches, avec le temps les broches devraient se faire à la breadboard ;).

 

Si c'était possible je souhaiterais aussi pouvoir régler la vitesse du moteur avec le potentiomètre (si ça peut marcher). Pourriez-vous m'aider svp pour le code et les branchements ?

 

J'avais lu quelque part qu'un moteur PAP était plus sensible qu'un potentiomètre, mais là c'est pour essayer de faire varier la vitesse sans nécessairement la changer via l'IDE Arduino.

 

Merci, bon après-midi.



#19 Mike118

Mike118

    Staff Robot Maker

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

Posté 29 septembre 2018 - 02:10

Tu mets ton potentiomètres sur la breadbord, le pin du milieu du potentiomètre sur A0 et les autres pin droite et gauche  l'un sur la masse l'autre sur le 5V.

 

 

PS : si tu pouvais prendre une photo de ton montage voir même une petite vidéo ça serait top ! 

 

Le code : 

#include <AccelStepper.h>
 
#define INTERUPTEURPIN 10
#define ANALOGPIN A0

AccelStepper stepper(1, 4, 7);
 
void setup()
{
pinMode(INTERUPTEURPIN,INPUT);
stepper.setMaxSpeed(1000);
}
 
void loop()
{

if( digitalRead(INTERUPTEURPIN) ) stepper.setSpeed(analogRead(ANALOGPIN));
else stepper.setSpeed(0);

stepper.runSpeed();
 

 
}

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 !

 

Les réalisations de Mike118  

 

 

 


#20 infosmaker

infosmaker

    Nouveau membre

  • Membres
  • 40 messages

Posté 29 septembre 2018 - 08:32

Merci pour le programme, ça fonctionne bien.

 

Juste une question : avec le code ci-dessus (#19) j'ai mis stepper.setMaxSpeed(10000); (bien dix mille). Le potentiomètre fonctionne, néanmoins, quand je le tourne même au max, la vitesse max que j'atteinds paraît très faible par rapport aux vitesses que je peux obtenir avec le code présenté en #15 en mettant stepper.setMaxSpeed(10000) et stepper.setSpeed(3000) par exemple.

 

Comment peut-on expliquer ceci ?

 

Pour info, le TB660 est dans la configuration suivante : OFF OFF ON ON ON OFF.

 

Bonne soirée.





Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users