Nous allons voir dans ce tutoriel comment configurer le firmware GRBL 0.9 pour Ramps 1.4 avec Arduino Mega 2560 et s’interfacer avec LaserGRBL. Pour contrôler votre CNC ou MPCNC avec LaserGRBL, vous avez besoin d’installer et de configurer un Firmware sur votre carte Arduino, pour qu’elle puisse interpréter correctement les ordres et commandes de votre software de gravure/découpe Laser, qu’on appelle un émetteur G-code ( G-code étant le langage de programmation pour les machines CNC ). Dans ce tutoriel nous aborderons LaserGRBL
Ce tutoriel fait suite à celui-ci : Installation et câblage d’une carte Ramps 1.4 pour une MPCNC.
Matériel
- Arduino MEGA 2560
- Carte RAMPS 1.4
- 1 Laser 20W : LD4070HA
- 5 Moteurs pas à pas : 17HS15-1504S-X1
- 3 Pilotes de moteurs pas à pas : DRV8825
Softwares
Nettoyer l’EEPROM
Avant de de télécharger et téléverser GRBL sur votre carte, il faut s’assurer que toutes les valeurs stockées sont nettoyées, et pour cela on a besoin du code suivant pour remettre les paramètres par défaut de votre carte :
/* * EEPROM Clear * * Sets all of the bytes of the EEPROM to 0. * Please see eeprom_iteration for a more in depth * look at how to traverse the EEPROM. * * This example code is in the public domain. */ #include <EEPROM.h> void setup() { // initialize the LED pin as an output. pinMode(13, OUTPUT); /*** Iterate through each byte of the EEPROM storage. Larger AVR processors have larger EEPROM sizes, E.g: - Arduino Duemilanove: 512 B EEPROM storage. - Arduino Uno: 1 kB EEPROM storage. - Arduino Mega: 4 kB EEPROM storage. Rather than hard-coding the length, you should use the pre-provided length function. This will make your code portable to all AVR processors. ***/ for (int i = 0 ; i < EEPROM.length() ; i++) { EEPROM.write(i, 0); } // turn the LED on when we're done digitalWrite(13, HIGH); } void loop() { /** Empty loop. **/ }
Brancher votre carte Arduino en liaison série avec son câble USB, copier et coller ce code dans votre Arduino IDE et puis uploader pour nettoyer l’EEPROM.
Modification de GRBL pour Ramps
Vous pouvez télécharger GRBL for Ramps sur ce Repository Github. Si vous ne savez pas utiliser Git, vous pouvez suivre ce tutoriel pour avoir les bases de cet outil.
Le Firmware GRBL a été modifié à certains endroits pour qu’il soit adapté à notre MPCNC. Avant d’uploader le Firmware avec Arduino IDE, voici les paramètres à vérifier par rapport à votre installation :
// Enables variable spindle output voltage for different RPM values. On the Arduino Uno, the spindle // enable pin will output 5V for maximum RPM with 256 intermediate levels and 0V when disabled. // NOTE: IMPORTANT for Arduino Unos! When enabled, the Z-limit pin D11 and spindle enable pin D12 switch! // The hardware PWM output on pin D11 is required for variable spindle output voltages. #define VARIABLE_SPINDLE // Default disabled. Uncomment to enable.<----------------------------------- Uncommented for Ramps 1.4
Ici, on décommente la ligne #define VARIABLE_SPINDLE dans le fichier config.h pour avoir le contrôle en PWM sur le laser.
/*-----------------------------------------------------------suite du code---------------------------------------------------*/ // Define spindle enable and spindle direction output pins. #define SPINDLE_ENABLE_DDR DDRH #define SPINDLE_ENABLE_PORT PORTH #define SPINDLE_ENABLE_BIT 6 // MEGA2560 Digital Pin 9 <---------- Modified for Ramps 1.4. Orignal was BIT 3 for Digital Pin 6 #define SPINDLE_DIRECTION_DDR DDRE #define SPINDLE_DIRECTION_PORT PORTE #define SPINDLE_DIRECTION_BIT 3 // MEGA2560 Digital Pin 5 // Define flood and mist coolant enable output pins. // NOTE: Uno analog pins 4 and 5 are reserved for an i2c interface, and may be installed at // a later date if flash and memory space allows. #define COOLANT_FLOOD_DDR DDRH #define COOLANT_FLOOD_PORT PORTH #define COOLANT_FLOOD_BIT 5 // MEGA2560 Digital Pin 8 #ifdef ENABLE_M7 // Mist coolant disabled by default. See config.h to enable/disable. #define COOLANT_MIST_DDR DDRH #define COOLANT_MIST_PORT PORTH #define COOLANT_MIST_BIT 3 // MEGA2560 Digital Pin 6 <---------- Modified for Ramps 1.4. Orignal was BIT 6 for Digital pin 9 /*-----------------------------------------------------------suite du code--------------------------------------------------*/
Ici, dans le fichier intitulé cpu_map.h, il faut bien faire attention aux pins de sortie pour le « Spindle » qui va ici correspondre à la pin pour activer ou désactiver le Laser.
#define SPINDLE_PWM_DDR DDRB // <------------------------------ Modified for Ramps 1.4. Orignal was DDRH #define SPINDLE_PWM_PORT PORTB // <--------------------------- Modified for Ramps 1.4. Orignal was PORTH #define SPINDLE_PWM_BIT 5 // MEGA2560 Digital Pin 11 <--------- Modified for Ramps 1.4. Orignal was BIT 6 for Digital Pin 9 #endif // End of VARIABLE_SPINDLE
Configuration du pinout de la carte
Toujours dans le même fichier, cpu_map.h, On modifie la pin de contrôle de la puissance du laser en PWM pour correspondre à notre câblage.
Pour comprendre un peu comment ces modifications, il faut qu’on se penche sur les schémas structurels de la carte Ramps 1.4 et de l’Arduino MEGA 2560 :
On peut remarquer que les pins digitals qui nous servent à alimenter le laser (Pin Digital 9) et celle qui sert à le contrôler (Pin Digital 11) sont définis à travers leur PORT, d’où la nécessité de les définir par leurs numéros de Port, respectivement 6 sur le PORTH et 5 sur le PORTE (PH6 et PE5 sur le schéma).
La modification PH3 pour la pin digital 6 sert juste à libérer la pin digital 9 qui utilisé de base pour un système de refroidissement qui n’est pas dans notre configuration.
Maintenant que vous avez compris les modifications apportés au Firmware, vous pouvez l’uploader sur votre carte Arduino. Attention, la compilation peut prendre plusieurs minutes, c’est normal, soyez patient.
Menu de configuration GRBL
Une fois LaserGRBL installé, ouvrez l’application puis connectez vous en liaison série USB à votre carte Arduino Mega / votre CNC :
Ensuite, cliquez sur Grbl Configuration, qui correspond aux paramètres propres à la CNC qui est connectée. Vous ne pouvez que modifier et réécrire les valeurs lorsque LaserGRBL est connecté à votre CNC.
Vous aurez accès aux paramètres de votre CNC , valeurs qui seront enregistrés sur votre carte Arduino.
N.B.: si vous utilisez plusieurs machines ou plusieurs ordinateurs, vous pouvez exporter et importer vos paramètres de configuration
Désactivation des limites de position
Tout d’abord, commencez par désactiver les Soft Limits en mettant à 0 la valeur de la ligne Soft limits enable (&20 et $21). Cela rendra les premiers tests plus simples sans que LaserGRBL pense que votre machine se trouve en dehors de ses dimensions.
Configuration des paramètres
Les paramètres importants ici tous ceux qui concernent les axes X, Y et Z.
Pour régler la valeur de travel resolution, aussi dit la résolution de déplacement de chaque axe, il faut se référer à l’équation :
Résolution de déplacement = (Pas par tour * Réduction mécanique) / Micro-pas
- Pas par tour (Step per Revolution) : C’est le nombre de pas effectués par le moteur pour effectuer une rotation complète.(ici 200 pas par tour)
- Réduction mécanique (Gear Reduction) : Si votre système utilise des engrenages ou des poulies pour réduire ou augmenter le couple, vous devez prendre en compte le rapport de réduction mécanique. Cela affectera la résolution de déplacement effective de l’axe. Nous utilisons des courroies qui ont pour valeur 40 : 1 de réduction mécanique.
- Micro-pas (Microstepping) : Certains contrôleurs de moteur pas à pas prennent en charge le micro-pas, qui permet de diviser chaque pas électrique. Cela permet une meilleure résolution. Les valeurs possibles sont 1/2, 1/4, 1/8, 1/16, etc. (Ici on a 1/32).
Pour l’accélération, veuillez vous référer à la valeur donner sur la datasheet du moteur.
Notes sur le calcul des paramètres
- Résolution
Pour un système poulie (20dents) courroie (pas 2mm) avec micro-pas (1/32), le rapport de réduction est donné par:
( 200 * 32 ) / (20*2) = 160 step/mm
Pour un système à vis sans fin avec un ratio de 8mm par revolution et micro-pas (1/32), on a
( 200 * 32 ) / 8 = 800 step/mm.
- vitesse maximale
Pour la vitesse maximale, soit le Maximum Rate vous pouvez utiliser l’équation suivante :
Vitesse maximale = (Pas par tour * Fréquence maximale d’impulsions de pas) / (Micro-pas * 60)
Dans notre cas
Vitesse maximale = ( 200*36 000) / ( 40*60 ) = 3000 mm/min.
- zone de travail
La taille maximale de déplacement(maximum travel) dépend de la surface réelle de travail de votre CNC. Pour la mesurer :
- Configurez tout d’abord les paramètres précédents
- Avec les flèches de l’interface utilisateur de LaserGRBL, déplacez la tête de votre CNC jusqu’au coin bas gauche.
- Allumez le laser avec le bouton Focus et marquez l’endroit où il pointe, en allumant le laser avec une forte puissance par exemple.
- répéter l’opération dans tous les coins.
- mesurez la surface de travail avec une règle ou un mètre.
Modification et ajout de bouton sur LaserGRBL
Pour modifier un bouton, il suffit de clique-droit dessus et choisissez « Editer le bouton »
Vous pouvez modifier GCode envoyer par le bouton ainsi. Pour que le Laser Focus ainsi que Blink marche à 3% de sa puissance, vous pouvez mettre ces GCodes suivant.
; pour GCode
M3 S30
G1 F1000
; pour GCode2
M5 S0
G0
Pour créer votre propre bouton, vous pouvez faire clique-droit sur une zone vide de l’interface utilisateur où il n’y a pas de bouton et choisissez « Ajouter un bouton personnalisé ». Cela peut être utile par exemple pour ajouter de quoi manipuler l’axe Z si vous voulez changer la hauteur de l’outil de votre CNC :
- Entrer : permet de choisir si c’est un bouton qui s’active en cliquant une fois dessus, en maintenant appuyé, qui s’enclenche et se déclenche en cliquant dessus, etc..
- Caption : ce sera le nom afficher de votre bouton
- Info-bulle : permet de décrire ce que fait votre bouton
- Activé : permet de savoir quand est-ce que le bouton sera débloqué, ici Idle signifie qu’il sera actif seulement si la CNC est connecté et déverrouillé.
- GCode : c’est là où on met les lignes de commandes qu’enverra votre bouton à votre CNC.
Voici différents GCode pour 6 boutons pour déplacer l’axe Z avec une précision différente :
G91 Z-10 ; Monter l'axe Z de 10mm
G91 Z10 ; Descendre l'axe Z de 10mm
G91 Z-5 ; Monter l'axe Z de 5mm
G91 Z5 ; Descendre l'axe Z de 5mm
G91 Z-1 ; Monter l'axe Z de 1mm
G91 Z1 ; Descendre l'axe Z de 1mm
Sources
- https://planet-cnc.com/how-to-setup-cnc/
- https://blog.orientalmotor.com/motor-sizing-basics-part-3-acceleration-torque-and-rms-torque
- https://lasergrbl.com/configuration/
- https://docs.v1e.com/learn/gcode/
- https://www.youtube.com/watch?v=erXw09OcdeU