Comment piloter des drivers externes (ex. Nema23) avec un Arduino

Comment piloter des drivers externes (ex. Nema23) avec un Arduino

Dans cet article je vais tenter de vous expliquer comment piloter des drivers externes avec un Arduino.

J'ai tournée il y a déjà un petit moment une vidéo qui s'intitulait "Brancher des NEMA23 sur CNC SHIELD". Comme son titre l'indique dans cette vidéo j'explique comment brancher les Nema23 sur un ensemble arduino + CNC shield, ce qui me permettait de conserver un moteur Nema 17 pour l'axe Z en utilisant un petit driver embarqué à brancher directement sur la CNC shield.

Si c'est ce que vous cherchez, je vous remet le lien vers la vidéo ici : Brancher des NEMA23 sur CNC SHIELD 

1 - MATÉRIEL

Pour cet article, je vais utiliser une carte Arduino Uno avec GRBL 1.1 installé dessus. (pour les version de GRBL supérieur a la 0.9 uniquement, sachant que ça fait un moment que tout le monde utilise la version 1.1 je pense je ne parlerais que de la 1.1) .

Voici le lien vers le GitHub de GRBL 1.1 pour Arduino Uno / Nano : https://github.com/gnea/grbl

Voici un rappel du "pinout" de GRBL 1.1 pour l'Arduino UNO / Nano


















Voici le lien vers le GitHub de GRBL 1.1 pour Arduino Méga : https://github.com/gnea/grbl-Mega/

Voici un rappel du "pinout" de GRBL 1.1 pour l'Arduino Méga

2 - UN PEU DE THEORIE

Avant de commencer à vous expliquer comment brancher vos drivers sur votre Arduino, on va reprendre un peu de théorie (très rapide).

(Si ça ne vous intéresse pas de comprendre comment ça marche, vous pouvez directement sauter à la partie "cablage" )

La plupart des drivers moteurs qu'on trouvent dans le commerce ont besoin de 3 choses pour fonctionner :

2.1) Une alimentation

Pour ça, je ne peux pas vous aider, cela dépend de vos drivers, il faudra regarder dans leur documentation. Pour ma part, ce sont des "DM542Y" et ils sont alimentés en 36V entre les bornes intitulé V+ et V-.

2.2) Un signal de "direction"

C'est le signal appelé "Direction" sur les pinout ci-dessus. Il a 2 états, ON ou OFF (5V ou 0V) qui correspondent à un sens de rotation.
C'est le signal qui va 
indiquer au driver dans quel sens faire tourner son moteur, tout simplement. 

2.2) Un signal de "step"

Vous l'aurez deviné c'est le signal appelé "Step" sur les pinout ci-dessus.
C'est le signal qui va indiquer au driver de faire avancer le moteur de 1 pas, en prenant en compte le "micro-stepping" configuré sur le driver (via une série de petit cavalier ou de petits interrupteurs ON/OFF comme sur mon driver.)

Si vous avez configuré 2000 pas par tour sur le driver (ou micro-stepping de 1/10 sur un moteur 200 pas/tour) chaque impulsion de ce signal fera faire 1/10 de pas au moteur. Il faudra donc que l'Arduino envois 2000 impulsions sur une de ses sorties pour faire tourner 1 moteur de 1 tour complet.
Et oui, c'est l'Arduino qui calcul/génère tous les pas moteurs, ce n'est pas le driver. Le driver lui se contente de retranscrire chaque impulsions 5V que l'Arduino génère a un niveau de puissance plus élevé (24V dans mon cas).

Petite aparté : Vous comprenez là l'intérêt de ne pas augmenter inutilement le nombre de micro-step si la précision est largement suffisante à un niveau de micro-step inférieur.

Si vous mettez un micro-stepping trop grand, votre arduino devra envoyer des dizaines de milliers d'impulsions pour faire faire 1 tour a 1 moteur, imaginez quand il doit faire bouger 3 moteurs à la fois ! On dépasse rapidement les centaines de milliers d'impulsion à calculer puis générer…

Exemple, une machine dispose de :
- 3 moteurs 200 pas/tour
- Les drivers moteurs réglés à 256 micro-steps
- Une vis trapézoïdales T8 classique, une avance de 8mm par tour

Pour chaque tour d'un moteur, l'Arduino devra générer 200x256=51.200 impulsions. Valeur qu'on multiplie par 3 car nous avons 3 moteurs, donc 3x51200=153.600 impulsion pour faire bouger chaque axes de 8mm en même temps.

Maintenant imaginons que vous voulez effectuer un déplacement de 20mm et remonter l'axe Z de 20mm en même temps à une vitesse de 1150mm/min sur chaque axe. Un tel déplacement prend environ 1 seconde ( (20/1150)*60 ) et demande a l'Arduino de générer 153.600*2,4=368.640.

368.640 pas par seconde, soit 368kHz, c'est énorme. Il me semble que GRBL sur un Arduino Uno peut difficilement dépasser les 100kHz.

Niveau précision ça vous fait 8/51.200=0,00015625mm ! Pour comparaison, l'épaisseur d'un cheveux ça doit être dans les 0.05mm... pour ma part, je règle maintenant tous mes micro-stepping pour avoir une précision de 0.01mm, c'est largement suffisant (voir encore trop) pour des machines amateur.

Entre les vibrations, le manque de rigidité, le faux-rond de nos défonceuses et la qualité souvent douteuse de nos fraises aliexpress c'est une précision déjà pratiquement impossible à atteindre. 

Conclusion de l'aparté : Réglez votre micro-stepping pour avoir une précision juste suffisante, n'exagérez pas ça ne vous apportera que des problèmes et ça bridera votre machine inutilement.


2 - CABLAGE

Vous l'aurez compris je pense, pour câbler les drivers moteurs externes, il faudra simplement relier les signaux Step et Direction de l'arduino aux entrées Step et Direction des drivers.

Sur certains drivers comme les miens, l'appellation "STEP" peut être remplacée par l'appellation "PULSE" ou "PU" et l'appellation "DIRECTION" peut devenir "DIR" ou "DR".

Si vous prêtez attention de plus près au pinout de l'Arduino, il est mentionné une seule pin pour step et une seule pin pour direction sur chaque axe et si vous regardez votre driver, il attend un "step +" et un "step -" ainsi qu'un "direction +" et un "direction -".

C'est tout simple, le "moins" correspond à la masse du signal, vous pouvez donc connecter tous les "moins" de chaque signaux et de chaque axes ensembles au GND de l'Arduino.

Et puis … c'est tout !

Vous n'avez plus qu'à connecter vos moteurs à vos drivers en connectant les fils A+ A- B+ B- de vos moteurs aux bornes correspondantes sur le driver. Là, pareil, je ne peux pas vraiment vous aider, il faudra regarder la documentation de vos moteurs.

Pour ma part, ce sont des Nema23 StepperOnline, voici leur câblage si vous avez les mêmes :

A+
A-
B+
B-
Noir
Vert
Rouge
Bleu


Voila, dites moi si cet article vous a aidé, sinon on se retrouve sur le forum pour répondre a vos questions !  A+

Commentaires

03/01/2022

Excellent article ! J'ai cependant un toute petite question : dans le kit StepperOnline avec les nema23, les drivers et l'alimentation fournit dans l'article on trouve une alimentation de 36V, or sur le drivers il marque une alimentation de 5v - 24V. Est-ce gênant ? Merci encore pour ce travail formidable

03/01/2022

Hello, c'est le signal de sortie qui est entre 5 et 24V :)

04/01/2022

Ah autant pour moi... Merci pour ta réponse rapide

07/01/2022

Bonjour, c'est encore moi désolé :D Est-il possible de connecter 4 nema 23 sur l'alimentation proposée dans le kit fournit dans l'article ( 350W Power Supply S-350-36 ) ? Je n'arrive pas bien à comprendre ce qui détermine le nombre de driver connectable sur l'alim. Car je ne vois que 3 broches de sortie derrière ( 3 V+ et 3 V- ), est-ce que cela signifie que la limite est de 3 ?. Bien cordialement, Paul

08/05/2022

The total motor current and the current capacity of the power supply determine this. So, if you are running 4 Nema23 steppers at 2.5A each then you need 10A. The 36V 350W power supply puts out just under that so you might run into issues. If you reduce the motor current to 2A each then that would keep you under the rating of the power supply.T

01/03/2022

Bonjour Topsie, Donc a priori, si l'on utilise des drivers type DM, on as donc pas besoin de carte cnc shield ou de carte ramps ? si je comprends bien on connecte le puls/dir du driver de chaque moteur au port correspondant de la carte uno/mega ? est-ce que si on installe une carte cnc shield ou ramps, on peut utiliser les connecteurs pour les moteurs ? sa fonctionnerai seulement avec les petits drivers embarqués et donc probleme de doublon comme tu l'expliquais dans les videos.. en fait j'aurais aimé garder une connectique un peu plus solide, et propre d'aspect, je me dis que brancher plein de petits connecteur individuels dans les ports de l'arduino sa fait un peu "bordel" et sa me parait "fragile" c'est pas tres safe...

07/03/2022

topsie, aurais tu la gentillesse de me (nous ) communiquer les parametres grbl de la topscnc heavy? un rond me donne une sorte de spirale ovoide (spirael à une seule boucle (ouf...)) avec un décalage du point d'arrivée en x et en y par rapport au point de départ...chamenerve.....

Poster un commentaire