Bonjour à tous,
J'exhume ce sujet qui date un peu maintenant. Globalement la machine à rempli la fonction pour laquelle elle a été conçue, mais quelques améliorations se sont avérées nécessaires.
A l'usage, un défaut est apparu sur les supports des galets de roulement. Prévus à l'origine en médium, il s'est avéré qu'au cours du temps un tassement superficiel à dégradé la précision des déplacements. Ces cales ont été remplacées par du plat en aluminium de 20x5.
viewtopic.php?p=23072#p23072.
Autres améliorations apportées :
* Auto-équerrage du portique,
* Remplacement de la table à inserts filetés par une table rainurée,
* Remplacement de l'ordinateur portable de pilotage de la CNC par un micro contrôleur Raspberry Pi.
Auto-équerrage du portique
Le portique, d'une longueur de 580 mm présente une élasticité naturelle de plusieurs mm entre les guidages gauche et droit de l'axe Y. Si le portique n'est pas mis d'équerre avant la mise sous tension de l'arduino, le défaut initial va influencer toutes les séquence d'usinage. Pendant plusieurs mois j'ai utilisé des cales de butée sur lesquelles j'appuyais les montants du portique avant la mise en marche ; jusqu'à ce que je découvre la fonction "Self-Squaring" de grbl.
La mise d’équerre automatique est une fonctionnalité de GRBL 1.1 qui permet d'aligner le portique lorsque l’axe est piloté par deux moteurs pas à pas. Cette possibilité est obtenue en contrôlant chaque moteur pas à pas de façon indépendante ; une paire de commutateurs de fin de course stoppe chaque moteur lorsque l’alignement est atteint.
La phase d’auto-équerrage est intégrée à la Prise d’Origine Machine.
Hors Prise d’Origine Machine, les deux moteurs contrôlant cet axe reçoivent les mêmes instructions et se déplacent de façon identique.
Géométrie du portique
Une machine outil doit doit avoir ses axes principaux parfaitement perpendiculaires entre eux si on veut obtenir une fabrication correspondant au dessin initial. Si ce n’est pas le cas, un cercle va se transformer en ovale et un rectangle en losange et… ça peut poser un tas de problèmes si la pièce est complexe. Si la pièce doit être retournée (circuits imprimés double face, par exemple) les défauts initiaux vont être multipliés par deux par effet miroir.
Sur les machines dont les mouvements sont obtenus par déplacement de la table, la perpendicularité est déterminée par les glissières de guidage et réglée une fois pour toutes à la construction.
Les machines à portique, elles, peuvent facilement se mettre « en crabe » si on les déplace à la main lorsqu’elles sont hors tension. Elles resteront dans cette position à la remise sous tension et répercuteront leur mauvaise position tout au long de l’usinage.
Pour les remettre d’équerre, il n’y a que deux solutions ; mettre les montants du portique au contact d’un appui fixe parfaitement réglé avant de mettre la machine sous tension, ou utiliser une fonction logicielle.
Équerrage logiciel
La machine doit être gérée par grbl 1,1 et disposer de quatre contacts de fin de course (1 par moteur pas à pas).
La sécurité de déplacement est complétée par des limites logicielles (soft limits) : $20 = 1. Les limites physiques doivent être désactivées (hard limits) : $21 = 0.
La Prise d’Origine Machine doit être activée (Homing) : $22 = 1.
Sur le CNC Shield les pilotes d’axes sont repèrés X, Y, Z, A. Chaque pilote correspond à un moteur.
A peut être associé à X, Y ou Z, mais grbl ne permet l’auto-équerrage que sur X et Y. Pour cet exemple je traiterai le cas d’un axe Y avec deux moteurs. Ça ne change rien en ce qui concerne le câblage du CNC Shield, la permutation est logicielle.
Les contacts de fin de course sont placés en face chaque moteur de l’axe concerné (Y dans l’exemple).
Un des deux Fc doit être réglable (± 2 mm) ; il permettra le réglage fin de l’équerrage. Choisir le plus accessible.
Le contact fixe sera la référence 0 lors de la Prise d’Origine Machine, donc il doit être placé le plus près possible de la limite physique du déplacement de l’axe.
Les deux autres axes n’ont qu’un seul fin de course.
Câblage des fins de course
Lors du référencement de la machine, l’axe Z est le premier à se déplacer. Dès que grbl reçoit le retour du fin de course Z, les deux autres axes se mettent en mouvement jusqu’à ce que l’un des autres fins de course soit actionné. Le premier actionné arrête le moteur correspondant et l’autre axe continue son déplacement.
Si le déplacement se poursuit sur l’axe Y, l’un des deux fins de course sera actionné avant l’autre et le moteur correspondant s’arrêtera (supposons A). Le moteur Y va continuer à tourner jusqu’à actionner le fin de course Y, et s’arrêter à son tour.
Lorsque les deux fins de course A et Y sont correctement réglés, le portique est « carré » par rapport à X.
Le CNC Shield ne permettant la connexion que de 3 fins de course dédiés (X, Y, Z). le FC du moteur A est associé à l’axe Z. Ce qui fait que l’action sur Z, ou sur A, sera reçue au niveau du CNC Shield sur la même paire de broche (Z+).
Comme Z est le premier axe référencé, grbl saura que le premier retour sur Z+ concernera l’axe Z puisque les autres axes sont encore immobiles. Une fois l’axe Z référencé le retour suivant sur Z+ ne pourra concerner que le fin de course A.
Ceci fixé, les fins de course peuvent être de deux types , NO ou NC. Pour rappel, NO (Normalement Ouvert) renvoie une information lorsqu’il se ferme. Le NC (normalement Clos) renvoie l’information lorsqu’il s’ouvre.
Si votre machine est équipée de contacts de type NO, Les fins de course A et Z sont câblés en parallèle.
Si votre machine est équipée de contact de type NC, les fins de course A et Z sont câblé en série.
Le montage par défaut étant de type NO, le raccordement est facilité par une particularité du CNC Shield : Z+ et Z- sont connectés sur la même broche de l’arduino. La connexion s’en trouve simplifiée :
NOTA : Avec une machine référencée les limites physiques (Hard limits) doivent être remplacées par des limites logicielles (Soft limits) qui permettent d’anticiper les déplacements excessifs.
Intervention sur le CNC Shield
Version 3,51 (version originale de protoneer.nz)
Sur ce CNC Shield, il y a peu de chose à faire, il faut juste indiquer que le moteur A n’est pas un clone de l’axe Y, mais est géré par grbl.

- image_2024-06-05_153057912.png (387.37 Kio) Consulté 12531 fois

- image_2024-06-05_153305524.png (20.35 Kio) Consulté 12531 fois
Les cavaliers qui clonaient l’axe Y sont déplacés vers les broches A3 et A4
Version 3,50 (version originale de protoneer.nz)
Sur cette version il faut créer deux ponts pour récupérer les informations de l’arduino qui servent à piloter le moteur A et les envoyer vers son pilote.
Le signal de direction est pris sur la broche SDA et envoyé sur la broche A.Dir (embase Jaune).
Le signal de pas est pris sur la broche CoolEn et envoyé sur la broche A.Step (embase bleue)

- image_2024-06-05_153553039.png (387.01 Kio) Consulté 12531 fois
Les cavaliers qui clonaient l’axe Y précédemment sont retirés
Ce sont les seules modifications à faire pour ces deux shields, la validation de la procédure est logicielle (voir plus loin les lignes à dé-commenter dans le fichier config.h de grbl)
Version 3,0 (clone chinois)
Sur cette version, la sérigraphie et le circuit électrique n’ont pas suivi l’évolution du développement de gbrl et il va falloir s’adapter. Mais, en étant attentif, les possibilité de cette carte sont identiques à la Version 3,51, à condition que l’arduino soit chargé avec la dernière version de grbl (1,1h).
Contrairement à ce qu’on peut lire ici, ou là, cette carte peut à la fois gérer l’auto-équerrage, la broche en PWM (Pilotage direct par le Gcode) et la lubrification. Les indications qui suivent permettent de mettre en œuvre toutes ces fonctionnalités de grbl.
Petite différence avec les shields précédents, les fins de course n’utilisent que les broches X et Y, qui sont partagées avec les fins de course A et Z. La libération de la broche Z+ permet le raccordement PWM du moteur de la broche.
Ce qui donne :
X+ → Fin de course axe X
X- → Fin de course A (second moteur axe Y)
Y+ → Fin de course axe Y (premier moteur)
Y- → Fin de course Z
Cette adaptation induit une modification du cycle de référencement qui se déroule désormais en trois phases : Z en premier (mise en sécurité de la broche), puis X et ensuite Y .
Si la position du G28 (point de dégagement de la broche) est judicieusement choisie, cette procédure de référencement ne demande que 3 à 4 secondes de plus que la procédure par défaut.
Un petit aperçu du câblage pour exploiter toute la puissance de grbl 1,1h.
Pilotage du moteur A :
* A.STP à CoolEn (Bleu)
* A.Dir à SDA (Jaune)
CoolEn Lubrification
Dcy Départ Cycle
AU Arrêt Urgence
Modifications de la partie logicielle
Pour ceux qui n’ont pas la dernière version de grbl (1,1h) il va falloir mettre à jour.
Dès que c’est fait, ouvrir le fichier
config.h et rechercher :
Ligne 641, 644, 662 :
// NOTE: This feature requires approximately 400 bytes of flash. Certain configurations can
// run out of flash to fit on an Arduino 328p/Uno. Only X and Y axes are supported. Variable
// spindle/laser mode IS supported, but only for one config option. Core XY, spindle direction
// pin, and M7 mist coolant are disabled/not supported.
#define ENABLE_DUAL_AXIS // Default disabled. Uncomment to enable.
Décommenter la fonction ENABLE_DUAL_AXIS (Supprimer les // en début de ligne)
// Select the one axis to mirror another motor. Only X and Y axis is supported at this time.
#define DUAL_AXIS_SELECT Y_AXIS // Must be either X_AXIS or Y_AXIS
^ Indiquer sur quel axe se trouvent les deux moteurs
// Dual axis pin configuration currently supports two shields. Uncomment the shield you want,
// and comment out the other one(s).
// NOTE: Protoneer CNC Shield v3.51 has A.STP and A.DIR wired to pins A4 and A3 respectively.
// The variable spindle (i.e. laser mode) build option works and may be enabled or disabled.
// Coolant pin A3 is moved to D13, replacing spindle direction.
#
define DUAL_AXIS_CONFIG_PROTONEER_V3_51 // Uncomment to select.
Décommenter la fonction
Note : Cette fonction est à utiliser quelle que soit la version du CNC Shield utilisé (3.0, 3,50 ou 3.51)
Enregistrer le fichier dès que les modifications sont faites. C’est tout pour les cartes 3,50 et 3,51.
A ce stade, il ne reste plus qu’à téléverser grbl dans l’arduino. La suite de la modification va s’opérer sur la machine.
Si votre machine a déjà fonctionné, il faut sauvegarder son paramétrage avant d’effectuer le téléversement sinon ce seront les paramètres par défaut qui seront initialisés. Voir Default.h
Pour les clones chinois (version 3,0) ce n’est pas fini, fichier
config.h
Ligne 104 : Modifier
CYCLE_1, dé-commenter et modifier
CYCLE_2 suivant texte en gras
// NOTE: Defaults are set for a traditional 3-axis CNC machine. Z-axis first to clear, followed by X & Y.
#define HOMING_CYCLE_0 (1<<Z_AXIS) // REQUIRED: First move Z to clear workspace.
#define HOMING_CYCLE_1 (
1<<X_AXIS) // OPTIONAL: Then Move X.
#define HOMING_CYCLE_2 (
1<<Y_AXIS) // OPTIONAL: Then Move Y
Sauvegarder le fichier, et passer à la suite.
Ouvrir le fichier
cpu_map.h et rechercher :
Ligne 60 : appliquer la modif en gras (Z_LIMIT est redirigé vers Y_LIMIT pour libérer la broche Z pour le PWM de la broche)
Ne pas oublier /* et */ pour neutraliser ifdef VARIABLE_SPINDLE
#define LIMIT_DDR DDRB
#define LIMIT_PIN PINB
#define LIMIT_PORT PORTB
#define X_LIMIT_BIT 1 // Uno Digital Pin 9
#define Y_LIMIT_BIT 2 // Uno Digital Pin 10
#define Z_LIMIT_BIT
Y_LIMIT_BIT // Homing Z, X, Y separately
/* Neutralization of text contained between /* and */
#ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.
#define Z_LIMIT_BIT 4 // Uno Digital Pin 12
#else
#define Z_LIMIT_BIT 3 // Uno Digital Pin 11
#endif
*/
#if !defined(ENABLE_DUAL_AXIS)
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
#endif
Ligne 174 : appliquer modif en gras (Le fin de course de A est couplé au fin de course X)
// NOTE: Dual axis limit is shared with the z-axis limit pin by default. Pin used must be on the same port
// as other limit pins.
#define DUAL_LIMIT_BIT
X_LIMIT_BIT // Shared with X_AXIS
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)| (1<<DUAL_LIMIT_BIT))
// Define coolant enable output pins.
// NOTE: Coolant flood moved from A3 to A4. Coolant mist not supported with dual axis feature on Arduino Uno.
Enregistrer le fichier à la fin des modifications.
A ce stade, il ne reste plus qu’à téléverser grbl dans l’arduino. La suite de la modification va s’opérer sur la machine.
Si votre machine a déjà fonctionné, il faut sauvegarder son paramétrage avant d’effectuer le téléversement sinon ce seront les paramètres par défaut qui seront initialisés.
La meilleure façon de sauvegarder vos paramètres est de créer un fichier spécifique pour votre machine.
Fichier de paramètres personnalisés
Ouvrir le fichier defaults.h
Ce fichier contient un certain nombres de dossiers personnalisés (DEFAULTS_GENERIC, DEFAULT_SHERLING_5400, DEFAULT_POCKETNC_FR4…)
Pour créer le votre, il suffit de faire une copie du dossier DEFAULT_GENERIC et de le renommer avant de le remplir avec vos paramètres.
Voici le fichier concernant ma machine : il est nommé DEFAULTS_BJPA2
#ifdef DEFAULTS_BJPA2
#define DEFAULT_X_STEPS_PER_MM 100.0
#define DEFAULT_Y_STEPS_PER_MM 100.0
#define DEFAULT_Z_STEPS_PER_MM 100.0
#define DEFAULT_X_MAX_RATE 6000.0 // mm/min
#define DEFAULT_Y_MAX_RATE 6000.0 // mm/min
#define DEFAULT_Z_MAX_RATE 2000.0 // mm/min
#define DEFAULT_X_ACCELERATION (50.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_Y_ACCELERATION (50.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_Z_ACCELERATION (20.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_X_MAX_TRAVEL 423.0 // mm NOTE: Must be a positive value.
#define DEFAULT_Y_MAX_TRAVEL 573.0 // mm NOTE: Must be a positive value.
#define DEFAULT_Z_MAX_TRAVEL 85.0 // mm NOTE: Must be a positive value.
#define DEFAULT_SPINDLE_RPM_MAX 14383 // rpm
#define DEFAULT_SPINDLE_RPM_MIN 804 // rpm
#define DEFAULT_STEP_PULSE_MICROSECONDS 10
#define DEFAULT_STEPPING_INVERT_MASK 0
#define DEFAULT_DIRECTION_INVERT_MASK 0
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 255 // msec (0-254, 255 keeps steppers enabled)
#define DEFAULT_STATUS_REPORT_MASK 1 // MPos enabled
#define DEFAULT_JUNCTION_DEVIATION 0.01 // mm
#define DEFAULT_ARC_TOLERANCE 0.002 // mm
#define DEFAULT_REPORT_INCHES 0 // false
#define DEFAULT_INVERT_ST_ENABLE 0 // false
#define DEFAULT_INVERT_LIMIT_PINS 0 // false
#define DEFAULT_SOFT_LIMIT_ENABLE 1 // false
#define DEFAULT_HARD_LIMIT_ENABLE 0 // false
#define DEFAULT_INVERT_PROBE_PIN 0 // false
#define DEFAULT_LASER_MODE 0 // false
#define DEFAULT_HOMING_ENABLE 1 // false
#define DEFAULT_HOMING_DIR_MASK 0 // move positive dir
#define DEFAULT_HOMING_FEED_RATE 25.0 // mm/min
#define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min
#define DEFAULT_HOMING_DEBOUNCE_DELAY 25 // msec (0-65k)
#define DEFAULT_HOMING_PULLOFF 1.0 // mm
#endif
Pour qu’il soit téléversé en même temps que grbl, il suffit d’ouvrir le fichier config.h et de remplacer le chargement générique par le chargement de vos paramètres :
// NOTE: OEMs can avoid the need to maintain/update the defaults.h and cpu_map.h files and use only
// one configuration file by placing their specific defaults and pin map at the bottom of this file.
// If doing so, simply comment out these two defines and see instructions below.
#define DEFAULTS_BJPA2 //CNC A2 for Arduino Uno
#define CPU_MAP_ATMEGA328P // Arduino Uno CPU
Fin de la phase préparatoire.
Afin de ne pas abuser de votre patience je vais en rester là pour aujourd'hui. La mise en oeuvre sur la machine fera l'objet d'une prochaine publication. Merci de votre attention.
JP