ARDUINO CNC- exemples d’applications

plutôt que de longs discours , ci dessous quelques vidéos YouTube de cas concrets de  CNC DIY ou commerciales à base d’arduino ou microcontroleurs equivalents.

 Numérisation d’un tour JEULIN MT2:

Numérisation d’une Fraiseuse MF70 PROXXON

Graveuse laser  (avec Arduino Nano):

Micro fraiseuse   (avec Arduino Nano):

Numérisation d’une autre Fraiseuse MF70 PROXXON

ARDUINO CNC-commande de moteur Pas a Pas

construire sa propre CNC à base d’Arduino nécessite tout d’abord la compréhension de quelques notions autour de la commande de moteurs pas a pas.

Dans le cadre de ce tutoriel,  nous allons nous intéresser à la commande d’un moteur pas a pas NEMA 17 par un driver POLOLU A4988 associé a une carte ARDUINO UNO.

Principe de commande d’une CNC ARDUINO:

pour piloter un moteur pas a pas il faut utiliser un systeme de commande électronique et des logiciels spécifique dont nous allons voir la réalisation et l’utilisation dans cette rubrique. l’élément de base de la chaine sera un controleur ARDUINO UNO qui vient s’integrer dans la chaine de commande schématisée ci dessous (pour la partie GCODE voir la rubrique CAO-FAO du site)

les moteur Pas a Pas NEMA 17:

un moteur pas  a pas est un moteur capable de transformer une impulsion électrique en un mouvement angulaire . dit autrement , on peut le faire tourner d’une fraction de tour précise , cette fraction correspondant a un certain nombre de “pas” dont il est mécaniquement et électriquement constitué.

pour plus d’info voir le lien wikipedia : moteurs pas a pas.

la catégorie des moteurs pas à pas est vaste et comprends plusieurs type de moteurs. les moteurs pas a pas NEMA , sont des moteurs au standard NEMA. c’est un standard Américain qui défini l’interface de fixation des moteurs pas a pas.

dans le cas du  NEMA 17 , cela désigne un moteur pas à pas de 1,7 pouces (4,32 cm) de côté pour la plaque de face et dont voici les dimensions de l’interface standard:

une fois cela défini , il faut comprendre qu’ il n’y a pas un seul moteur pas a pas NEMA 17 mais toute une gamme avec différents constructeurs . les variantes sont caractérisées principalement par:

  • la longueur L du moteur ( qui dépends de la puissance et du couple du moteur)
  • les caractéristiques électrique du moteur avec en particulier:
    • la tension d’alimentation ( en volts)
    • le nombre de pas  (en général 200 ou 400)
    • le couple de maintient ( kg/cm ou N/cm)
    • l’intensité électrique admissible par bobine ( en Amperes)
    • l’inductance par bobine ( unité en mH = millihenry)

Avant de choisir un Moteur pas a pas , il faut donc fixer les caractéristiques a atteindre ( vitesse maxi , couple , etc..), puis en fonction de ces éléments voir quel NEMA 17 corresponds au cahier des charges , pour cela il faudra consulter les “data sheets” fournies par les vendeurs ou constructeurs retenus et si possible trouver les courbes couple/vitesse pour les moteurs envisagés.

dernier point a vérifier , dans la phase de choix de votre NEMA 17 , privilégier les moteurs bipolaires a 4 fils plutôt que les moteur unipolaires a 6 fils. en effet les drivers pololu A4988 ne sont prévus que pour connecter des moteurs 4 fils.

les Drivers POLOLU A4988:

ce sont des petits circuits imprimés de quels mm de cotés et dont la fonction est de convertir les signaux electriques Step et Dir reçus d’un circuit de commande en impulsion électriques envoyés sur les 4 fils du moteur pas a pas pour le faire tourner du nombre d’impulsion Step et dans le sens du signal Dir reçu. le pololu A4988 est capable de gérer du micro pas ce qui veut dire qu’il est capable d’utiliser les caractéristiques intrinsèques des Pas a Pas pour augmenter “électriquement” le nombre de pas réel du moteur . cela permet d’augmenter la finesse de l’angle recherché.

brochage et branchement d’un Pololu A4988:

Data sheet et données techniques Pololu A4988:

https://www.pololu.com/product/1182

lien WIKI en francais:

http://wiki.mchobby.be/index.php?title=A4988

NOTA: la tension d’alimentation a appliquer entre VMOT et GND des pololu dépends du moteur Pas a Pas choisi => se reporter a la date sheet du PaP choisi.

ARDUINO CNC- choix du moteur et de la vis

le moteur pas a pas est un élément important de la chaine de transmission, il ne doit pas être choisi au hasard. les principaux paramètres a prendre en compte sont :

– couple du moteur

-vitesse de rotation

– précision de déplacement recherchée

le couple nécessaire est déterminé par la mécaniqueet les masses à mettre en mouvement mais surtout par les paramètres d’usinage attendus . ces parametres dépendent  du matériaux a usiner et du type d’outil utilisé ( acier rapide , carbure) . les paramètres resultants sont : la vitesse de rotation de broche mais aussi  la vitesse d’avance de la pièce

la vitesse d’avance est donc au final un des paramètres les plus important. celle ci se calcule a partir de 2 autres parametres:

– la vitesse de rotation du moteur pas a pas

– le pas de la vis d’avance qui pousse l’axe concerné

calcul de la vitesse de rotation maxi possible d’un moteur pas a pas:

le courant dans une bobine de moteur pas a pas est proportionnel au temps ou le voltage a été appliqué et inversement proportionnel a l’inductance. soit I l’intensité , L l’inductance et T le nombre de secondes pour un pas , on a :

1°) I= V*T/L d’ou T= I*L/V

pour un pas moteur le cas le pire est quand il doit passer de zéro a Imax puis changer de sens , le courant doit partir de zero a Imax puis de Imax à -Imax dans ce cas l’intensité totale qui traverse la bobine est :

2°) I= 2*Imax 

et en integrant I dans  1°)

  1°) T= (L*Imax*2)/V

le nombre de révolutions par secondes se calcule de la façon suivant :

Rev/sec = (Rev/pas) * (pas/sec) = [1/(pas/Rev)] *[1/(sec/pas)]=[1/(pas/Rev)] *[1/T]

soit d’apres 1°)

Rev/sec =[1/(pas/Rev)] *[V/(L*Imax*2)]

en bas de page, quelques exemples de calculs resultants sur des moteurs du commerce

si a un moteur vous associez une vis de pas P donnée , pour calculer l’avance en milimetres par minute , il suffit de multiplier la vitesse max par le pas de la vis pour obtenir la vitesse lineaire maxi resultante.

ces calculs vous permettrons de documenter les parametres $4 et $5 du GRBL [ voir la section 3°) “les programmes “]

calcul de la précision des déplacements

le calcul de la précision de positionnement et de déplacement obtenu est extrement simple , il dépends du nombre de pas du moteur et du pas de la vis a bille.

si “Pm” est le nombre de pas du moteur et ” Pv” le pas de la vis de transmission, la precision de déplacement se calcule comme suit :

precision = Pv/Pm

par exemple en prenant les moteurs pas a pas du projet (400 pas) que je vais associer a une vis M6 au pas de 1mm , on obtient une precision de déplacement de : 1/400 = 0,0025 mm soit environ 3 microns . pour ne pas ruiner cette précision , il faudra bien entendu veiller avec soin a minimiser le jeu entre la vis et l’ecrou de transmission .

Tableau d’exemples de synthese

ARDUINO CNC-branchement ARDUINO UNO

le role de l’arduino dans la chaine de commande est de recevoir les instructions GCODE et de transformer les consignes de mouvements en impulsion électriques sur les sorties Step et Dir des axes correspondants. le module ARDUINO peut  également, via les sorties correspondantes,  commander la mise en rotation et l’arrêt de broche d’usinage ainsi que  la mise en route et l’arrêt de l’arrosage de coupe . via un certain nombre d’entrées, il est egalement capable de gérer les limites d’axes , l’arret d’urgence , le demarrage cycle et la mise en arret sur coupure d’alimentation electrique.

pour gerer tout cela il faudra installer dans la memoire de l’arduino un programme appelé GRBL (voir vignette spécifique ).

ci dessous les brochages d’un ARDUINO UNO correspondant a toutes ces fonctions.

il y a 2 versions de branchement dépendant de la version de GRBL installée.

Version GRBL 0.9 et anterieures:

dans ces versions, la gestion de vitesse broche ou puissance laser n’etait pas implémentée ni le retour de sonde de position (Z probe).

Version GRBL 1.1 et Ultérieures:

depuis GRBL 1.1 , la gestion de vitesse broche ou puissance laser est implémentée dans GRBL ainsi que la gestion de la lubrification brouillard d’huile et la sonde de Z

Cablage POLOLU

avec 3 modules POLOLU A4988 pour les axes X , Y et Z , cela donne le schéma de cablage suivant:

et pour finir avec les 3 moteurs d’axes , l’alimentation des pololu  et un condensateur de filtrage de 100 uF  aux bornes de l’alimentation,  cela donne:

ATTENTION : l’ordre de branchement des fils de chaque  moteur pas a pas sur son driver pololu dépendra des moteurs achetés et du sens de rotation de ceux ci aux premiers essais. en fonction des essais il vous faudra peut etre echanger les fils axe par axe. le schéma ci dessous donne de bons résultats dans la majorité des cas de NEMA 17 avec fils blanc/brun/orange/vert:

ARDUINO CNC-GRBL

une fois la partie hard de la commande construite , pour faire fonctionner l’ARDUINO UNO en mode CNC il va falloir y  installer le programme GRBL.

GRBL est un programme  libre, open-source,  écrit en C et  optimisé pour tourner sur un Arduino Uno.

voici le lien vers le wiki Github qui permet d’acceder a toutes les infos et ressources concernant GRBL . le site GitHub est malheureusement en Anglais.

https://github.com/gnea/grbl/wiki

les instruction ci dessous permettrons, je l’espere,  a ceux qui ne parlent pas anglais de faire les operations de bases pour charger et  installer GRBL sur leur ARDUINO.

telechargemnt de GRBL:

  • rendez vous sur la page GitHub de GRBL :https://github.com/grbl/grbl
  • une fois sur la page , cliquez sur la case verte “clone or download”

  • dans la fenêtre “Clone with HTTPS” qui apparait, cliquez sur “Download ZIP”. votre navigateur va ensuite télécharger un fichier ZIP nommé “grbl-master.zip”  et le mettre dans le répertoire de téléchargement du navigateur.

  • ouvrez le répertoire de téléchargement  et décompresser le fichier ZIP pour obtenir le répertoire avec les fichiers GRBL a l’intérieur.  la version décompressée servira  dans la suite de l’installation (voir plus bas)

Installation de la librairie GRBL:

  • ouvrez l’interface ARDUINO

IMPORTANT: assurez vous d’avoir la dernière version de l’IDE compatible avec la dernière version de GRBL. dans le doute faites une mise a jour ( voir plus bas problème potentiel sur l’installation de la librairie)

  • dans le menu du haut , sélectionner “sketch”, puis dans le menu deroulant”Include Library” puis dans le menu déroulant suivant “Add ZIP library”

aller dans le répertoire temporaire du navigateur  ou vous avez mis le fichier ZIP et la version décompressée. ouvrir le répertoire “grbl-master” , puis ensuite le répertoire “grbl-master” suivant ( le soft de décompression crée 2 répertoires grbl-master l’un dans l’autre). une fois le 2° répertoire ouvert vous devriez voir 3 sous répertoires (build/doc/grbl).  sélectionnez le répertoire “grbl” puis cliquez sur OPEN.

la librairie GRBL est maintenant installée sur l’IDE ARDUINO.

Téléversement  de L’ARDUINO

nous allons maintenant installer le programme GRBL sur l’arduino

  • connectez votre ARDUINO UNO au PC via le cable USB puis dans l’interface ARDUINO , menu du haut aller sur “file” puis “open”:

  • allez dans le répertoire de téléchargement du navigateur puis dans le répertoire “grbl-master” , puis dans “grbl” puis dans “exemples” puis dans “grblUpload” et selectionez le fichier “grblUpload.ino” et cliquez sur “open”

  • le fichier GRBL est maintenant chargé dans l’IDE ARDUINO

il ne reste plus qu’a le téléverser dans l’arduino , pour cela cliquez sur la fleche de commande rapide :

Voila , GRBL est maintenant installé sur votre microcontroleur ARDUINO qui est pret a fonctionner pour piloter votre CNC DIY.

reste a configurer les parametres GRBL dans votre logiciel de pilotage de la CNC c’est l’objet de la vignette suivante.

pour compléter ce tuto , voici une video Youtube qui résume toutes les Opérations précédentes ( a visionner en plein écran de préférence):

ARDUINO CNC-parametrage de GRBL

une fois GRBL installé sur le module ARDUINO UNO , l’opération suivante va consister au paramétrage de GRBL. ce paramétrage ne se fait pas directement dans GRBL via l’IDE ARDUINO mais via le logiciel de commande de la CNC qui est en communication avec la carte ARDUINO et GRBL. c’est ce logiciel qui va permettre d’aller modifier les paramètres dans GRBL .

plusieurs soft de commande open source (libre) comptatibles avec GRBL sont disponibles, voici une liste des plus connus avec le lien vers le site qui permet de les telecharger:

Universal GODE Sender: 

https://github.com/winder/Universal-G-Code-Sender

GRBL Controller:

https://github.com/zapmaker/GrblHoming

CANDLE:

https://github.com/Denvi/Candle

 

pour plus d’info sur l’utilisation de ces software , voir la rubrique CAO-FAO-XAO du site de e-learning. GRBL Controller etant tombé en désuétude , la rubrique ne développe que  l’utilisation de CANDLE et Universal GCODE Sender.

voici par exemple a quoi ressemble Grbl Controller 3.6.1 une fois démarré sur le PC qui est connecté a l’ARDUINO.

Une fois le soft ouvert, pour etablir la connexion avec la carte ARDUINO,  il faut aller dans la partie en haut a gauche , sélectionner le port de connexion ( le port COM3 dans le cas présent). sélectionner la vitesse de connexion (115200 si pas affichée par défaut) puis cliquer sur “Ouvrir”.

apres quelques secondes , le bouton “Ouvrir” se transforme en “Fermer/RAZ” sur fond rouge, signe que la connexion est établie.

et du texte apparait dans la fenetre en bas a gauche. la zone de texte affiche les paramètres de GRBL tels qu’ils viennent d’être récupérés de l’ARDUINO .

si tout fonctionne correctement , quand vous cliquez sur une des flèches de la zone commande d’axe (zone a droite en position basse), le moteur pas a pas de l’axe correspondant tourne et dans la zone d’affichage de coordonnées les chiffres doivent évoluer en fonction du déplacement.

Changer un parametre GRBL

le détail des paramètres de configuration de GRBL est expliqué dans le lien suivant

https://github.com/grbl/grbl/wiki/Configuring-Grbl

ce site étant en anglais , voici ci dessous une synthese en français pour vous aider a la manipulation :

liste des parametres GRBLV0.9:

$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=6 (dir port invert mask:00000110)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.020 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=1 (homing dir invert mask:00000001)
$24=50.000 (homing feed, mm/min)
$25=635.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=314.961 (x, step/mm)
$101=314.961 (y, step/mm)
$102=314.961 (z, step/mm)
$110=635.000 (x max rate, mm/min)
$111=635.000 (y max rate, mm/min)
$112=635.000 (z max rate, mm/min)
$120=50.000 (x accel, mm/sec^2)
$121=50.000 (y accel, mm/sec^2)
$122=50.000 (z accel, mm/sec^2)
$130=225.000 (x max travel, mm)
$131=125.000 (y max travel, mm)
$132=170.000 (z max travel, mm

pour changer un parametre GRBL , il faut aller dans la petite fenetre “commande” de votre soft de commande de la CNC ( en general  la fenetre qui permet d’envoyer des instruction GCODE  en ligne a ligne).

et ensuite il suffit de taper une commande du type

$x= valeur

“x “est le numero de paramètre correspondant de la liste de parametres GRBL , et “valeur” la valeur que l’on souhaite mettre comme donnée dans le paramètre . par exemple si dans les paramètres on a:

$100=314.961

et que l’on souhaite mettre 240 a la place de 314.961

il faut taper : $100= 240 puis faire “Entrée” avec la touche correspondante.

les parametres GRBL importants

les parametres principaux de GRBL sont les suivants

  • le parametre $13 permettent de configurer les unités de déplacement. $13=0 pour les mm et $13=1 pour les pouces

 

  • $100-$101-$102
$100=314.961 (x, step/mm) nombre de pas par mm sur X
$101=314.961 (y, step/mm) nombre de pas par mm sur Y
$102=314.961 (z, step/mm) nombre de pas par mm sur Z

il déterminent le nombre de pas pour un déplacement d’un mm sur chaque axe. ces paramètres dépendent du nombre de pas du moteur et du pas de la vis .

il faudra veiller a les configurer de tel façon que les déplacements réels constatés soient  conformes a la consigne GCODE de déplacement.

par exemple avec un NEMA 17 de 200 pas et une vis trapezoidale au pas de 5mm sur l’axe X , cela veut dire qu’un tour de moteur fait avancer l’axe de 5 mm. donc que 200 pas correspondent a 5 mm soit 200/5= 40 pas par mm

dans ce cas il faudra donc saisir : $100=40

  • les parametres $110-$111-$112 permettent de configurer les vitesses d’avance max sur les 3 axes

 

  • les parametres $120-$121-$122 permettent de configurer les vitesses d’accélération sur les 3 axes

 

  • les parametres $130-$131-$132 permettent de configurer les courses maxi  sur les 3 axes

 

  • le parametre $3 permettent de configurer le sens de rotation des moteurs d’axes. c’est ce parametre qu’il faut toucher si un des axes ne se déplace pas dans le bon sens.

le tableau suivant permet de connaitre les valeurs a saisir pour $3:

      valeur            Masque      Invert X    Invert Y   Invert Z
0 00000000 N N N
1 00000001 Y N N
2 00000010 N Y N
3 00000011 Y Y N
4 00000100 N N Y
5 00000101 Y N Y
6 00000110 N Y Y
7 00000111 Y Y Y

 

ARDUINO CNC-Shield CNC

plutot que de réaliser soi meme le circuit complet avec les pololu , il existe des cartes toutes faites appelés CNC SHIELD que l’on trouve en vente sur internet pour quelques euros. ils sont equipés des condensateurs de filtration et  suivant les cas il sont vendus seul ou avec les pololu A4988 .

ATTENTION: les Shield CNC ont 3 ou 4 supports POLOLU suivant les versions. mais dans la version 4 supports , ce ne sont pas des shield 4 axes. le 4° support ( rouge sur les photos ) permet de faire un axe à 2 moteurs Pas a Pas synchronisés. des cavaliers présents sur la carte permettent de choisir avec quel axe est synchronisé le 4° POLOLU.

on trouve même des Kits ARDUINO/SHIELD/POLOLU complets.

 

une fois le shield équipé de ses POLOLU et monté sur la carte ARDUINO cela donne un ensemble  dont voici l’aspect :

une fois tout cela mis dans un boitier , on obtient une unité de commande CNC tres compacte.

la description , le fonctionnement et l’utilisation de ce shield est decrite en detail dans la page ci dessous en lien

 https://www.e-techno-tutos.com/2022/03/16/arduino-le-cnc-shield/

pour finir , une vue du dessus des différentes broches d’un shield pour 4 pololu:

ARDUINO CNC – Modules CNC ELEKSMAKER

alternative simple a l’ARDUINO UNO et CNC shield , les carte tout en un ELEKSMAKER que l’on peut commander sur Aliexpress ou Bangood a un cout defiant toute concurrence par rapport a une solution ARDUINOP UNO + CNC Shield.

ces cartes a base d’arduino Nano arrivent toutes prêtes pour une utilisation CN . elle comporte un arduino Nano et 2 ou 3 driver POLOLU A4988 suivant que vous commandez une carte 2 axes pour graveuse laser par exemple ou une carte 3 axes pour fraiseuse CNC.

GRBL est preinstallé sur la carte , et ces cartes ont deux sorties specifiques pour la commande de moteur de broche et pour la commande de laser en mode PWM. et cerise sur le gateau un bouton de mise sous tension type ON/OFF.

par contre , l’ARDUINO NANO est en general une version avec puce microcontroleur modele CH340. ce type de carte nécessite un driver spécifique pour etre reconnu par l’IDE arduino. voici en fichier zip ci dessous le driver nécessaire a installer sur votre ordinateur en OS WINDOWS :

si vous avez un doute sur la mise a jour du driver vis a vis de votre systeme d’exploitation, faire une recherche google avec ” driver CH340 ” ou aller sur Github:

https://github.com/HobbyComponents/CH340-Drivers

ARDUINO CNC- réglage des POLOLU A4988

un des avantage des drivers POLOLU A4988 est de pouvoir régler le courant limite de sortie et ainsi l’adapter aux moteurs Pas a Pas utilisé pour les protéger .

ce réglage s’effectue en fonction:

– de la tension d’alimentation moteur VMOT

– des caractéristiques du moteurs pas a pas alimenté

nous allons voir ici comment régler les pololu A4988 , les principes sont les mêmes pour d’autres drivers. pour les réglage , il est indispensable de récupérer la “datasheet” du driver concerné.

sur un pololu A4988, la tension d’alimentation moteur doit etre comprise entre 8 et 35 V et doit être connecté entre les broches VMOT et GND. Cette alimentation doit être accompagnée d’une capacité de découplage proche de la carte ( 47uF mini ou 100 uF idéalement) ceci afin d’ écrêter les éventuelles surtensions de l’alimentation et ainsi limiter le courant envoyé.

la valeur primordiale pour le pilotage d’un moteur pas a pas est l’intensité du courant et non pas la tension, dit autrement , un moteur pas a pas de 12 V peut être alimenté sans problème par une tension de 30 volts dans la mesure ou le courant envoyé dans les bobines ne dépasse pas la limite admise par les moteurs connectés .

Le driver pololu A4988 comporte une fonctionnalité de “limitation active de courant” et le petit potentiomètre (varistance) disponible sur la carte permet d’en fixer la valeur.

il va donc falloir régler ce potentiomètre de façon à ajuster le courant envoyé à la limite admissible par les moteurs connectés. si vous utilisez des moteurs différents , il va falloir ajuster ce potentiomètre a chaque moteur d’axe connecté et ensuite , ne surtout pas échanger les moteurs d’axes sur les axes ou ils sont différents..

pour ajuster le courant limite on va mesurer la tension entre la broche “Vref” et la masse et tourner la résistance variable jusqu’a obtenir une valeur correspondant au courant limite calculé.

La limite de courant est calculée comme suit par rapport à la tension de référence suivant la formule :

soit

pour trouver Rcs il faut regarder les resistances sur le circuit:

exemple:  NEMA 17 avec 1,2 A par phase et un Rcs de 68 , Vref=8 x 1,2 x 68 = 652 mV

ne reste plus qu’a régler le potentiomètre du pololu pour obtenir cette valeur. pour cela on va alimenter le pololu en 5V sur ces 2 pattes GND et VDD  et  mesurer la valeur Vref entre la cosse de masse et le potentiomètre pour ensuite tourner le potentiomètre jusqu’à mesurer une tension Vref la plus proche possible de 0,652 volts .

pour ce réglage on va utiliser si possible un micro tournevis cruciforme en cramique pour éviter les courts circuits en cas de fausse manip.

mais a défaut , un micro tournevis métallique fera l’affaire a condition de ne pas “ripper” du potentiomètre de réglage .

Continuer la lecture de « ARDUINO CNC- réglage des POLOLU A4988 »