Commutateurs de fin de course et prise d'origine - fra589/grbl-Mega-5X GitHub Wiki

Commutateurs de fin de course et prise d'origine

Préambule

grbl-Mega-5X est une évolution du programme original grlbl qui ne possède qu'une seule connection d'interrupteur de fin de course par axe.
Cette évolution est basée sur l'utilisation de la carte d'extension RAMPS qui offre 2 connections de fin de course par axes, une limite minimum et une autre maximum. Le logiciel ne fait pas la différence entre les limites min et max et se comporte comme si les 2 interrupteurs étaient connectés en série.

Cablage par défaut

par défaut, les interrupteurs de fin de course doivent être câblés entre la masse et les pins suivantes de la carte Arduino:

Axe Pin min Pin max
AXIS_1 (X) D3 D2
AXIS_2 (Y) D14 D15
AXIS_3 (Z) D18 D19
AXIS_4 D42 D40
AXIS_5 D44 D59
AXIS_6 D57 D58

cf. https://github.com/fra589/grbl-Mega-5X/wiki/grbl-Mega-5X-pinout
cf. https://github.com/fra589/grbl-Mega-5X/wiki/Pinout-mapping-in-cpu_map.h

Comportement du logiciel

Lors de la prise d'origine ou de tout autre mouvement utilisant les limites matérielles, le programme n'a pas besoin de connaitre le sens min ou max de la fin de course rencontrée, cela dépend simplement du sens du mouvement en cours. Il doit simplement détecter "fin de course sur l'axe en mouvement" il sait déjà dans quel sens est le mouvement en cours et il n'a donc pas besoin d'autre information.

Le paramètre de grbl pour choisir le type de capteur de fin de course est $5:

  • si $5 = 0, (valeur par défaut) les capteur de fin de conrse fonctionnent en mode "Normalement Ouvert" (NO).
  • si $5 = 1, les capteurs de fin de course fonctionnent en mode "Normalement fermé" (NF).

Ce paramètre inverse la logique de fonctionnement (NO ou NF) de TOUS les contacteurs.

  • Dans le mode normalement ouverts, le comportement est simple: au repos, les 2 interrupteurs sont ouverts et il suffit que l'un des 2 interrupteur soit fermé pour que le programme détecte la fin de course.
  • Dans le mode normalement fermés, tous les interrupteurs étant fermés au repos, si un interrupteur est ouvert, la fin de course est détectée sur l'axe.
    Cela suppose effectivement que TOUS les interrupteurs soient effectivement fermés.
    :warning: Attention! Si un des contacteurs est manquant, la broche qu'il aurait du occuper doit être court-circuité à la masse pour que la logique NF soit respectée. Dans le cas contraire, la fin de course sur l'axe concerné sera détectée de manière permanente.

Cas particuliers

Si tous les capteurs de fin de course ne sont pas du même type (tous NO ou tous NF), l'utilisation du paramètre $5 n'est pas possible.
Dans ce cas, il faut définir la configuration matérielle particulière lors de la compilation du programme à l'aide des définitions suivantes :

#define INVERT_MIN_LIMIT_PIN_MASK  
#define INVERT_MAX_LIMIT_PIN_MASK  

Ces 2 constantes définissent un masque binaire donnant la logique de chaque fin de course utilisé.

  • Un bit à 0 définit un interrupteur de fin de course normalement ouvert,
  • un bit à 1 définit un interrupteur de fin de course normalement fermé.

Par exemple, si les fin de course AXIS_3 min (Z min), AXIS_4 min, AXIS_1 max (X max), AXIS_2 max (Y max) et AXIS_3 max (Z max) sont des interrupteurs normalement fermés et les autres étant normalement ouvert ou absents, utilisez les définitions suivantes:

#define INVERT_MIN_LIMIT_PIN_MASK ((1<<AXIS_3) | (1<<AXIS_4))  
#define INVERT_MAX_LIMIT_PIN_MASK ((1<<AXIS_1) | (1<<AXIS_2) | (1<<AXIS_3))  

Si tous les bits de l'une de ces 2 constantes doivent être à 0, laissez la constante en commentaire (// en début de ligne).
:warning: Attention! Si vous avez défini un masque pour définir la logique particulière d'un ou plusieurs interrupteur de fin de course, l'utilisation du paramètre $5 = 1 inversera cette logique. Les interrupteurs définis par le masque en normalement ouverts seront considérés normalement fermés et vice versa. Il est fortement déconseillé de combiner l'utilisation des masques logique de fin de course avec l'utilisation du paramètre $5.

Direction de la prise d'origine

Les fraiseuses à commande numérique standard utilisent les limites maximum de leur axes pour la prise d'origine, généralement Z en premier, X et Y et les autres axes ensuite.
Cela permet de dégager au maximum l'espace de travail et d'éviter tant que possible la colision avec une pièce ou un écentuel montage d'usinage qui serait resté bridé sur la table de la machine.

Les directions des prises d'origine sont controlées par le paramètre $23.
Quand $23 vaut 0, toutes les directions de prise d'origine vont en direction du maximum (direction +) pour chaque axe. Chaque bit du paramètre $23 controle la direction d'un axe, en commençant par la droite (bit de poid faible) pour l'axe 1 (X)

Axe N° +/-,... Valeur binaire Valeur décimale
1+, 2+, 3+, 4+, 5+, 6+ 00000000 0
1-, 2+, 3+, 4+, 5+, 6+ 00000001 1
1+, 2-, 3+, 4+, 5+, 6+ 00000010 2
1+, 2+, 3-, 4+, 5+, 6+ 00000100 4
1+, 2+, 3+, 4-, 5+, 6+ 00001000 8
1+, 2+, 3+, 4+, 5-, 6+ 00010000 16
1+, 2+, 3+, 4+, 5+, 6- 00100000 32

Si plusieurs axes doivent aller en direction du min, ajouter simplement les valeurs.
Exemples:

Axe N° +/-,... Valeur binaire Valeur décimale
1-, 2-, 3+, 4+, 5+, 6+ 00000011 2 + 1 = 3
1-, 2+, 3-, 4+, 5+, 6+ 00000101 4 + 1 = 5
1-, 2+, 3-, 4-, 5+, 6- 00101101 1 + 4 + 8 + 32 = 45

Cycle de prise d'origine

La prise d'origine pour un axe se déroule en 5 temps:

  1. L'axe se déplace vers l'interrupteur de fin de course à une vitesse moyennement rapide définie par $25,
  2. Quand le commutateur de fin de course est détecté, l'axe s'arrête un court instant défini par $26,
  3. L'axe se dégage du commutateur de fin de course d'une distance définie par $27,
  4. L'axe se déplace à nouveau en direction du commutateur de fin de course à une vitesse lente définie par $24 jusqu'à ce qu'il touche à nouveau l'interrupteur,
  5. L'axe se dégage à nouveau du commutateur de fin de course d'une distance définie par $27.

Le cycle complet de prise d'origine des axes est défini à la compilation dans le fichier config.h.
Tous les axes n'ont pas forcément besoin d'une prise d'origine, notament dans le cas des axes rotatifs qui pouraient ne pas avoir de limite en rotation et ne pas posséder de capteurs de fin de course.
Par défaut, la définition du cycle de prise d'origine est la suivante:
5 axes définis, 3 linéaires X, Y et Z, et 2 rotatifs A et B, seuls les axes linéaires ont une prise d'origine, les prises d'origines des axes rotatifs sont désactivées car mises en commentaire:

  #elif N_AXIS == 5 // 5 axis : homing
    #define HOMING_CYCLE_0 (1<<AXIS_3) // Home Z axis first to clear workspace.
    #define HOMING_CYCLE_1 (1<<AXIS_1) // Home X axis
    #define HOMING_CYCLE_2 (1<<AXIS_2) // Home Y axis
    //#define HOMING_CYCLE_3 (1<<AXIS_4) // Home 4th axis (A)
    //#define HOMING_CYCLE_4 (1<<AXIS_5) // Home 5th axis (B)

Pour activer la prise d'origine de 2 axes simultanés, nécessaire notament lorsque l'on utilise des axes clonnés, par exemple 5 axes dont X et Y clonnés definits comme suit:

  #define N_AXIS 5            // Number of axes
  #define N_AXIS_LINEAR 5     // Number of linears axis

(...)

#define AXIS_1 0        // Axis indexing value. Must start with 0 and be continuous.  
#define AXIS_1_NAME 'X' // Axis names must be in X, Y, Z, A, B, C, U, V & W.  
#define AXIS_2 1  
#define AXIS_2_NAME 'Y'  
#define AXIS_3 2  
#define AXIS_3_NAME 'Z'  
  
#if N_AXIS <3  
  #error "N_AXIS must be >= 3. N_AXIS < 3 is not implemented."  
#endif  
#if N_AXIS > 3  
  #define AXIS_4 3  
  #define AXIS_4_NAME 'X' // Letter of axis number 4  
#endif  
#if N_AXIS > 4  
  #define AXIS_5 4  
  #define AXIS_5_NAME 'Y' // Letter of axis number 5  
#endif  

La définition normale de cycle de prise d'origine pour cette configuration serait:

  #elif N_AXIS == 5 // 5 axis : homing
    #define HOMING_CYCLE_0 (1<<AXIS_3) // Home Z axis first to clear workspace.
    #define HOMING_CYCLE_1 ((1<<AXIS_1)|(1<<AXIS_4)) // Home X axis
    #define HOMING_CYCLE_2 ((1<<AXIS_2)|(1<<AXIS_5)) // Home Y axis

Vitesse de la prise d'origine

Comme décrit plus haut, il y a 2 principales phase de prise d'origine par axe: feed and seek.
La première phase (feed) dont la vitesse est définie par $25 sert à entrer en contact de la limite dans un temps raisonable. Assez rapidement si possible, mais pas trop, compte tenu des accélérations et décélerations nécessaire pour ne pas endomager la structure de la machine.
Après cette phase, on recommence la même chose, mais cette fois-ci à vitesse lente, controlée par le paramètre $24, afin d'être beaucoup plus précis dans la determination de la position.

Distance de prise d'origine

Grbl définit une distance maximum pour la recherche des capteurs de fin de course d'une valeur de 1,5 fois la distance maximum de chaque axe. La distance maximum de chaque est controlée par les paramètres $130 à $135 pour, respectivement, les axes 1 à 6 si définis.
Si dans cette distance, le capteur de fin de course n'est pas actionné, Grbl se bloquera et déclenchera l'alarme 9.
Après cette phase, chaque axe reculera d'une distance définie par $27 pour s'assurer que les capteurs de fin de course sont désengagés.