Liste des commandes

Accès rapide :

[Registre de status]
[DFH : Define Home]
[LFIL : Load Filter]
[LPEI/LPES : Load Position For Interrupt/Stopping]
[LTRJ : Load Trajectory Parameters]
[MSDKI : Mask interrupt]
[PORT8 : Port8/Port12]
[RDDP : Read Desired Position]
[RDDV : Read Desired Velocity]
[RDRP : Read Real Position]
[RDIP : Read Index Register]
[RDRV : Read Real Velocity]
[RDSIGS : Read Signal Register]
[RDITSUM : Reda Integration Term Summing Value]
[RST : Reset]
[RSTI : Reset Interrupt]
[SBPA/SPBR : Set BreakPoint Absolu/Relative]
[SIP : Set Index Position]
[STT : Start Motion]
[UDF : Update Filter]

L'ensemble des commandes va être décrit sommairement. La datasheet du LM fournit de plus amples informations sur chacune d'elles. Leur utilisation sera détaillée par la suite. Les commandes sont indiquées avec les séquences d'opérations nécessaires à leur envoi correct.

Un certain nombre de commandes font intervenir des données. Ces données sont des valeurs qui ont une unité. Les unités sont :

  • Le nombre d'impulsions du codeur*4.
    La multiplication correspond à la méthode utilisée par le LM pour décoder les impulsions générées par le codeur. Pour une roue codeuse (codeur) ayant 500 points par tour, le LM va décoder 2000 impulsions (COUNT) par tour. Cette unité dépend donc du codeur utilisé. En fonction du nombre de points du codeur par tour, du montage mécanique, un point du codeur peut représenter un déplacement de x mm, ou bien une rotation de x degrés, etc.Cette unité de "nombre d'impulsions du codeur" sera notée COUNT.
    Le compteur de position, par exemple utilise le COUNT pour mesurer les déplacements.

  • La période d'échantillonage du LM.
    Le LM est un "processeur" qui exécute des instructions (ces instructions sont inamovibles et inaccessibles). La période d'échantillonage est déterminée par la fréquence de l'horloge connectée au LM. La période est de 2048/F_Clock. Avec une horloge à 8MHz, la période est de 256µs soit une fréquence d'échantillonnage de 3,906kHz. Cette unité de temps est notée par la suite 'SAMPLE'.

  • Plusieurs unités composées :
    • COUNT/SAMPLE correspond au nombre d'impulsions du codeur multiplié par 4 par période d'échantillonage (256µs à 8MHz) (vitesse).
    • COUNT/SAMPLE/SAMPLE qui correspond à la variation du nombre de COUNT/SAMPLE à chaque période d'échantillonage. (variation de vitesse, soit accélération).

 

Registre de status

Ce registre de status peut être lu absolument n'importe quand. Il est d'ailleurs très souvent nécessaire de le lire en plein milieu d'une commande. Il est toujours disponible et à jour. Les informations qu'il contient sont très importantes. Attention, elles peuvent être ambiguës.

Lecture/Ecriture
Registre
Valeur
Lecture Commande (PS=0) Registre de status

Le status est un octet contenant diverses informations :

Bit
Signification
Remarque
7 Moteur arrêté.  
6 Breakpoint(point de contrôle) atteint Pour que ce bit passe à 1, il est nécessaire d'avoir fixé un breakpoint par SET_BREAKPOINT_ABSOLU ou SET_BREAKPOINT_RELATIF.
5 Erreur de position excessive Ce bit passe à 1 lorsque l'erreur entre la position désirée et la position réelle a dépassé une certaine limite ET qu'il a été indiqué une valeur provoquant une erreur par la commande LOAD_POSITION_ERROR_FOR_INTERRUPT ou LOAD_POSITION_ERROR_FOR_STOPPING.
4 Bouclage du compteur du codeur La valeur de la position est passée de la valeur maximale (+2^31) à la valeur minimale (-2^31) ou vice-versa (débordement du compteur).
3 Impulsion (à 0) sur la ligne d'index (Point de référence à chaque tour sur le codeur) Si la ligne d'index est reliée ...
2 Le générateur de trajectoire a terminé. A l'état haut, il indique que le générateur de trajectoire a terminé sa génération (il a effectué l'ensemble de la trajectoire demandée et la consigne de position est arrivée à la position finale demandée). Par contre le moteur peut toujours être en train de tourner pour corriger l'erreur entre la position désirée et la position réelle.
1 Une commande erronée a été envoyée A l'état haut, il est NECESSAIRE de corriger cette erreur en remettant ce bit à 0 par un RESET_INTERRUPT ou bien en appliquant un reset externe au LM. AUCUN autre ordre ne peut être ENVOYE tant que ce bit reste à 1.
0 LM occupé A l'état haut, ce bit indique que le LM est occupé et qu'il n'est pas actuellement possible de lui envoyer un ordre.

Par la suite, il sera fait référence dans les commandes au bit 0 de ce registre de status qui doit être à 0 pour pouvoir communiquer avec le LM. Il sera indiqué qu'on attend que le bit BUSY (LM occupé) passe à 0.
Il convient donc dans ce cas de lire le registre de status (dans une boucle par exemple) jusqu'à ce que ce bit 0 passe à 0.

 

Reset

Cette commande permet de réinitialiser totalement le LM. Elle est disponible à tout instant.
Tous les registres du LM sont réinitialisés (position, erreur, trajectoire, filtre d'asservissement, etc). Il est nécessaire de reconfigurer les différents éléments après cette commande.

La boucle d'asservissement est désactivée (il n'y a plus de correction de l'erreur de position au repos - le moteur ne travaille pas - tant que l'on ne recharge et réexecute pas une trajectoire).

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x00 (RESET)

 

Port 8/Port 12

Cette commande n'a aucune utilité dans le cas du LM629. Elle sert uniquement dans le cas du LM628 pour sélectionner le nombre de bits pour la conversion numérique/analogique. Dans le cas du LM629, il n'y a PAS de conversion, c'est un signal PWM qui sert de sortie.

Dans le cas du LM629, ces commandes ne doivent pas être utilisées (ou alors uniquement Port 8 qui est la commande par défaut au démarrage)

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x05 (PORT8)

 

Define Home

Cette commande remet le compteur de position interne à 0. Cette commande d'apparence simple est à double tranchant. Si elle est executée au repos, seule la valeur de la position sera remise à 0. Par contre, si une trajectoire a été chargée, la remise à 0 du registre de position pourra affecter cette trajectoire, notamment lorsqu'on l'executera ou la modifiera. S'il est possible de se passer de cette comande, cela peut simplifier les opérations. Un reset du LM exécute implicitement cette commande.

Cette commande peut s'avérer utile lors de l'utilisation d'un LM avec un microcontrôleur très limité.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x02 (DFH)

 

Set Index Position

Cette commande doit indiquer que la prochaine fois que l'index sera rencontré (broche IN), la position absolue du compteur de position sera enregistrée dans un registre particulier. Non testée. Evidemment, cette commande n'est utilisable que si le codeur dispose d'un index et est câblé correctement.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x03 (SIP)

 

Load Position Error for Interrupt/ Load Position Error for Stopping

Ces commandes permettent de fixer un seuil pour l'erreur entre la position réelle et la position désirée. Le dépassement de ce seuil ne modifie pas l'erreur mais provoque :

  • Passage du signal d'interruption (HI) à 1 si cette interruption est activée.
  • Passage à 1 du bit 5 du registre de status.
  • Arrêt du moteur, uniquemernt dans le cas de Load Position Error for Stopping.

La 2ème commande n'a pas été testée. Cependant, il y a fort à parier que les 2 commandes utilisent le même seuil. Il n'est donc sans doute pas possible d'avoir un seuil d'avertissement et un seuil d'arrêt distincts.
Il doit n'y avoir qu'un seul seuil, celui-ci déclenchant soit un avertissement soit un avertissement ET un arrêt du moteur en fonction de la commande utilisée pour envoyer ce seuil. De plus, il faudrait déterminer exactement comment est réalisé l'arrêt du moteur (Souple, Brutal ???).

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x1B (LPEI) - 0x1A (LPES)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort du seuil -- en COUNT
Ecriture Donnée (PS=1) 8 bits poids faible du seuil -- en COUNT

 

Set Breakpoint Absolute/ Set Breakpoint Relative

Ces commandes permettent de spécifier un point de contrôle (breakpoint) en COUNT sur 32 bits. Lorsque la position réelle ou peut-être la position désirée (Mystère du LM ???) atteint cette valeur :

  • Passage du signal d'interruption (HI) à 1 si cette interruption est activée.
  • Passage à 1 du bit 6 du registre de status.

Pour le Set Breakpoint Absolute, la position de contrôle est une position absolue en COUNT. Pour le Set Breakpoint Relative, la position de contrôle est relative au point de destination (Chose qui n'est pas toujours clairement définie. Ex : Si le LM n'a pas encore effectué de trajectoire, ce point de destination évolue en même temps que la position actuelle; par contre si le LM est en train d'effectuer une trajectoire, ce point est normalement celui indiqué par la distance à parcourir ...) de la trajectoire. Ces 2 commandes n'ont pas été testées, et il reste un certain nombre d'incertitudes dessus.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x20 (SBPA) - 0x21 (SBPR)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort de la position de breakpoint (relative/absolue) -- en COUNT
Ecriture Donnée (PS=1) 8 bits poids mi-fort de la position de breakpoint (relative/absolue) -- en COUNT
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids mi-faible de la position de breakpoint (relative/absolue) -- en COUNT
Ecriture Donnée (PS=1) 8 bits poids faible de la position de breakpoint -- en COUNT

 

Mask Interrupts

Cette commande permet d'indiquer quelles sont les causes d'interruption qui vont effectivement déclencher une interruption (signal HI). Dans tous les cas, qu'une cause d'interruption soit activée ou non, les bits d'état du status seront positionnés dès qu'une des conditions à leur changement est satisfaite.(cf registre de status)

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x1C (MSDKI)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort du masque. Aucun de ces bits n'est pris en compte
Ecriture Donnée (PS=1)

8 bits poids faible du masque
bit 7 : Non Utilisé.
bit 6 : Interruption due à un point d'arrêt (Breakpoint).
bit 5 : Interruption due à une erreur d'asservissement trop importante.
bit 4 : Interruption due à un débordement du compteur du codeur (Wraparound Interrupt).
bit 3 : Interruption due à une détection d'un index (codeur).
bit 2 : Interruption due à la fin de génération d'une trajectoire (ie : le générateur de trajectoire a terminé son travail, mais la position actuelle n'est pas encore forcément celle que l'on souhaitait atteindre ...).
bit 1 : Interruption due à une commande erronée.
bit 0 : Non Utilisé.

 

 

Reset Interrupts

Cette commande permet de remettre à 0, les différents flags d'interruptions (visibles notamment dans le registre de status).
Cette remise à 0 acquitte la(les) interruption(s).
IL EST notamment INDISPENSABLE D'ACQUITER le bit d'erreur de commande si il survient (à cause d'une commande réellement erronée ou bien d'un parasite, etc), sous peine de ne pouvoir envoyer aucune autre commande !!!
Certains de ces flags sont remis à 0 automatiquement lors de telle ou telle action.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x1D (RSTI)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort des IT à effacer. Aucun de ces bits n'est pris en compte
Ecriture Donnée (PS=1)

8 bits poids faible des IT à effacer
bit 7 : Non utilisé.
bit 6 : Interruption due à un point d'arrêt (Breakpoint).
bit 5 : Interruption due à une erreur d'asservissement trop importante.
bit 4 : Interruption due à un débordement du compteur du codeur (Wraparound Interrupt).
bit 3 : Interruption due à une détection d'un index (codeur).
bit 2 : Interruption due à la fin de génération d'une trajectoire.
bit 1 : Interruption due à une commande erronée.
bit 0 : Non utilisé.

 

 

Load Filters Parameters

Cette commande permet de charger les paramètres du filtre PID. Il est INDISPENSABLE de charger des paramètres pour le filtre PID. ATTENTION, ces paramètres sont juste 'chargés' et non appliqués (il faudra exécuter UPDATE FILTER par la suite).

Utilité de ces paramètres : l'erreur entre la position actuelle et la position souhaitée (délivrée par le générateur de trajectoire du LM) sera multipliée par le coefficient P indiqué, l'intégrale de cette erreur par I et sa dérivée par D. (cf asservissement)

A l'initialisation, ces 3 paramètres (P, I, D) sont nuls
. Si P est NUL, alors cette erreur sera multipliée par 0. Et la commande du moteur sera toujours NULLE, donc il n'avancera PAS.
Il faut donc charger au minimum une valeur non nulle pour P. (même faible); dans ce cas la commande sera faible aussi, du moins il faudra une erreur TRES GRANDE pour que le moteur commence à avancer).

La boucle d'asservissement (la valeur de la commande du moteur) est recalculée à chaque période d'échantillonage qui est exprimée par la constante SAMPLE. En réalité, cela est vrai pour la partie P et la partie I, mais la partie D (dérivée) peut être calculée moins souvent (pour commencer on peut laisser cette période identique à la période utilisée par P et I). La période utilisée pour le calcul de la partie D est indiqué par la suite.

Lorsque l'on effectue le calcul de la boucle, on prend la différence entre la position désirée (générateur de trajectoire) et la position actuelle (compteur du codeur). Cette erreur, on va en faire la somme à chaque fois que l'on fait le calcul pour en obtenir l'intégrale de l'erreur. Ainsi, si l'erreur reste constante, l'intégrale elle, va augmenter et l'on va pouvoir corriger cette erreur constante dite d'ordre 0. Seulement, si pour une raison quelconque, l'asservissement ne parvient plus à corriger l'erreur, non seulement celle-ci va augmenter, mais en plus le terme intégral (la somme des erreurs) va augmenter encore plus. Il est donc possible d'indiquer une LIMITE à cette somme des erreurs. C'est le but de la valeur "limite pour le terme d'intégration de l'erreur" ...

 

En plus des 3 termes P, I, D et de la limite pour l'intégrale de l'erreur, on spécifie 2 autres octets indiquant :

  • l'intervalle de temps utilisé pour effectuer la dérivation. Cet intervalle de temps affecte le comportement du terme D dans le filtre. Dans un premier temps, on peut le mettre au minimum (0). La durée de cet intervalle est calculée par :

d=(x+1)*(2048/F_Clock) soit d/(2048/F_Clock)-1=x,
d
étant la durée de l'intervalle souhaité
x la valeur que l'on envoie au LM (bits 8 à 15, cf 2ème tableau).


Quelques exemples :

    Valeur (x) envoyée au LM
    Durée de l'intervalle
    0 2048/F_Clock. (F_Clock est la fréquence de l'horloge appliquée au LM). Pour une horloge à 8MHz, on obtient : 256µs
    1 2*(2048/F_Clock) : 512µs à 8MHz
    2 3*(2048/F_Clock) : 768µs à 8MHz
    ...
    255

    256*(2048/F_Clock) : 65536µs = 65,536ms à 8MHz


  • si l'on souhaite mettre à jour le coefficient P
  • si l'on souhaite mettre à jour le coefficient I
  • si l'on souhaite mettre à jour le coefficient D
  • si l'on souhaite mettre à jour la limite pour le terme d'intégration de l'erreur.

    Le nombre total d'octets envoyés pour toute la commande va donc dépendre des bits que l'on a positionné à 1 dans les 2 premiers octets de la commande.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x1E (LFIL)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits, valeur de l'intervalle de dérivation. (cf tableau au dessus).
Ecriture Donnée (PS=1)

8 bits poids faible indiquant ce qui sera chargé par la suite.
bit 7 : Non utilisé.
bit 6 : Non utilisé.
bit 5 : Non utilisé.
bit 4 : Non utilisé.
bit 3 : Chargement du coefficient P à suivre.
bit 2 : Chargement du coefficient I à suivre.
bit 1 : Chargement du coefficient D à suivre.
bit 0 : Chargement du terme limite d'intégration à suivre.

    Les 3 opérations suivantes ne sont effectuées que si le bit 3 était à 1
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort de P -- en ???
Ecriture Donnée (PS=1) 8 bits poids faible de P
    Les 3 opérations suivantes ne sont effectuées que si le bit 2 était à 1
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort de I -- en ???
Ecriture Donnée (PS=1) 8 bits poids faible de I
    Les 3 opérations suivantes ne sont effectuées que si le bit 1 était à 1
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort de D -- en ???
Ecriture Donnée (PS=1) 8 bits poids faible de D
    Les 3 opérations suivantes ne sont effectuées que si le bit 0 était à 1
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort du terme limite de l'intégrale de l'erreur
Ecriture Donnée (PS=1) 8 bits poids faible du terme limite de l'intégrale de l'erreur

 

Update Filter

Cette commande permet d'appliquer le filtre précédemment chargé. Cette commande n'est pas censé pouvoir provoquer de 'command error', mais ne sait-on jamais ...

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x04 (UDF)

 

Load Trajectory Parameters

  • Cette commande charge une trajectoire en mémoire. La trajectoire est définie par son profil trapezoïdal, c'est à dire :
    • une accélération
    • une vitesse maximale
    • une position à atteindre (uniquement en mode position).
    • Chacun de ces éléments peut être défini en absolu ou en relatif par rapport aux éléments actuels, c'est à dire par rapport à :
      • l'accélération actuelle.
      • la vitesse maximale de consigne actuelle.
      • la position à atteindre actuelle.

 

Il est possible de charger une deuxième trajectoire pendant l'exécution d'une première trajectoire (déplacement), d'où l'interêt d'indiquer les coordonnées en relatif, pour dire "va 3cm plus loin" par exemple.

ATTENTION : Lors de l'exécution d'une trajectoire, il n'est pas possible de changer l'accélération (seules la vitesse, et la position à atteindre peuvent être modifiées). Un chargement de l'accélération, entraînera une erreur de commande, positionnant à 1 le bit correspondant du status. Ce bit devra être remis à zero par la commande RESET_INTERRUPTS avant de pouvoir effectuer quoi que ce soit d'autre.

  • La trajectoire ne sera pas directement exécutée, et il sera nécessaire d'envoyer un START_MOTION pour la lancer.
  • La position à atteindre est exprimée par un nombre signé de 32 bits, en COUNT
  • La vitesse maximale est exprimée par un nombre non-signé en virgule fixe de 16.16 bits, en COUNT/SAMPLE
  • L'accélération maximale est exprimée par un nombre non-signé en virgule fixe de 16.16 bits, en COUNT/SAMPLE/SAMPLE

La notation x.y bits, représente le nombre envoyé en virgule fixe.

  • Les 16 bits devant la virgule représentent la partie entière envoyée.
  • Les 16 bits après la virgule, la partie décimale.

Pour convertir un nombre rationnel (float par exemple) en un nombre à virgule fixe de 16 bits, on multiplie (cette opération doit être ffectuée en virgule flottante) ce nombre par 2^16 soit 65536, et on garde la partie entière du résultat (en le convertissant en entier par exemple), on a ainsi la représentation en virgule fixe 16.16 bits du nombre.

Par exemple : 0x12345678, représente le nombre 0x1234 (soit 4660) pour la partie entière (16 premiers bits), et 0x5678 représente la partie décimale. Pour obtenir la valeur décimale, on divise 0x5678 par 65536, ce qui donne : 0,337768. Le nombre final est donc : 4660,337768.

Pour chaque élément, il n'est pas possible d'utiliser toutes les valeurs, seule une plage de valeurs est possible.

Donnée
Plage autorisée
Position De -2^30 à 2^30-1, soit 0xC0000000 à 0c3FFFFFFF ou encore de 1073741824 à 1073741823
Vitesse Toute la plage. (0 à 65536,99998 soit 0x00000000 à 0xFFFFFFFF)
Accélération De 0 à 2^30-1, soit de 0 à 0x3FFFFFFF ou encore de 0 à 16383,99998
  • Les 3 bits permettant l'arrêt du moteur autorisent 3 méthodes différentes. Ces bits positionnés à 1, font que la trajectoire envoyée est ignorée, et qu'il n'y a qu'un arrêt d'effectué. Si un de ces bits est positionné à l'arrêt, la commande de trajecoire n'aura PAS d'effet :
  • bit 2 : Arrêt doux, la trajectoire est "amputée" et le LM commence immédiatement une phase de décélération, en utilisant la décélération (identique en valeur absolue à l'accélération) programmée. (Que se passe-t-il si le LM est déjà en train de décélérer ? Il continue probablement !)
  • bit 1 : Arrêt rapide, la trajectoire est "coupée" net et la décélération est immédiate.
  • bit 0 : La commande au moteur est stoppé (que se passe-t-il au niveau de la trajectoire ? amputée, non amputée, postion à atteindre ? -- Non testé)
Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x1F (LTRJ)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort
bit 7 : Non utilisé.
bit 6 : Non utilisé.
bit 5 : Non utilisé.
bit 4: Sens de rotation (uniquement en mode vitesse).
bit 3: 1=Mode Vitesse, 0=Mode Position.
bit 2: Arrêt doux du moteur. (n'éxécute pas la trajectoire indiquée mais arrête celle en cours)
bit 1: Arrêt rapide du moteur. (idem)
bit 0: Arrêt immédiat. (idem)
Ecriture Donnée (PS=1)

8 bits poids faible
bit 7 : Non utilisé.
bit 6 : Non utilisé.
bit 5 : Chargement de l'accélération à suivre.
bit 4 : 1=Accélération relative, 0= Accélération absolue.
bit 3 : Chargement de la vitesse à suivre .
bit 2 : 1=Vitesse relative, 0=Vitesse absolue.
bit 1 : Chargement de la position à atteindre à suivre.
bit 0 : 1=Position relative, 0=Position absolue.

    Les 6 opérations suivantes ne sont effectuées que si le bit 5 était à 1
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort de l'accélération -- en COUNT/SAMPLE/SAMPLE
Ecriture Donnée (PS=1) 8 bits poids mi-fort de l'accélération
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids mi-faible de l'accélération
Ecriture Donnée (PS=1) 8 bits poids faible de l'accélération
    Les 6 opérations suivantes ne sont effectuées que si le bit 3 était à 1
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort de la vitesse -- en COUNT/SAMPLE
Ecriture Donnée (PS=1) 8 bits poids mi-fort de la vitesse
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids mi-faible de la vitesse
Ecriture Donnée (PS=1) 8 bits poids faible de la vitesse
    Les 6 opérations suivantes ne sont effectuées que si le bit 1 était à 1
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids fort de la position -- en COUNT
Ecriture Donnée (PS=1) 8 bits poids mi-fort de la position
Lecture/Polling Commande (PS=0) registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Donnée (PS=1) 8 bits poids mi-faible de la position
Ecriture Donnée (PS=1) 8 bits poids faible de la position

 

Start Motion

Exécute la trajectoire précédemment chargée. Si cette trajectoire se révèle impossible (Chargement d'une accélération lors d'une trajectoire, etc), il va y avoir une erreur de commande "command error", etc ...

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x01 (STT)

 

Read Signals Register

Cette commande permet de lire plusieurs bits d'informations. 8 de ces bits sont les bits de status. Une grande partie de ces bits n'ont pas été vérifiés en raison de leur peu d'intérêt.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x0C (RDSIGS)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids fort
bit 7 : 1=Une interruption est active (HI à 1).
bit 6 : Une accélération est en attente d'application (chargée par LTRJ). Ce bit est remis à zéro par un STT.
bit 5 : 1=La commande Update Filter a été envoyée. Ce bit est remis à zéro à la fin de la période d'échanitllonnage en cours (quand le filtre est REELLEMENT mis à jour).
bit 4 : 1=Vitesse chargée par LTRJ positive (uniquement en mode vitesse).
bit 3 : 1= Mode Vitesse, 0=Mode Position.
bit 2 : Génération de trajectoire terminée.
bit 1 : Stopper en cas d'erreur trop grande.
bit 0 : Mode 8 bits.
Lecture Donnée (PS=1)

8 bits poids faible
bit 7 à 1 : bits de status
bit 0 : 1=Une commande d'acquisition d'index (SIP) a été envoyée et l'index n'est pas encore passé. Ce bit est remis à 0 au passage de l'index.

 

Read Index Register

Cette commande permet de lire la position correspondant au dernier index. Cette postion ne sera enregistrée que lorsque le LM reçoit l'ordre SET_INDEX_POSITION qui lui indique d'enregistrer la prochaine position correspondant à un index. Le bit 3 de RDSIGS permet de savoir si l'index est passé ou non. Cette commande n'a pas été vérifiée.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x09 (RDIP)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids fort position de l'index enregistré, en COUNT
Lecture Donnée (PS=1)

8 bits poids mi-fort position de l'index enregistré, en COUNT

Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids mi-faible position de l'index enregistré, en COUNT
Lecture Donnée (PS=1)

8 bits poids faible position de l'index enregistré, en COUNT

 

Read Desired Position

Cette commande permet de lire la position désirée. Il s'agit de la position générée par le générateur de trajectoire. Cette position est donnée en COUNT

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x08 (RDDP)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids fort position désirée, en COUNT
Lecture Donnée (PS=1)

8 bits poids mi-fort position désirée, en COUNT

Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids mi-faible position désirée, en COUNT
Lecture Donnée (PS=1)

8 bits poids faible position désirée, en COUNT

 

Read Real Position

Cette commande permet de lire la position actuelle (position recréée à partir des impulsions de la roue codeuse). Cette position est donnée en COUNT.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x0A (RDRP)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids fort position actuelle, en COUNT
Lecture Donnée (PS=1)

8 bits poids mi-fort position actuelle, en COUNT

Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids mi-faible position actuelle, en COUNT
Lecture Donnée (PS=1)

8 bits poids faible position actuelle, en COUNT

 

Read Desired Velocity

Cette commande permet de lire la vitesse désirée. Il s'agit de la vitesse qu'utilise la générateur de trajectoire pour générer sa trajectoire. Cette vitesse est donnée en COUNT/SAMPLE.

Le format est nombre SIGNE en virgule fixe de 16.16 bits. Il s'agit du même format que pour la commande LOAD_TRAJECTORY_PARAMETERS sauf que le nombre est SIGNE (le signe dépend du sens du déplacement).

Dans LOAD_TRAJECTORY_PARAMETERS, on indique la vitesse MAXIMALE. Ici il s'agit de la vitesse en cours générée par le générateur de trajectoire. Elle va donc évoluer entre - vitesse maximale et + vitesse maximale. Elle suit typiquement le profil trapézoïdal.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x07 (RDDV)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids fort vitesse désirée, en COUNT/SAMPLE (partie entière)
Lecture Donnée (PS=1)

8 bits poids mi-fort vitesse désirée, en COUNT/SAMPLE (partie entière)

Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids mi-faible vitesse désirée, en COUNT/SAMPLE (partie décimale)
Lecture Donnée (PS=1)

8 bits poids faible vitesse désirée, en COUNT/SAMPLE (partie décimale)

 

Read Real Velocity

Cette commande permet de lire la vitesse réelle (elle est obtenue par dérivation (plus exactement par différenciation) de la position réelle). Le format est un nombre SIGNE sur 16 bits.(ni entier sur 32 bits, ni en virgule fixe !). Attention aux comparaisons entre vitesse réelle et vitesse désirée !

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x0B (RDRV)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids fort vitesse réelle, en COUNT/SAMPLE (partie entière)
Lecture Donnée (PS=1)

8 bits poids faible vitesse réelle, en COUNT/SAMPLE (partie entière)

 

Read Integration Term Summing Value

Cette commande permet de lire le terme intégral de l'erreur entre position réelle et désirée. C'est à dire la somme des erreurs ajoutées à chaque période d'échantillonage. C'est d'ailleurs cette valeur qui est limitée par le paramètre "terme limite de l'intégrale de l'erreur" de la commande LOAD_FILTER_PARAMETERS.

Lecture/Ecriture
Registre
Valeur
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Ecriture Commande (PS=0) 0x0D (RDITSUM)
Lecture/Polling Commande (PS=0) Registre de status / Attente du bit BUSY (LM occupé) à 0
Lecture Donnée (PS=1) 8 bits poids fort somme de l'erreur, en COUNT
Lecture Donnée (PS=1)

8 bits poids faible somme de l'erreur, en COUNT

     

Cette description plus ou moins longue, agrementée d'un certain nombre de commentaires, des différentes commandes permet de "planter le décor".
Leur utilisation peut par la suite ne pas être aussi simple qu'il ne pourrait y paraitre ... notamment à cause des différentes subtilités déjà évoquées.

     

Utilisation


Pages écrites par Bat : manu_bat_manu@yahoo.fr
Relecture, améliorations par Coco : coco_corp@yahoo.fr

Voir ausi : Club de Robotique E.S.E.O.