Conseil programmation moteur pas à pas débutant

Portrait de demandeinfos

Bonjour,

Je vais bientôt réaliser les 2 montages suivants :

Montage 1 :

TB6600 + carte Arduino UNO + Nema 17 + Alimentation 12V400, Microstepper TB6600 sur 1A et « Microstep » sur 1/8, et avec les branchements entre la carte Arduino et le pilote ainsi :

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

Montage 2 :

TB6560 + carte Arduino UNO + Nema 17 + Alimentation 12V400, Microstepper TB6560 sur SW1 On, SW2 Off, SW3 On, S1 Off, S2 On, S3 Off, S4 Off, S5 On, S6 On, et avec les branchements entre la carte Arduino et le pilote ainsi :

CLK-, CW-, EN- pin GND de la carte Arduino Uno
CLK+ pin 4 de la carte Arduino Uno
EN+ pin 8 de la carte Arduino Uno
CW+ pin 7 de la carte Arduino Uno

Ma question concerne la programmation dans Arduino comme je débute. Je souhaiterais pour l’instant uniquement faire tourner les moteurs et pouvoir faire varier la vitesse.

Dans ce tuto, j’ai trouvé ce programme :

#include <AccelStepper.h>

AccelStepper stepper(1,9,2); //le 9 représente la sortie de l'arduino avec laquelle tu controles la vitesse, et le 2 le sens de rotation.

void setup()

   stepper.setMaxSpeed(2000);V//vitesse max du moteur en nombre de steps par seconde

   stepper.setSpeed(100);//Réglage de la vitesse du moteur

}

void loop()

   stepper.runSpeed();// fait tourner le moteur à la vitesse réglée.

}

Mes questions sont les suivantes :

- pourrai-je utiliser en copier-coller ce programme pour l’utiliser compte tenu de mon montage (moyennant les questions ci-dessous) ?

- « AccelStepper stepper » : comment adapter cette ligne de commande à mes montages ?

- « stepper.setMaxSpeed » : comment définir cette vitesse ?

- comment arrêter le moteur (quelle procédure) lorsque le programme a été lancée ?

Je vous remercie d’avance d’un premier retour sur ce post, si vous pouviez me donner quelques explications pour que je puisse comprendre les grands principes. Je peux aussi en plus dans un second temps consulter des tutos pour débutant si vous en connaissiez spécifiquement sur la programmation Arduino pour ce type de montage.

Bonne journée.

Portrait de demandeinfos

Merci !!

Par contre c'est un peu confus pour moi, je ne comprends pas la terminologie, et je m'aperçois que je vais devoir aller consulter quelques tutos.

Auriez-vous connaissance de "bons" tutos spécifiquement sur le sujet ?

Bon après-midi.

Portrait de demandeinfos

Bonjour,

Je ne connaissais ce document mais bravo à l’auteur car toutes les bases sont données, beaucoup d'infos aussi pour bien comprendre les notions de de base en programmation et électricité, mais 400 pages de tutos faut s’accrocher quant on démarre ;)

Jusqu’à p50 j’ai appris plein de choses, ok pour le fonctionnement de la carte, je trouve aussi p51/p52 très claires sur les commandes setup/void.

Après je m'y perds un peu ce n'est pas ce que recherche (affichage écran, clignotement de LED ...). ll faut aller p419 pour découvrir la fonction « Stepper », je n’ai pas trouvé d’informations sur « Accelstepper » et la différence entre les deux.

Suite à ma lecture, je peux essayer de faire ci-dessous deux propositions pour mon montage, en espérant respecter vos consignes pour la diffusion du code :

#include <AccelStepper.h>

AccelStepper stepper(2, 4,7,8); //4, 7, 8 représente la sortie de l'arduino pour le controles la vitesse, et le 2 le sens de rotation.

void setup()

stepper.setMaxSpeed(???);V//vitesse max du moteur en nombre de steps par seconde (mon moteur fait 200 pas, j'ai un peu de mal à choisir, je voudrais qui tourne moyennement pour mon test ?)

stepper.setSpeed(50);//Réglage de la vitesse du moteur (même question que ci-dessus)

}

void loop()

stepper.runSpeed();// fait tourner le moteur à la vitesse réglée.

}

ou alors

#include <Stepper.h>
 
//pour un moteur de 200 pas par tour et brancher sur les broches 4, 7, 8
Stepper moteur(200, 4, 7, 8
 
void setup()
{
moteur.setSpeed(30); //30 tours par minute
//(rappel : ici le moteur fait 200 pas par tour, on fera donc 6000 pas par minute)
}
 
void loop()
{
    moteur.step(???
    delay(???
    moteur.step(­???
    delay(???
}

Dans le 1er code "stepper.setMaxSpeed" et dans le 2ème pour "moteur.setSpeed(30)", comment sait-on si c'est des tours/sec ou tours/ min ?

Je profite d'avoir lu le tuto pdf pour vous demander si avec ce genre de montage, c'est envisageable d'utiliser Ardublock ?

Grand merci d'avance pour vos conseils.

Portrait de demandeinfos

Pour le pilote, j'ai les deux, mais je partirai d'abord sur le TB6600.

J'ai joint mon schéma au post (obtenu en me faisant aideré, peut-être à (re)valider).

Sinon depuis ce matin je poursuis mes lectures, et je me demande si mon programme va ressembler à quelque chose comme ça ? :

#include <Stepper.h>

//pour un moteur de 200 pas par tour et brancher sur les broches 4, 7, 8
Stepper moteur(200, 4, 7, 8);

void setup()
{

moteur.setSpeed(30); //30 tours par minute
//(rappel : ici le moteur fait 200 pas par tour, on fera donc 6000 pas par minute)

void loop()
{
    
moteur.step(???);

    delay(???);

}

Après mes lectures, inclure une bibliothèque ok, fonction setup et loop ok, lancer un programme ok, je crois que setSpeed() c'est ok.

Par contre, pour ces fonctions je n'ai pas compris leur utilité/principe et réglage : Stepper objet (x, x, x, x), step () et delay().

Merci d'avance pour votre retour, de mon côté, je poursuis.

Portrait de demandeinfos

Merci beaucoup pour ce retour, nous avons beaucoup échangé mais il me reste 2-3 petites questions :

- pour le pin 9, ne serait-ce pas 7 selon mon schéma, donc AccelStepper stepper(1, 8, 7)  ? (ou peut-être que je n'ai pas compris et peu importe que ce soit sur 7 ou 9 ?)

- je souhaiterais aussi savoir à quoi servent "unsigned long temp" et "long Speed" ?

- dans " stepper.setMaxSpeed(10000) " je vois pas d'où vient le "10000" ?

je me demandais du coup si le programme ne pourraît pas être sans potentiomètre :

AccelStepper stepper(1, 8, 7);

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

void loop()
{

  stepper.setSpeed(Speed);

  stepper.runSpeed();
}

Merci d'avance, bonne soirée.

Portrait de demandeinfos

Erratum - supprimé

Portrait de demandeinfos

si j'arrivais à faire ça ce serait top +1, je mets ce programme bien de côté

bon, je vais essayer une fois que j'aurai réussi au moins à faire tourner le moteur :)

juste pour info, où je peux commander ce type de bouton (et le potar aussi), si je pouvais avoir un exemple sur le web ?

je voudrais bien svp aussi si c'était possible un retour sur mes questions :

- pour le pin 9, ne serait-ce pas 7 selon mon schéma, donc AccelStepper stepper(1, 8, 7)  ? (ou peut-être que je n'ai pas compris et peu importe que ce soit sur 7 ou 9 ?)

- je souhaiterais aussi savoir à quoi servent "unsigned long temp" et "long Speed" ?

- dans " stepper.setMaxSpeed(10000) " je vois pas d'où vient le "10000" ?

bonne fin d'après-midi

Portrait de demandeinfos

Merci beaucoup.

Me reste plus que ça à comprendre :

- je souhaiterais aussi savoir à quoi servent "unsigned long temp" et "long Speed" ?

- dans " stepper.setMaxSpeed(10000) " je vois pas d'où vient le "10000" ?

mais pas d'urgence

Bonne soirée

Portrait de demandeinfos

Merci encore, je commence à y voir plus clair.

J'ai compris votre retour pour les 10000 mais je me demandais aussi quelle est l'unité de cette valeur (tr/s, tr/min, pas/s ...) et du coup comment on sait combien on peut mettre mas/min (si ce n'était pas claire, je peux reformuler) ?

Bonne soirée

Portrait de demandeinfos

Bonjour,

Est-ce que ce ne serait pas ça l'histoire des 10 000 ??

dans " stepper.setMaxSpeed(10000) "

10000 en pas/s, donc si mon moteur fait 200 pas, ça correspond à 50 tours/s, or, s'il est configuré en microstepping 1/16, il a dans ce cas comme 3200 pas donc 10000 pas/s correspond dans ce cas à ~3 tours/s ou ~180 tours/min, qui est le maximum fixé dans le programme

dans " stepper.setSpeed(Speed)",

si je remplace par stepper.setSpeed(3200) (si le TB6600 est sur 1/16) par exemple, il fera 1 tour/s soit 60 tour/min dès lors que le programme sera lancé, dans les faits il tournera à cette vitesse.

Si c'était bien ça, je n'ai par contre pas trop d'idées à combien peut tourner au maximum un moteur Nema 17 comme je vais utiliser ?

Merci d'avance pour votre retour,

Bonne journée.

Portrait de demandeinfos

Bonjour,

Je reviens sur le post car depuis j'ai réussi à faire tourner mon moteur avec UNO+TB6600+Nema17, et

avec le programme suivant

#include <AccelStepper.h>

AccelStepper stepper(1, 4, 7);

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

void loop()
{

stepper.setSpeed(100);

stepper.runSpeed();

}

dans l'idée de pouvoir arrête/stopper et de faire varier la vitesse selon l'envie j'ai acquis ces deux matériels :

- https://www.robot-maker.com/shop/composants/90-potentiometre-multitour.h...

- https://www.robot-maker.com/shop/composants/36-interrupteur-miniature.ht...

Pourriez-vous svp me dire si c'était possible de réaliser un branchement, vous m'aviez déjà donné quelques notions mais pour moi c'est nouveau et avec potentiomètre + interrupteur ça devient un peu compliqué ?

Pour info en matériel supplémentaire j'ai des fils breadboards et une breadboard, je ne pourai pas faire de soudure.

Merci d'avance.

Portrait de RichardV

Bonjour

J'arrive un peut tard, mais j'ai réalisé une interface de commande avec un arduino uno et ou 1 moteur pas a pas Nema 17 avec une interface L298N ou 1 moteur pas 28BJ-48 et une interface ULN2003. C'est visible sur le site de Fritzing a l'adresse http://fritzing.org/projects/commande-moteur-pas-a-pas-ver-20

il y a 3 BP de commande

* commande marche arrêts avec 2 possibilités

           - 1 appuie et le moteur tourne et un autre appuie le moteur s' arrête

                                       ou

           - tant que le bouton est appuyé le moteur tourne

* 1 bouton d'inversion du sens de marche

* 1 bouton pour faire tourner le moteur d'un seul pas a la fois

De plus il y une résistance variable pour adapter la vitesse du moteur le tout en 5V (avec possibilité de le mettre en 12V)

J'ai rassemblé tout ces boutons sur un petit circuit imprimé pour le coté pratique

en fichier joint il y a tout ce qu'il faut pour la création de l'ensemble

Portrait de Walter

Je ne comprend pas ta réponse Spy, il me semblait qu'un double pont en H pouvait piloté 2  moteur DC ou 1 moteur pas à pas (2 phases, 4 fils)?

De mémoire je crois que la datasheet du L298, le précise.

Portrait de Walter

Oui, mais peux tu détailler pourquoi cela n'est pas adapté.
Puisque cela est possible d'après le fabriquant, quelles sont les limites et les problèmes potentiels?

Portrait de Walter

Nickel, en plus avec un code d'utilisation près à l'emploi!, sur AliExpress le A4948 semble être à moins d'1€, c'est ça?
Effectivement pourquoi ce priver :)

 

Portrait de Jetfuzz

Hello

je m'étais posé la même question que Walter.
je me suis arrêté sur le couple L297 + L298 lorsque j'ai fait ma commande num, (version coquery).
Effectivement bien jolie ce petit 4948.
je vais peux être faire un upgrade.

Merci pour toutes ces infos

Jetfuzz

Portrait de meuh

Salut Spy,je viens juste  de faire l essai de ton premier soft, encore impressionnant effectivement la vitesse max est impressionnante les accélération et décélération aussi j. Je voulais l essayer avant de"m' immiscer " dans le tutos .Je n ai pas tous compris mais je pense que le deuxième soft va clarifier cela .Encore bravo moi qui fait des essai avec accelstepper depuis un petit moment sur une manip ....

A+

Portrait de demandeinfos

Bonjour,
Je reviens sur mon post car ce montage est toujours d'actualité.
Il est comme ceci : avec l'arduino Uno j'ai réussi à faire tourner avec petit sketch 2 Nema 17 relié à 2 TB6600 (réglés sur 16 pas/3200 pulses et 1.5 A), et le tout est rélié sur une breadbord où il y a un interrupteur et un potentiomètre (pour les 2 Nema 17).
J'ai ajouté sur ce montage un Nema 23 avec son TB6600 (réglé aussi sur 16 pas/3200pulses et 3A). Les fils qui sortent du Nema 23 (bleu, rouge, vert, jaune) sont branchés comme ceci sur le TB660 : Bleu = B-, Rouge = B+, Vert = A-, Jaune = A+. Et pour les fils reliés à la Breadboard, ils sont positionnés comme pour ceux des Nema 17.
L'alimentation du tout est toujours assurée par une alim 400W (input 220V AC 3.62A ; output +12V----33A).
Quand je mets en route, les 2 Nema17 tournent bien mais le Nema23 ne tournent pas et vibre en faisant du bruit ?
Auriez-vous une idée de où je pourrai avoir un problème ?
Merci d'avance pour vos retours.

Portrait de Anonyme

Essaye d'inverser le fil bleu et le fil rouge !

Portrait de demandeinfos

bonsoir

ça n'a rien fait

Portrait de Anonyme

Alors c'est que tu as inversé Pul avec Dir ou autre vérifie bien tous tes branchements. Pour t'en assuré bascule le connecteur du Nema 23 (uniquement celui qui comporte l'alimentation et les quatre fil du moteur sur un autre TN6600 qui fonctionne avec un Nema 17.

Portrait de demandeinfos

Bonjour,

En effet, c'était une inversion, des fils du moteur, ça fonctionne maintenant.

Merci pour vos réponses.

Bonne journée.

Portrait de Anonyme

De rien c'est avec plaisir.