Tutoriel · Intermédiaire · 30 min de lecture

Prise d'origine avec fins de course : machine et pièce

Machine en boucle ouverte qui se réveille sans savoir où elle est. Prise d'origine : trois phases, limites logicielles, zéro machine différent du zéro pièce.

Le problème que la prise d’origine résout

Un axe pas à pas en boucle ouverte a une mémoire parfaite de tout ce qu’on lui a dit de faire et aucune connaissance de l’endroit où il est. Mettez-le sous tension et son compteur interne de position lit zéro — non parce que le chariot est à zéro, mais parce que c’est à cela qu’un entier s’initialise.

Pire, le compteur peut être faux alors même que la machine tourne. Un pas perdu est silencieux : le driver continue de compter les impulsions, le micrologiciel continue de les croire, et le chariot est désormais décalé en permanence d’un multiple de quatre pas complets. Rien dans la boucle de commande ne le remarquera jamais, parce qu’il n’y a pas de boucle.

La prise d’origine est la réponse aux deux. C’est l’unique moment du fonctionnement d’une machine où la position est mesurée depuis le monde physique plutôt qu’accumulée depuis un compte — et tout l’aval en dépend.

La recherche en trois phases

Roulez vers l’interrupteur, arrêtez quand il se déclenche, appelez cela zéro. Cela marche, et cela répète à environ un demi-millimètre près, ce qui est inutile. Chaque vraie machine le fait en trois passages :

Position de l'axe en millimètres en fonction du temps en secondes, montrant un cycle de prise d'origine. La phase un, une recherche rapide, roule de 46 millimètres jusqu'à la ligne de déclenchement de l'interrupteur à 2,4 millimètres. La phase deux recule jusqu'à 7 millimètres. La phase trois réapproche lentement et déclenche à nouveau l'interrupteur à 2,55 millimètres, où la trace se stabilise. Une ligne rouge en pointillés marque où l'interrupteur se déclenche, une ligne pleine à zéro marque le zéro machine G53, et une ligne en pointillés à 18 millimètres marque un zéro pièce G54 choisi comme décalage.
Vite, dégagement, lent. Le premier passage n'a qu'à trouver l'interrupteur ; la seconde approche est celle qui fixe le nombre, et elle est lente précisément pour que le point de déclenchement de l'interrupteur soit répétable. Télécharger le SVG
  1. Recherche rapide. Roulez vers l’interrupteur à une vitesse choisie pour l’impatience, pas la précision. Ce passage n’existe que pour s’approcher, et il peut parcourir toute la longueur de l’axe.
  2. Dégagement. Reculez de quelques millimètres jusqu’à ce que l’interrupteur relâche. C’est ce qui rend le troisième passage possible, et cela prouve aussi que l’interrupteur est un interrupteur et pas une entrée coincée.
  3. Lente réapproche. Approchez à nouveau à une petite fraction de la première vitesse et enregistrez le point de déclenchement. Ceci est la mesure.

La raison pour laquelle le passage lent compte est mécanique. Un micro-interrupteur à levier se déclenche quand son poussoir a parcouru une distance précise, mais le chariot continue de rouler pendant que le micrologiciel réagit et pendant que l’axe décélère. À 50 mm/s avec 2 ms de latence de détection, le chariot parcourt 0,1 mm après le point de déclenchement avant que quiconque le sache. À 2 mm/s, il parcourt 0,004 mm. L’approche lente convertit la répétabilité propre de l’interrupteur — quelques microns sur un bon micro-interrupteur — en répétabilité de la machine, au lieu de laisser la distance de décélération dominer.

Les réglages typiques ressemblent à ceci :

Paramètre Typique Pourquoi
Avance de recherche rapide 30–50 mm/s Assez vite pour ne pas agacer
Distance de dégagement 3–5 mm Assez pour relâcher l’interrupteur franchement
Avance de recherche lente 1–3 mm/s La distance de décélération devient négligeable
Retrait après prise d’origine 1–5 mm Laisse l’interrupteur relâché pour qu’il serve aussi de limite

Câbler un fin de course

L’interrupteur lui-même est le même micro-interrupteur à levier qu’un robot utilise en pare-chocs, et la règle de câblage est la même :

const int X_MIN_PIN = 9;

void setup() {
  pinMode(X_MIN_PIN, INPUT_PULLUP);   // NO to ground, pin pulled up
}

bool endstopTriggered() {
  return digitalRead(X_MIN_PIN) == LOW;
}

Câblez COM à la masse et NO à la broche, avec le rappel interne activé. Un fil coupé se lit alors comme « non déclenché », ce qui pour un interrupteur de prise d’origine est la défaillance sûre : la machine ne trouve pas l’origine et s’arrête, plutôt que de décider qu’elle y est déjà.

C’est l’inverse de la règle pour un arrêt d’urgence, où vous voulez du normalement fermé pour qu’un fil coupé arrête la machine. Un interrupteur de prise d’origine et un arrêt d’urgence ont des états sûrs opposés, et câbler les deux pareil est une vraie erreur plutôt qu’une question de style.

Deux détails qui causent l’essentiel des tracas de fins de course :

  • Anti-rebondissez-le. Un appui produit environ neuf transitions en 4,7 ms. Pendant la prise d’origine vous scrutez en boucle serrée, donc le premier front est celui qu’il faut et tout ce qui suit doit être ignoré quelques millisecondes. Ne branchez jamais une interruption qui compte les fronts.
  • Éloignez le câble du fin de course des câbles moteur. Un long fil non blindé courant parallèlement à un câble de moteur pas à pas haché capte exactement le genre de bruit qui ressemble à une fermeture d’interrupteur. Si la prise d’origine marche moteurs coupés et échoue moteurs en marche, voilà pourquoi.

Coordonnées machine et coordonnées pièce

Une fois la prise d’origine faite, la machine sait une chose précisément : où est le fin de course. Ce point, plus un décalage fixe, définit le zéro machine — en G-code, le repère G53. C’est une propriété du bâti. Il ne bouge pas, et il est le même après chaque prise d’origine.

Ce n’est presque jamais l’endroit depuis lequel vous voulez mesurer votre pièce. Les machines gardent donc une seconde origine déplaçable : le repère de pièce, G54 à G59, défini comme un décalage depuis le zéro machine.

Coordonnées machine (G53) Coordonnées pièce (G54…)
Origine Fixée par les fins de course et le bâti Là où vous la mettez
Fixée par La prise d’origine Vous, par tâche
Survit à un redémarrage Oui, après nouvelle prise d’origine Oui, stockée dans le contrôleur
Sert à Limites logicielles, changements d’outil, positions de parking Chaque ligne de la tâche réelle
Change quand vous rebridez Non Oui — c’est le propos

La séparation se rentabilise dès que vous faites deux fois la même tâche. Le G-code dit « dessinez un carré de 50 mm partant de X0 Y0 ». Scotchez la feuille quelque part de commode, joggez jusqu’à son coin, mettez les coordonnées pièce à zéro là, et lancez. Déplacez la feuille, remettez à zéro, relancez le fichier identique. Le programme n’a jamais changé ; le décalage si.

Le zéro machine est ce que le bâti connaît. Le zéro pièce est ce que la tâche connaît. Les garder séparés évite d’éditer un fichier pour déplacer une pièce.

Limites logicielles

Avec une origine machine connue, le micrologiciel peut refuser les déplacements qui sortiraient de l’enveloppe — avant que le chariot y arrive. Ce sont les limites logicielles, et elles sont strictement meilleures que la version matérielle parce qu’elles arrêtent la machine sur une décélération planifiée plutôt que par collision.

; GRBL
$20=1        ; soft limits on
$130=200.0   ; X max travel, mm
$131=200.0   ; Y
$132=60.0    ; Z

Une machine avec limites logicielles activées et sans cycle de prise d’origine est une machine avec des limites qu’elle ne peut pas appliquer, parce que l’enveloppe se mesure depuis une origine qu’elle n’a pas. La plupart des micrologiciels refusent donc de tourner avant la prise d’origine, et le message d’erreur produit n’est pas une nuisance — c’est le verrouillage qui travaille.

Les interrupteurs de limite matériels à l’autre bout de chaque axe sont un filet séparé, plus fruste, pour quand les limites logicielles sont fausses. Beaucoup de petites machines les sautent et s’en remettent aux seules limites logicielles, un compromis raisonnable quand rien sur la machine ne peut vous blesser.

La machine à états

La prise d’origine est naturellement une petite machine à états finis, et l’écrire comme telle garde le traitement des délais honnête :

enum HomeState { IDLE, SEEK_FAST, BACK_OFF, SEEK_SLOW, HOMED, FAILED };
HomeState state = IDLE;
long stateStartedAt = 0;

void homingStep() {
  switch (state) {
    case SEEK_FAST:
      if (endstopTriggered()) { stopNow(); enter(BACK_OFF); }
      // an axis that never finds its switch must give up, not grind
      else if (travelled() > AXIS_LENGTH_MM + 10) enter(FAILED);
      break;

    case BACK_OFF:
      if (!endstopTriggered() && travelled() >= BACKOFF_MM) enter(SEEK_SLOW);
      break;

    case SEEK_SLOW:
      if (endstopTriggered()) {
        stopNow();
        machinePosition = HOME_OFFSET_MM;   // the one real measurement
        enter(HOMED);
      } else if (travelled() > BACKOFF_MM * 2) enter(FAILED);
      break;
  }
}

Les branches FAILED sont la partie à copier. Un axe qui cherche et ne déclenche jamais a un interrupteur débranché, un chariot coincé, ou perd chaque pas qu’on lui donne — et dans les trois cas la bonne réponse est de s’arrêter et de le dire. Une routine de prise d’origine sans délai maximal broiera volontiers un chariot contre un bâti aussi longtemps que vous la laisserez.

Quand ça tourne mal

Symptôme Cause Correctif
Prise d’origine à un endroit légèrement différent à chaque fois Pas de second passage lent, ou trop rapide Ajoutez la réapproche ; descendez-la à 1–3 mm/s
Fonce du mauvais côté et percute Sens de prise d’origine ou sens moteur inversé Inversez le réglage de sens, ou une paire de bobine
« Fin de course déclenché » avant de bouger Interrupteur câblé normalement fermé, ou coincé Vérifiez NO contre NC ; confirmez que la broche lit haut au relâchement
Marche à froid, échoue une fois les moteurs en marche Câble du fin de course qui capte le bruit du driver Réacheminez loin des câbles moteur ; ajoutez un 100 nF à la masse
Prise d’origine bonne, puis chaque déplacement est décalé HOME_OFFSET ou retrait faux Mesurez de l’interrupteur à l’endroit voulu pour zéro
La machine refuse de bouger après mise sous tension Limites logicielles actives, pas de prise d’origine Faites la prise d’origine — c’est le verrouillage, pas une panne
Répète bien mais la pièce est au mauvais endroit Décalage pièce, pas prise d’origine Remettez G54 à zéro où est vraiment la tâche
Z fait sa prise d’origine dans le plateau Sens Z inversé, ou décalage de palpeur non réglé Vérifiez le sens avant de croire aucun décalage

Où cela se place

La prise d’origine est comment une machine en boucle ouverte récupère la seule chose qu’elle ne peut structurellement pas mesurer. Il vaut d’être clair sur ce qu’elle apporte et n’apporte pas : elle rend la position de la machine correcte au début d’une tâche, et rien de plus. Si l’axe perd des pas en pleine tâche parce que la limite de courant ou le profil d’accélération est faux, la prise d’origine entre les courses remet juste l’erreur à zéro à chaque fois sans jamais la corriger.

Le signe est simple. Une machine dont la prise d’origine est précise et qui finit une tâche au mauvais endroit a un problème de mouvement, pas un problème de prise d’origine.

Explorer le graphe

Fait partie de ces réalisations

Les projets et parcours d'apprentissage qui incluent ce tutoriel.

Pour aller plus loin

Références