Technique |
Catégories: Théorie Petit cours sur la cinématique des machines CNC.Avec l’amélioration de la qualité des guidages, moteurs, cartes CNC, on demande des vitesses de plus en plus élevées en usinage. Avant, c’était simple (air connu): on envoyait une commande de mouvement à la machine, elle l’exécutait, répondait “j’ai fini” et on lui envoyait la commande de mouvement suivant. Ensuite, pour éviter les temps d’attente pendant le retour du “j’ai fini” et l’envoi de la commande suivante, temps d’attente qui marquent la pièce au point où l’outil s’est arrêté, on a imaginé d’envoyer à la carte une ou plusieurs commandes d’avance. Donc les vecteurs sont enchaînés sans temps d’attente et c’est plus joli à l’oeil comme à l’oreille. Mais, le bonheur étant par définition la distance qui nous sépare de la carotte, ce n’est pas encore assez. Évidemment, quand deux vecteurs font un angle droit - on va raisonner en 2D pour faire simple - ça ne pose pas de problème. Mais quand ils sont presque colinéaires comme dans une courbe de Bézier, une spline ou un arc non interpolé, on se dit que c’est bien dommage de devoir freiner à chaque point pour réaccélérer ensuite. La question qui se pose immédiatement est “quel type de mouvement ma CN peut-elle exécuter ?” Les CN les plus simples ou les plus anciennes font seulement du mouvement à vitesse constante, donc forcément lente. On indique un nombre d’incréments à parcourir pour chaque axe, une fréquence pour l’axe le plus rapide, et Bresenham fait le reste. Evidemment, la vitesse est limitée puisqu’on ne peut pas lancer d’un coup à grande vitesse un moteur immobile, sauf à risquer de perdre des pas ou avoir une erreur de poursuite. Donc on a inventé l’interpolation linéaire avec trapèze de vitesses. Le trapèze, c’est en abscisse le temps ou bien les impulsions envoyées au moteur, et en ordonnée la fréquence (c’est à dire la vitesse). On a donc une montée progressive en vitesse, aussi appelée “rampe d’accélération”, puis une branche horizontale une fois que la vitesse cible est atteinte, enfin une rampe de freinage progressif. L’inertie étant la même pour accélérer que pour décélérer, le trapèze est réputé symétrique. Si la moitié de la distance est atteinte avant d’être parvenu à la vitesse cible, alors évidemment il faut rompre la rampe d’accélération et commencer immédiatement la rampe de freinage. On a alors un triangle au lieu d’un trapèze, et la vitesse cible ne sera donc pas atteinte. La carte ou le soft CN est ainsi chargé de diviser le vecteur en trois ou deux parties, en calculant la longueur de chacune. Ca se complique encore avec une commande de stop prioritaire où il faut alors improviser la rampe de freinage, mais on ne va pas entrer dans les détails. La pente du trapèze donne l’accélération, en général donnée en Hz/s. Une raffarinade dit que plus l’axe a d’inertie, moins la pente est raide. Reste qu’on est en numérique et non en analogique, donc la pente ressemble plutôt à un escalier dont la granulosité minimale est donnée par les pulses, puisque celles-ci sont indivisibles. En plus, au moins pour la même raison, on ne démarre pas la pente à partir d’une vitesse nulle, ça n’aurait aucun sens puisque le premier palier serait immobile. D’où l’apparition de la fréquence Start/Stop qui représente la fréquence de départ et d’arrivée. On passe donc d’une vitesse nulle à une vitesse d’arrachement sans intermédiaire, et de même à l’autre bout du trapèze, on passe d’une vitesse de fin de freinage à l’immobilité sans intermédiaire. Cette vitesse de départ/arrivée est la fréquence start/stop, parfois appelée “palier Start/Stop”. Elle peut être basse mais jamais nulle. Sur l’ordonnée du trapèze de vitesse, on démarre et on s’arrête donc au-dessus de 0 Hz. Si la fréquence Start/Stop est trop faible, l’accélération est plus longue pour atteindre la même vitesse. Si elle est trop élevée, le moteur risque de ne pas ou mal s’arracher à l’immobilité ou déraper en fin de mouvement. En plus, les accélérations n’étant linéaires qu’en théorie, ça permet de tricher un peu sur une pente qui devrait être une asymptote dans un monde parfait. Le retard mécanique du moteur sur les impulsions se module dans ce sens pour courber un peu la pente (fort en bas, faible en haut). Avantage ici aux servos pour leur élasticité. Sauf que quand on est en interpolation, l’élasticité n’est pas forcément la même sur tous les axes et on a parfois des résultats baroques. Evidemment, les CN de gros calibre gèrent l’inertie de l’axe de façon beaucoup plus rapprochée, et le trapèze est alors décrit par un polynôme autrement plus compliqué que le simple F=a*X+b (a → accélération ; b → fréquence start/stop). Ces deux paramètres sont l’alpha et l’oméga de la cinématique. Pour une interpolation donnée, ils dépendent tous deux de l’inertie de l’axe le plus lourd et de la puissance du moteur le plus faible. Corollaire immédiat: si la vitesse cible est en-dessous de la fréquence start/stop, le trapèze redevient une simple ligne horizontale de bout en bout. On reste à vitesse constante. Revenons aux mouvements possibles. Les cartes de base ou anciennes font uniquement du mouvement à vitesse constante, donc on est obligé de rester au-dessous de la fréquence start/stop. Ca marche, mais c’est un poil limité. Les cartes de génération suivante ont donc intégré les trapèzes de vitesse, ce qui repousse la limite de vitesse à ce que peut générer la carte comme fréquence maxi en interpolation, et ce que peuvent tenir les moteurs et la puissance. Avec un soft de pilotage qui produit directement les pulses sur le port parallèle, il y a d’autres contraintes pesantes liées au système d’exploitation et ses limites en matière de temps-réel. Hors sujet ici. Si vous usinez des formes géométriques un peu cassées, vous n’avez besoin de rien d’autre. Mais dès que vous attaquez de la courbe, la machine joue les scies sauteuses et ça écorche les sens. Y compris le toucher sur la pièce usinée. Glissons aussi sur l’interpolation circulaire. C’est une grosse variante de l’algorithme de Bresenham, qui peut avoir ou non un trapèze de vitesse selon les cartes, mais c’est juste un cas particulier. Si vous avez une courbe de Bézier, par exemple, pas d’interpolation Bézier avec trapèze possible. Donc vous interpolez de simples vecteurs presque alignés. Si vous faites un trapèze à chaque fois, ça veut dire que vous passez par une vitesse nulle (presque nulle, fréquence Start/Stop) à chaque point. Et si les vecteurs sont petits, les trapèzes devenant triangles, vous risquez de ne jamais atteindre la vitesse cible pour peu que celle-ci soit un peu élevée. Les cartes CN les plus récentes permettent donc d’interpoler un vecteur avec ou sans trapèze. Sauf que si c’est sans, c’est à vous de savoir ce que vous faites. Parce que si vous êtes au-dessus de la fréquence Start/Stop, d’abord il faut commencer par amener progressivement le moteur à cette vitesse-là, et il ne faut pas l’arrêter brusquement. Donc, sur une carte CN externe, vous devez impérativement avoir une communication rapide et un buffer de mémoire pour éviter les temps de transmission entre chaque vecteur, puisque pendant ce temps de transmission, le moteur est immobile ou plutôt en train de déraper faute de directive de mouvement immédiate. Ce qui veut dire qu’avoir dans du code ISO une possibilité de passer à vitesse constante ne sert à rien si vous n’accompagnez pas la montée en vitesse et la redescente en-dessous de la fréquence Start/Stop. Perte de pas ou Drag Error assurée ! Ne demandez pas à une carte CN bon marché de faire en interne les calculs de montée et descente en vitesse. Ca demande des fonctions mathématiques un peu avancées et donc une unité FPU pour le calcul en virgule flottante. Les vieilles SM-Motion du début des années 90 le font pour la partie accélération ; elles sont capables de monter en régime vers une vitesse cible le long de plusieurs vecteurs, et freiner aussi le long de plusieurs vecteurs. Mais ça reste rare, donc cher, et l’on a tendance - avec raison à mon avis - de considérer que c’est au PC de faire les calculs compliqués et à la CN d’en exécuter les résultats. La méthode géométrique pour déterminer une bonne dynamique de trajectoire à vecteurs multiples est de calculer l’angle 2D ou 3D que font les vecteurs qui s’enchaînent. Si les vecteurs sont alignés, la vitesse de passage est la vitesse cible ; si les vecteurs font un angle de 90° ou plus, la vitesse de passage est la fréquence Start/Stop ; entre les deux, on module de façon plus ou moins linéaire. Ca marche pas trop mal sur le papier, du moins a priori. En pratique, on se heurte à un problème simple : si vous avez un virage à 180° de grand rayon, par exemple 500 mm, constitué par une enfilade de 60 vecteurs qui font 3° d’angle chacun, chaque angle est faible et vous pouvez passer l’enchaînement à une vitesse tangentielle élevée. Sauf que… Sauf que si le virage fait 5 mm de rayon, vous avez toujours 60 vecteurs qui font le même angle de 3° entre eux. Or, il n’est plus question de passer à fond la caisse, vous imaginez bien pourquoi. Le calcul qui se contente de prendre en considération les angles entre chaque enchaînement de vecteurs est facile à coder mais vous fera sortir de la route dès que le virage sera serré. Vous pouvez alors ajouter un paramètre de rayon pour corriger, mais vous aurez encore des soucis avec les changements de direction dans les virages en S. Méthode limitée donc, et pour le moins dangereuse. La methode cinématique consiste à considérer un seul moteur à la fois et regarder les changements de fréquence qu’on lui impose. On se contrefout de savoir si les axes sont cartésiens et quelle géométrie globale ça donne, surtout avec des axes rotatifs où la notion d’angle devient un peu surréaliste. On ne se soucie que des moteurs, et un par un encore. Si deux vecteurs à vitesse tangentielle identique ne sont pas alignés, forcément la vitesse de rotation de chaque moteur change quand on passe de l’un à l’autre. Le calcul consiste à partir du point de départ et regarder si les augmentations successives de fréquence pour ce moteur restent en-deçà de la pente d’accélération maxi. Et idem pour les décélérations. Les formules mathématiques applicables sont celles du mouvement rectiligne uniformément varié (programme de physique de terminale scientifique si je ne m’abuse) : X=G*T²/2 et sa dérivée V=G*T, qu’on peut ramener, pour calculer la distance nécessaire au passage d’une vitesse à l’autre, à la formule X=(V2-V1)²/(2*G), G étant la capacité d’accélération présumée constante. Vous avez ici la preuve qu’on est dans du calcul non linéaire et qu’il vaut donc mieux avoir des capacités de traitement arithmétique. Yes, ça marche aussi pour les distances de freinage en voiture, c’est bien le CARRÉ de la vitesse qui joue, pour peu que G soit constante. Prudence donc… Digression : si l’on raisonnait avec la méthode géométrique, on devrait appliquer un calcul d’accélération centrifuge G=R*A² avec G en unité de distance/s², A en radians/s et R le rayon dans cette même unité de distance, cette accélération devant rester en-dessous des capacités d’accélération cartésiennes de la machine. Bon courage. Mais revenons à nos moutons. Quand on tombe sur un vecteur qui fait faire un saut trop grand à la fréquence pour la distance parcourue, il faut diminuer cette fréquence. Si le vecteur est long, alors évidemment il faut le découper à son début en plusieurs vecteurs interpolés qui feront des paliers successifs de vitesse, afin de ne pas le pénaliser tout entier, ce qui réduirait inutilement la vitesse sur une portion de parcours. En fait, la première partie du calcul consiste à détecter pour chaque moteur les montées ou descentes en fréquence qui dépassent les capacités d’accélération. Quand on trouve, on diminue la fréquence en interpolant éventuellement un nouveau point au bon endroit. Il va de soi qu’il faut regarder l’axe le plus critique, ce qui nécessite un calcul parallèle avec autant de dimensions que d’axes. Un peu complexe, mais l’avantage est qu’on est alors totalement dégagé de l’aspect géométrique de la question. Et pour cause, sur une machine d’usinage, à un instant donné, chaque moteur se fiche totalement de savoir ce que les autres font. Une fois qu’on a une enfilade de vecteurs qui respectent globalement les possibilités d’accélération/décélération, il ne reste plus qu’à vérifier dans le détail si les sauts de fréquence d’un vecteur à l’autre restent sous le seuil de la fréquence Start/Stop, ou plutôt d’une fréquence maximale de saut. Elles sont voisines si le moteur a un couple à peu près constant quel que soit son régime. Les moteurs pas-à-pas perdant en couple avec la vitesse, il peut-être judicieux d’avoir une fréquence de saut plus basse, voire une fréquence de saut variable selon la vitesse, mais là ça deviendrait vraiment compliqué à gérer. Si un enchaînement change la fréquence trop brutalement, alors il faut ajouter des paliers intermédiaires qui doivent à leur tour respecter la pente maximale. Bref, c’est pas simple à calculer, surtout à cause de l’aspect parallèle du calcul, mais pas impossible non plus. Maintenant, vous savez à peu près tout sur l’accélération et la fréquence Start/Stop. Pour utiliser une image, je dirais que l’accélération est la pente de l’escalier qui mène d’un étage de vitesse à un autre (en montée comme en descente), et la fréquence Start/Stop la hauteur des marches de cet escalier. Si la pente est trop raide ou si les marches sont trop hautes, les lois de la physique étant ce qu’elles sont, vous vous cassez la gueule. B. Lenoir-Welter Galaad Software |
Le contenu de ce site est soumis à une License Creative Commons (détails). |