Accueil | Page d'électronique

ÉLECTRONIQUE - No. 38, Mai 1994

Commande de moteur pas-à-pas par interpolation linéaire

La génération de fréquences pour commander des moteurs pas-à-pas en interpolation linéaire exige la mise en oeuvre d'algorithmes simples mais rapides. L'intégration des boucles de calcul dans un prédiffusé Cmos a permis la réalisation par Maatel d'une carte de commande de moteurs pas-à-pas compacte et performante.

Diplômée de l'ENSERG de Grenoble et DESS Produits Nouveaus de l'ENSAM, Marie-Renée Josserand a travaillé successivement à la SEMS, chez Efcis et chez Thomson-Microsystèmes. Elle poursuit sa carrière en Recherche et développement chez Maatel, en particulier dans le domaine du contrôle des moteurs pas-à-pas.

La représentation d'une courbe sur un système numérique à coordonnées orthogonales nécessite le repérage des points du système de coordonnées les plus proches de la courbe. On peut donc remplacer cette courbe par une succession de segments de droite qui, judicieusement choisis, auront la même représentation graphique (figure 1). Ce procédé de représentation fait appel à l'interpolation linéaire.


1.- Représentation d'une courbe par des segments de droite.

Toute courbe dans l'espace peut donc être décomposée en une série de vecteurs qui, mis bout à bout, décrivent la courbe avec une précision d'autant meilleure que la longueur des vecteur est adaptée à la courbure de la courbe. On peut donc dans le cas général ramener le problème du dessin d'une courbe au simple problème de [???].

L'ALGORITHME DE BRESENHAM:
ADDITION ET COMPARAISONS

Cet algorithme, qui ne fait appel qu'à des opérations d'addition et de comparaisons, est couramment utilisé dans les systèmes graphiques pour générer des points alignés sur un écran. Supposons que l'on veuille dessiner sur un écran un segment de droite; on commencera à déterminer dans quel quadrant le segment s'inscrit et on opérera un changement de coordonnées de façon à se ramener au problème du tracé de segment dans le premier quadrant. Pour cela, on prend la valeur absolue de chacune des coordonnées et on croise leurs valeurs, si nécessaire, pour que la coordonnée sur l'axe dit "majeur" (ici l'axe des abscisses) soit la plus grande.

Soit à tracer le vecteur de coordonnées (A, B) ramené dans le premier quadrant, les points devant obligatoirement être situés sur la grille représentant par exemple le position des pixels sur un écran (figure 2). L'algorithme de Bresenham se présente comme suit: On initialise d'abord une variable appelée VAR par: Var = 2B - A, selon l'algorithme. Puis on exécute la séquence suivante: Si VAR < 0 alors VAR = VAR + 2B, et on avance d'un point selon l'axe majeur. Sinon VAR = VAR + 2B - 2A, et on avance d'un point en diagonale. On poursuit la séquence de comparaison jusqu'à l'extrémité du vecteur, ce qui correspond à A itérations.


2.- Cette figure représente les huit cas se présentant pour le tracé d'un vecteur.

Le graphique de la figure 3 illustre ce procédé. Dans notre exemple, A = 13 et B = 9. VAR = 2B - A, VAR = 18 - 13 = + 5. On avance en diagonale et on calcule: VAR = VAR + 2B - 2A soit VAR = [???].


3.- Tracé d'un vecteur selon l'algorithme de Bresenham.

[???] 13 itérations. En effet, l'algorithme étant récursif, si l'on prolonge le vecteur la même séquence se reproduira indéfiniment.

TRACER D'UN VECTEUR SUR UNE TABLE TRAÇANTE
Supposons que l'on veuille tracer le vecteur précédent sur une table traçante pilotée en X et Y par des moteur pas-à-pas. On imagine aisément que l'algorithme décrit ci-dessus puisse être utilisé à la génération physique des pas des moteurs. Dans l'exemple ci-dessous, l'axe X reçoit la fréquence de base correspondant à la vitesse de tracé souhaitée selon X. À chaque impulsion en X (pas sur l'axe majeur), l'algorithme décide si on doit ou non envoyer une impulsion (un pas) sur l'axe Y.

L'algorithme de Bresenham est aisément utilisable pour générer la fréquence interpolée représentée sur l'axe Y. Les transformations de coordonnées éventuellement nécessaires se traduisent par des opérations physiques simples: croiser les axes se fait aisément par un multiplexeur qui se chargera d'envoyer la fréquence correcte sur le bon axe; un nombre de pas négatif revient à piloter l'axe correspondant en sens inverse, la fréquence générée étant inchangée (figure 4).


4.- Les deux fréquences qui gèrent l'axe principal et l'axe secondaire pour le tracé du vecteur (A,B).

Si dans son principe cette méthode est très simple, dans la réalité on se heurte à des problèmes écaniques liés aux caractéristiques des moteurs pas-à-pas et aux limitations temporelles des systèmes réalisant l'algorithme.

DÉPASSER LES LIMITES DES MOTEURS PAS-À-PAS
L'axe majeur détermine la fréquence de fonctionnement. L'axe mineur est piloté à une fréquence globalement proportionelle à la tangente de l'angle du vecteur par rapport à l'axe majeur. Sa vitesse propre varie donc entre 0 (pente nulle) et la vitesse de l'axe majeur (angle de 45º).

Les moteurs pas-à-pas ont horreur des changements brusques de fréquence, qui les forcent à "décrocher" dès qu'on s'éloigne de la vitesse Start-Stop (valeur de la vitesse maximum au démarrage et à l'arrêt). C'est malheureusement ce qui se produit sur l'axe mineur et le problème est d'autant plus aigu qu'on veut tracer un vecteur proche de 45º. Dans ce cas la fréquence sur l'axe mineur est proche de celle de l'axe majeur mais comporte des trous ou absences d'impulsions préjudiciables au bon fonctionnement des moteurs.

En conséquence, l'utilisation de l'algorithme tel quel ne permet pas d'exploiter au mieux les performances en vitesse des moteurs pas-à-pas.

Pour ne pas décrocher en Y, il suffit que les impulsions moteurs soient régulièrement réparties. Cela est facilement obtenu en faisant travailler l'algorithme à une fréquence multiple de la férquence finale de l'axe majeur, puisque cet algorithme est récursif. On divisera alors le fréquence obtenue par le facteur multiplicatif précédent, et on obtiendra une fréquence dont la précision ralative sera égale au facteur multiplicatif. L'exemple illustre ce procédé avec un facteur multiplicatif de 4 seulement pour satisfaire à la clareté du dessin (figure 5).


5.- Illustration, pour un facteur multiplicatif de 4, des fréquences des deux axes.

Dans l'exemple, on a déroulé l'algorithme à une fréquence quatre fois supérieure à la fréquence voulue. Au bout de quatre itératons, on a divisé les fréquences obtenues par 4. Sur l'axe X on retrouve la fréquence initiale, tandis que sur l'axe Y on obtient une fréquence beaucoup plus "lisse", ce qui revient à la rendre plus périodique. La précision relative est de 1/4.

Le problème de la génération de la vitesse de base se pose donc à deux niveaux: le premier [???] est d'assurer la génération de la fréquence de l'axe majeur avec la résolution voulue, le second de travailler à une fréquance multiple suffisante pour assurer cette même résolution sur l'axe mineur.

Comme on vient de le voir, il est nécessaire de générer une fréquence multiple de celle que l'on souhaite obtenir en final. Le facteur multiplicatif N permettant de définir la fréquence de départ est d'autant plus élevé que l'on souhaite une bonne précision, il est l'inverse de la précision relative voulue: dF/F = 1/N. Pour une précision de 10%, il faut un facteur multiplicatif de 10. Pour une précision de 0,4%, il faut un facteur multiplicatif de 250.

Cela a pour conséquence, comme on peut le voir sur la figure 5, de nécessiter la génération d'une fréquence élevée avec la même précision absolue au niveau de chaque période. On évitera de générer une horloge multiple strictement périodique, car dans ce cas la précision devrait en être multipliée par le facteur N, ce qui n'est pas particulièrement aisé à réaliser avec des technique numériques. En pratique, on fabriquera une fréquence multiple pseudo-périodique, dont seule la valeur moyenne sera égale à la fréquence théorique calculét, à la précision relative 1/N près. L'écart instantanné par rapport à la fréquance théorique sera toujours inférieur à une période de cette même horloge, afin que la même précision puisse être assurée sur l'axe mineur (figure 6).


6.- Conception d'une horloge pseudo-périodique de précision relative 1/8 (1/N).

La génération de la fréquence majeure multiple est obtenue par deux divisions successives de l'horloge système.

La première division comprend un premier étage qui est simplement constitué par un diviseur par 2gh dont l'exposant gh est programmable afin de choisir la vitesse et l'accélération. Cette fréquence est immédiatement supérieure à la fréquence majeure multiple souhaitée. Elle est aussi strictement inférieure au double de la fréquence majeure multiple.

La deuxième division varie entre 1 et 2, le diviseur est 1 + N/256. Pour effectuer cette division, on intercale dans la fréquence obtenue après la première division un certain nombre de périodes "vides" ou "trous", de telle sorte que, comptabilisant N impuslions successives, on retrouve une période de durée identique à N périodes de l'horloge théorique. On introduit donc au maximum N trous parmi N impulsions. Pour ce faire, afin que la répartition des trous soit régulière, on utilise un algorithme inspiré de celui de Bresenham (figure 7).


7.- Introduction de 0 à 7 trous suivant la fréquence désirée afin d'obtenir un signal pseudo-périodique.

Ce nouvel algorithme garantit la répartition [???] base pendant une période élémentaire. L'exemple de la figure 7 illustre ce procédé sur une moyenne de 8 impulsions (N = 8), choisi également pour la clareté du dessin. Ce procédé permet d'obtenir entre deux fréquences toutes les fréquences intermédiaires séparées d'un rapport 2. Toute fréquence peut donc être obtenue à partir de l'horloge système par une division par une puissance de 2 et une division elon le procédé précédemment décrit.

Après avoir obtenu la fréquence multiple de l'axe majeur, la fréquence multiple de l'axe mineur est générée grâce à l'algorithme de Bresenham. Les fréquences résultantes sont enfin divisées par le facteur N pour donner les fréquences finales sur les axes majeur et mineur.

UNE ACCÉLÉRATION PROGRESSIVE
Pour tirer le meilleur parti des performances des moteurs pas-à-pas, il est nécessaire à chaque pas moteur de pouvoir accélérer progressivement depuis la vitesse de démarrage jusqu'à la vitesse maximum souhaitée. Rien ne s'oppose à ce que l'algorithme de Bresenham se déroule à une fréquence variable. Pour cela, à chaque pas moteur, on fera varier les paramètres de vitesse de l'axe majeur, c'est-à-dire le rapport de division de l'horloge système 2gh. L'automate de division générant les différentes fréquences sera donc programmable, les rapports de division successifs étant enchaînés sans rupture de cadence à chaque pas moteur sur l'axe majeur.

Les paramètres de vitesse ou courbe d'accélération seront mémorisés dans une table chargée au préalable dans l'automate de génration de la fréquence de travail. À chaque pas moteur, la table sera incrémentée et la nouvelle valeur (rapport de division instantanné) sera chargée dans l'automate de génération de la fréquence de travail.

Pour atteindre les vitesses maximales supportées par les moteurs (5 à 20 kHz), il est nécessaire depouvoir accélérer en souplesse à partir de la vitesse Start-Stop des moteurs (de 100 Hz à 1 kHz environ). Compte tenu des comportements des moteurs, il faut que la variation de la fréquence soit d'autant plus fine qu'on s'approche des vitesses élevées, là où les moteurs sont le plus sensible à l'accélération.

Les caractéristiques de vitesse souhaitables ont été déterminées pour couvrir la majeure partie des besoins en interpolation. Pour exploiter au mieux les performances des moteurs actuels et à venir, on a retenu les paramètres suivants: une vitesse maximale pour la fréquence de 40 kHz en pas entiers ou 5kHz en 1/8ème de pas, une résolution de 0,4% de la vitesse maximale correspondant à une drée de 0,1 ms.

Pour satisfaire la contrainte de résolution, on choisira donc une fréquence de travail 256 fois plus élevée que la fréquence finale. Pour satisfaire les performances en vitesse, on travaillera à partir d'une horloge système à 10MHz.

À partir de cette fréquence, le système d'interpolation comportera deux blocs fonctionnels: un module de division de fréquence programmable et un module de génération de fréquence interpolée.

Le premier module comporte un diviseur par une puissance de 2 et le générateur de fréquance à "trous". Le deuxième module comporte le générateur de fréquence interpolée issue de l'algorithme de Bresenham. Ces deux modules sont totalement programmables. Dans le premier, on programme le rapport de division (à chaquw moteur), dans le deuxième, on programme les paramètres d'interpolation (à chaque vecteur).

La table d'accélération, compte tenu des comportements des moteurs pas-à-pas, comporte 256 pas, ce qui permet largement d'assurer la montée en vitesse nécessaire.

GÉRER L'ACCÉLÉRATION
L'automate de division ne gère pas directement le contenu de la table d'accélération (les paramètres de vitesse mêmes), mais l'index de cette table. La table est remplie à l'initiation par des paramètres de vitesse déterminés par l'utilisateur en rapport avec les moteurs et les caractéristiques mécaniques du système. La table d'accélération de forme quelconque peut être particulièrement optimisée en fonction de l'application. En cours de tracé, l'index de la table évolue selon le protocole suivant entre deux limites MIN et MAX.

L'index est initialisé sur une position dans laquelle on a programmé une vitesse compatible avec le démarrage des moteurs. Pendant le tracé, à chaque pas moteur, l'index est incrémenté jusqu'à ce qu'il atteigne une butée, préalablement fixée par l'utilisateur, correspondant à la vitesse maximale devant être atteinte. L'index reste sur cette position tant que l'automate ne détecte pas la fin proche du vecteur, par décomptage du nombre de pas résiduels à effectuer sur l'axe majeur. En effet, une deuxième butée préprogrammée indique la vitesse à laquelle doit se terminer le vecteur en cours. L'automate compare donc en permanence le nombre de pas résiduels par rapport à l'écart entre l'index instantanné et la butée minimale afin d'amorcer en temps voulu la décélération en fin de vecteur. Ces deux butées sont spécifiques à chaque vecteur et programmées par l'utilisateur à chaque nouveau vecteur. L'intérêt de ce dispositif est de pouvoir optimiser la vitesse dans le tracé de courbes.

Lorsqu'on enchaîne le tracé de deux vecteurs, si l'angle formé par ces deux vecteurs est important, on aura, à vitesse constante sur l'axe majeur, un changement brusque de fréquence sur l'axe mineur, ce qui peut ncessiter à la fin du premier vecteur de décélérer suffisamment pour enchaîner le deuxième vecteur sans perte de pas. Par contre, dans le cas du tracé d'une courbe lisse ne comportant pas d'angles vifs, les vecteurs successifs présenteront des angles relatifs entre eux très faibles. Rien ne s'oppose alors à ce que ces vecteurs successifs ne s'enchaînent à vitesse d'autant plus élevée sur l'axe majeur que l'angle formé par ces vecteurs est faible. Le système de gestion de l'accélération est donc particulièrement bien adapté à ce cas de figure. L'utilisateur, lorsqu'il procède au découpage d'une courbe de vecteur, détermine en fonction de l'angle formé par deux vecteurs succettifs la vitesse à laquelle il pourra enchaîner ces vecteurs, donc l'index de la table d'accélération correspondant (butée MIN).


8.- Illustration de l'enchaînement de vecteur pour calculer l'accélération.

L'exemple de la figure 8 illustre cette méthode. Les vecteurs 1 et 2 forment un angle assez faible et l'utilisateur a estimé qu'une décélération minime est nécessaire (MIN1). En revanche, les vecteurs 2 et 3 forment un angle important et l'axe mineur doit changer de sens. L'utilisateur estime que la vitesse sur l'axe mineur doit revenir à une vitesse Start-Stop et programme la butée MIN2 en conséquence.

VITESSE DE TRACÉ
Dans un système mécanique isotrope, c'est-à-dire où le comportement des deux axes orthogonaux est similaire, les meilleures performances de tracé seront obtenues à vitesse tangentielle constante; donc les vecteurs seront décrits à la même vitesse linéaire quelle que soit leur orientation par rapport aux axes de référence. Cela revient à dire que la fréquence fictive équivalente vecteur (correspondant à un nombre de pas fictifs équivalents selon l'axe du vecteur) est constante. Pour obtenir ce résultat, il est nécessaire d'adapter la vitesse (ou fréquence) de l'axe majeur à chaque vecteur, selon la formule Vitesse axe majeur = Vitesse tangentielle x cosinus (angle vecteur / axe majeur).

L'utilisateur pourra adapter la vitesse de l'axe majeur à chaque vecteur selon son orientation grâce à la butée MAX de la table d'accélération. Cette butée sara programmée à chaque vecteur de façon à répondre à l'équation précédente.

ARRÊT D'URGENCE
Lorsqu'un incident majeur de produit, il est nécessaire d'arrêter les moteurs au plus vite. Une coupure de l'alimentation des moteurs n'est pas souhaitable, un couple de maintien pouvant être indispensable. L'arrêt brutal de la commande peut être tout aussi préjudiciable car une pente de pas incontrôlée peut parfois être pire que l'incident. Un protocole d'arrêt d'urgence a donc été prévu pour permettre l'arrêt à tout moment en douceur et sans perte de pas.

Par une commande appropriée d'arrêt d'urgence, l'automate d'accélération entame une procédure de décélération forcée pas par pas, jusqu'à atteindre une vitesse compatible avec l'arrêt des moteurs. Une telle vitesse aura été repérée au préalable par programmation d'un bit spécifique de la table d'accélération. Pour toute vitesse programmée, compatible avec un fonctionnement en Start-Stop, un indicateur sera positionné dans la table d'accélération, au moment du chargement de celle-ci.

La décélération forcée nécessitera donc un nombre de pas variable, dépendant de l'écart entre l'index de la table d'accélération au moment de l'incident et de l'index le plus proche pour lequel on a programmé une vitesse compatible avec l'arrêt instantanné des moteurs. Au pire le nombre de pas nécessaire sera de 256 (taille de la table). Selon la gravité de l'incident, on pourra soit interrompe le travail en cours par une remise à zéro, soit redémarrer par une simple commande sans aucune perte de pas et terminer le traçage interrompu.

INTERFACE DE PUISSANCE
Divers modes d'interfaçage ont été prévus afin de pouvoir piloter la plupart des cartes de puissance existantes d'une part, et des cartes de puissance spécialement conçues et optimisées d'autre part. Outre les modes de pilotage classiques en fréquence et sens ou par phases (pas entier ou demi-pas), ont été adjoints deux autres modes de contrôle en micro-pas (jusqu'à 256), ceux-ci étant codés en numéros de micro-pas (adresse) ou encore par "poids". Le mode adresse permet, en tenant compte de la phadse associée (également délivrée), d'adresser une mémoire fournissant les consignes de courant à un convertisseur N/A (par exemple courbes en sinus et cosinus ou courbes plus spécifiques au moteur). Le mode poids, utilisé dans cette application, assure la commande d'un multiplexeur analogique fournissant directement pour chaque micro-pas les consignes de courant adéquates (figues 9 et 10).


9.- Fonctionnement en micro-pas, huit dans l'exemple considéré.


10.- Les sinusoïdales, illustrées figure 9, sont générées par deux multiplexeurs-démultiplexeurs et appliqués au circuits de contrôle des moteurs pas-à-pas.

Dans chacun de modes utilisant la génération des phases des moteurs, un fonctionnement en "phase chopping" ou "inhibit chopping" est prévu grâce à la prise en compte d'entrées fréquence de découpage et de comparaison.

INTÉGRATION EN ASIC
Il est clair qu'une telle structure ne peut être réalisée par logiciel sur un système à microprocesseur, même aidé d'un microcontrôleur dédié. Pour obtenir les performances, on a eu recours à de la logique programmable. La logique câblée aurait nécessité un trop grand nombre de composants. Ce sont les technologies programmables actuelles diponibles qui ont permis la réalisation d'un tel automate de division dans des conditions compatibles avec l'usage qui peut en être fait.

Un système de possibilité réduite a été validé dans une structure FPGA de 10 000 portes équivalentes (Xilinx 4010). Le circuit final, appelé MIC-PAP, réunissant toutes les possibilités et permettant l'interpolation sur 3 axes a, lui, été intégré dans un Asic prédiffusé Cmos de 21 000 portes et 160 broches de Nec. L'application typique ayant été définie dans un environnement 68000, des fonctions d'environnement de ce microprocesseur ont été également intégrées dans le nouveau circuit, afin que l'ensemble forme une application particulièrement compacte et performante.

APPLICATION TYPIQUE
Construite autour du 68000, l'application typique ne requiert aucune logique extérieure. Un circuit déjà développé par Maatel, le M[???]68K, assure l'interfaçage du 68000 avec la Ro[???] du système, la Ram dynamiquem la vidéo-Ram, et les périphériques. MIC-PAP assure quant à lui l'interfaçage avec les moteurs pas-à-pas, la gestion des interruptions (auto-vectorisées ou non), le décodage complémentaire de préiphériques et la gestion des DTACK, des fonctions horloges et timers, ainsi que le contrôle d'entrées-sorties tout ou rien.

Dans une format 150 x 160 mm a été réalisée, en composants mixtes traditionnels et CMS, une carte équipée du MIC-PAP et dédiée à la gravure destinée aux machines de la société Gravograp[???] et répondant aux spécifications suivantes: microprocesseur 68000 à 10MHz, Ram dynamique 512Ko, Eprom Flash 256Ko, interface vidéo monochrome 256 lignes de 512 points, interface clavier PC/AT, interface RS-232, interface carte à mémoire, interface parallèle, interface clavier à membrane 16 touches et entrées tout ou rien, interface afficheur 2 lignes de 20 caractères, interface parallèle, et interface pour trois moteurs pas-à-pas.

Le format a été réduit de moitié pour des performances décuplées par rapport à la génération précédente des cartes de commande de moteurs Maatel. La vitesse de gravure n'est plus limitée par la commande, et l'unité cnetrale reste disponible pour toute autre tâche (composition de texte ou transfert de fichiers) pendant les opérations de gravure.

Un mode d'utilisation a été spécifiquement conçu pour permettre l'extension à des applications nécessitant l'interpolation sur un nombre d'axes illimité. Dans ce cas un attribue un circuit PIC-PAP pour 2 axes. Le troisième axe est condamné; il sert d'axe de référence (axe majeur) pour l'interpolation dans chaque circuit. Une application 10 axes interpolés nécessite donc 5 circuits MIC-PAP, qui peuvent être directement pilotés par le microprocesseur sans l'adjonction de logique extérieure. Une application de démondtration sur 6 axes, comportant donc 3 circuits MIC-PAP, a d'ores et déjà démontré le parfait fonctionnement de l'interolation dans le mode extension.


Accueil | Page d'électronique

Cette page a été entièrement crée et est gérée par Nicolas Marchildon