J'aurai besoin de vos conseils pour mon projet.
Actuellement j'ai un banc d'essai composé de 5 modules mécaniques identiques en ligne, actionnés par 2 types de moteurs dédiés (NEMA 17HS19-2004S et NEMA 23 17HS19-2004S, 2 actions différentes, et 2 drivers TB6600 - 9 à 42 Vcc et 3,5 A) via 2 axes de 75mm de long et contrôlés par une carte ARDUINO mega et un shield 'maison'. Pour des raisons de maintenance mécanique, j'aimerai revoir mon banc en séparant mes 5 modules mécaniques pour les rendre interchangeables, fonctionnels de manière identiques et éventuellement équipés de moteurs plus petits. Pour cà, je pensais créer une station de contrôle qui me permettrait de connecter 1, 2, 3, 4 ,5 modules (mécanique + moteurs) en parallèle en somme.
D'où ma question, combien de moteurs maxi peut-on piloter avec une carte arduino, driver TB6600 ? Merci à vous !
Je viens de préparer les quelques composants que j'ai à disposition et de connecter 6 moteurs derrière le TB6600 et ils réagissent de manière synchro pour la mise en origine. Est-ce que ce fonctionnement reste 'propre' ?
Merci
Rappel : Nema 17 ou 23 ne caractérisent pas les moteurs.
Nema 17 et Nema 23 caractérisent les dimentions géométriques de la semelle de fixation.
Nema s’applique aussi a des prises electriques. C’est le nom d’une norme US comme Afnor en France.
Ce qui caractérise un moteur c’est la reference qui est marquée dessus.
Deux moteur pas a pas Nema 17 peuvent avoir un courant nominal totalement différent.
Tout depend si tu pilote les moteurs directement par le microcontroleur ou si tu utilses des circuit d’interfacage qui dechargent le micro des taches subalternes.
Cette deuxième solution est, a mon humble avis, préférable et ne demande qu’un nombre minimal de signaux de commande.
Si tu utilises le moteur de recherche du forum (zone de saisie en haut et a droite) et que tu y écris ”moteur pas a pas” tu obtiendra plusieurs dizaines de réponse.
Tu consultes et tu reviens poser des questions moins générales que celle posée où il y a tellement de réponses possibles qu’il est difficile de repondre.
Evidement les alims sont séparés et les drivers aussi (DM860/DM332)
Pour ma part j'utilise des PAP par exemple sur le robot de cave :
3 Nema34 6Nm alimenté en 80 Volts
2 nema17 2.1A 65Ncm alimenté en 12V
La seule contrainte avec l'arduino c'est que les moteurs fonctionne l'un après l'autre, ceci dit l'arduino est un simple microcontrôleur, certaines solutions peuvent simuler du CNC mais pour ma part je ne me tordrais pas le cerveau avec arduino pour cela, j'utilise Mach3 + Wxhc ... ou peut être une- Arduino mais Potenta ... pas les même budgets.
Le nombre physique est facile à calculer, il faut 3 signaux par contrôleur DIR, STEP et ENABLE.
Le problème est pourras-tu contrôler "proprement" 5 moteurs pas à pas.
Est ce que les mouvements de ces MPAP sont compliqués, c'est quel genre. Seraient ils commandables par du G-Code?
Alors sur une arduino Mega et sans utiliser les "Enable" qui ne sont pas indispensables ca fait un paquet de moteur
Pour les G-code personnellement et avec tous le respect pour tes connaissances dans le domaine largement supérieures aux miennes @jpbbricole je trouve que la solution G-Code c'est plus lourd a mettre en oeuvre.
J'utilise les G-Codes uniquement avec Mach3 pour la CNC ,(un de ces jours je regarderai GRBL) mais pour les petits projets je pense qu'une carte arduino dans un boitier avec quelques boutons et des joysticks a l'avantage d'être opérationnelle en quelque secondes.
Du peu d'information que j'ai eu, le couple Grbl -Arduinon me semble assez lent en exécution.
Pas d'accord du tout, on peut faire fonctionner les moteurs en même temps. C'est une limitation de Stepper, pas d'Arduino. Mais on n'est pas obligé d'utiliser Stepper. Voici un exemple dans lequel 6 moteurs sont commandés indépendamment:
ENcore que la pluspart du temps un seul signal ENABLE est utilisé pour tut les moteurs, ce qui ramène à 2 broches par moteurs. Et dans certains cas, on peut regrouper plusieurs DIR ensembles.
La limitation ne vient en général pas de la carte, mais de la bibliothèque utilisée et des performances attendues.
Ave Stepper → 1 seul moteur en même temps
Avec AccelStepper → 2000 pas par seconde je crois; soit 2 moteurs qui tournent à maxi 1000pas/s, 10 moteurs qui tourne à maxi 200pas/s...
Avec QuickStep → (limité par défaut à 8 moteurs) 110'000pas/s; soit 8 moteurs qui tournent à maxi 18000pas/s...
note; 16000pas/s c'est ce qu'il faut pour fait tourner un moteur hybride 200pas/tr en mode 16 µpas à 5tr/s.
En gros si on double le nombre de moteurs, on doit diminuer les vitesses de rotation par 2.
Le deuxième problème est le programme lui même. Pus on a de moteurs à gérer, plus le programme est en principe gros et cela peut limiter le nombre.
@vileroi
Merci pour ces précisions.
Je fais pas mal de chose avec l'arduino et comme pour les machines numériques j'utilise autre chose, je n'ai pas réellement approfondi le sujet de la gestion simultané des moteurs.
La bibliothèque accelStepper donne des mouvements fluides mais je ne sais pas lire les capteurs pendant l'exécution sauf une fin de course qui doit être souple car le moteur respecte la décélération même sur un arrêt immédiat commandé par une interruption.
Autant dire que la bibliothèque QuickStep m'interesse fortement
C'est pas faux, mais écrire un programme spécifique pour animer des moteurs pas à pas manque de souplesse.
L'idée de GRBL est que, sur un Mega, on a 3 Serial, sur chacun on met un UNO ou un Nano avec un shield CNC. On peut, ainsi, commander 9 MPAP.
A savoir que sur chaque UNO ou Nano, on peut faire fonctionner les 3 moteurs simultanément ou 3 l'un après l'autre ou un mix des deux.
Il est très facile de créer du G-code sur le Mega et l'envoyer sur le proc concerné.
Ainsi on peut directement travailler en millimètres, on ne s'ocupe plus de l'accélération et autres paramètres qui sont gérés par GRBL.
Comme chaque proc gère 3 axes, X, Y et Z on aurait, ainsi, 9 axes de A à I qui seraient 1X, 1Y, 1Z, 2X, 2Y, 2Z .... le tout passé dans une conversion pour être envoyé au bon proc et sur le bon axe.
decidement @jpbbricole toujours plus loin, toujours plus fort !!!!. avec plusieurs carte on rend l'arduino multitache
Je pense aussi que plus on rend un montage complexe, plus les risques de plantages sont importants. Je ne m'amuserai pas sur ma grosse fraiseuse de faire un montage comme ca, car quand tu as un tourteau de 100 qui tourne a 2500 tours en usinage, tu n'as pas intérêt a avoir le moindre aléa sinon ca va faire des dégâts.
Même faire tourner plusieurs moteurs en même temps je suis pas fan, autant que faire se peut, si je peux séquencer je le fais. Sur mon robot de cave je pourrai faire rentrer le translateur ou les mains tout en commençant a reculer, mais si un élément se bloque le robot qui pèse 70 kgs environ peu te nettoyer une rangée de bouteille en quelque secondes
J'aime bien l'arduino et tout ce que l'on peut faire avec mais je n'ai pas une confiance suffisante pour lui allouer des taches complexes ou il y a un risque sécuritaire.
Dans les grandes lignes je suis d'accord avec toi, a moins de vouloir une nouvelle fraiseuse, je te déconseille d'y apposer ce type de montage . Mais pour ce qui est de faire tourner plusieurs MPAP simultanément avec un Arduino "sous GRBL", ça a largement fait ses preuves.
Si tu regarde une HBM 45 c'est deja une belle machine. Je la commande avec un arduino et des PAP Nema 34 mais uniquement dans le cadre de la motorisation des axes, c'est confortable, ca tient le 100 eme. Pour une utilisation linéaire, axe par axe avec des joysticks c'est top.
si quelqu'un a un exemple de code pour faire tourner les moteurs simultanement je suis preneur pour tester.
Arduino n'étant pas multitache d'après ce que je comprends je pense qu'il s'agit d'intercaler les signaux envoyer vers chaque moteur.
Quelle bibliothèque utiliser pour cela? j'ai bien vu quick step mais ce n'est pas une bibliotheque de grande diffusion donc difficile de trouver des exemples concrets
merci @J-M-L pour ces informations.
En fait habituellement je mets toutes les instructions dans une procédure, si bien que je dois attendre que celle ci soit exécutée en totalité pour revenir dans le LOOP. D'après ce que je comprends, en lancant le stepperX.run(); dans le LOOP, je n'appelle pas de procédure le moteur se lance, et si j'en démarre un second il envoie un pas a chaque moteur a tout de role ...interessant
De la même façon je pense que cette solution permet de lire des capteurs pendant l'exécution... chose que je n'arrivais pas a faire.
Attention, le stepperX.run(); ne fait pas des miracles, cette méthode interdit tout delay() ou autres ralentissements dans loop(), sinon tes MPAP, d'autant plus 5 MPAP, vont tourner irrégulièrement.
@jpbbricole je ne vais jamais faire tourner 5 Moteurs en même temps, enfin pas surmes montages actuels ce serait ingérable et trop dangereux.
Je n'utilise jamais les delay() dans la gestion des moteurs ni dans le LOOP sauf pour des tests ponctuels.
L'utilisation simultané de plusieurs moteurs, c'est par exemple sur une fraiseuse en mode déplacement, de pouvoir ramener la table a son init en faisant tourner le X et le Y simultanément, ou sur le robot de cave de pouvoir se déplacer une fois les "mains" rentrées et qu'il n'y a plus de risque d'accrochage, en manœuvrant le translateur et le déplacement linéaire en même temps.
J'utilise énormément Arduino pour la gestion des moteurs, jusque la je préférais séquencer pour la sécurité, mais sur certaines actions cela peut être intéressant de faire tourner deux moteurs.
Ne sachant pas lire les capteurs pendant l'exécution d'une procédure accelStepper, pour toutes mes machines j'utilise des POM (position d'origine) et je sauvegarde les positions dans l'eeprom ou sur carte SD après chaque déplacement. L'avantage c'est que ca oblige a beaucoup de rigueur dans la gestion des accélérations, ou du calcul des positions mais ca reste dangereux en cas d'incident...heureurement j'ai toujours un champignon a porté de main