[ 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 :
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
Voir ausi : Club
de Robotique E.S.E.O.
|