Couverture

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

✍️ Topsie 📅 01 janvier 2022 👀 13222 vues

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

J'ai tourné 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 la remets ici.

1 - MATÉRIEL

Pour cet article, je vais utiliser une carte Arduino Uno avec GRBL 1.1 installé dessus.

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.

ArduinoUno GRBL pinout
ArduinoUno GRBL pinout
ArduinoNano GRBL pinout
ArduinoNano GRBL pinout

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.

ArduinoMega GRBL Pinout
ArduinoMega GRBL Pinout

2 - UN PEU DE THÉORIE

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 "câblage".)

La plupart des drivers moteurs qu'on trouve 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ées V+ et V-.

2.2) Un signal de "direction"

C'est le signal appelé "Direction" sur les pinouts 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.3) Un signal de "step"

Vous l'aurez deviné, c'est le signal appelé "Step" sur les pinouts 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 petits cavaliers 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 envoie 2000 impulsions sur une de ses sorties pour faire tourner un moteur de 1 tour complet.
Et oui, c'est l'Arduino qui calcule/génère tous les pas moteurs, ce n'est pas le driver. Le driver, lui, se contente de retranscrire chaque impulsion 5V que l'Arduino génère à 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-steps si la précision est largement suffisante à un niveau de micro-stepping 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 à un moteur, imaginez quand il doit faire bouger 3 moteurs à la fois ! On dépasse rapidement les centaines de milliers d'impulsions à 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ïdale 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 3x51.200=153.600 impulsions pour faire bouger chaque axe 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 à 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 cheveu ç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 amateurs.
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 signal et de chaque axe ensemble 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

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