Le pilotage des servo-moteurs a été présenté dans « La carte de commande 6 servo-moteurs, le logiciel », voici maintenant la messagerie CAN ainsi que les commandes auxquelles la carte répond.
Sur un réseau CAN, les messages ne comporte pas une entête indiquant quelle est la station réceptrice. Au lieu de cela, chaque message comporte un identifiant qui sert aussi de priorité. Les stations intéressées par un message le reconnaissent grâce à son identifiant.
Les messages peuvent être transportés par des trames standard et avoir un identifiant sur 11 bits, ou bien par des trames étendues avec un identifiant sur 23 bits. La messagerie CAN est définie globalement pour les 3 participants à ce projet de façon à ce que le matériel spécifique à chacun puisse être connecté sur le réseau CAN des deux autres. Il a été convenu que seule les trames standard sont employées en exploitation, les trames étendues sont réservées au diagnostic et à des fonctions spéciales comme le flashage de programme via le CAN.
Par convention, les identifiants des messages en provenance des cartes 6 servos sont donc compris entre 768 et 783 (16 cartes flashées avec le même programme et 96 servos possibles) et ceux destinés aux cartes 6 servos sont compris entre 784 et 799.
Trame émise par la carte
Les cartes 6 servos émettent à intervalle régulier (toutes les 100ms en exploitation mais cet intervalle est réglable) une trame de 6 octets comportant l’état des servos et dont l’identifiant est :
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 0 | 0 | 0 | 0 | n | n | n | n |
où nnnn est le numéro de la carte émettrice sur 4 bits.
L’octet de rang 0 correspond au servo 0 et celui de rang 5 au servo 5. Un octet est formé de la manière suivante :
Le champ état est l’état dans lequel se trouve la machine d’états du servo. Les valeurs possibles sont les suivantes :
7 | 6 | 5 | 4 | État du servo |
---|---|---|---|---|
0 | 0 | 0 | 0 | éteint |
0 | 0 | 0 | 1 | calib |
0 | 0 | 1 | 0 | op |
0 | 0 | 1 | 1 | frein |
0 | 1 | 0 | 0 | arrêté |
1 | 0 | 0 | 0 | erreur |
Le champ erreur signale sur quel fin de course une erreur a été détectée. Notez qu’il peut aussi s’agir d’une panne de servo-moteur. Les valeurs possibles sont les suivantes :
3 | 2 | Erreur |
---|---|---|
0 | 0 | Aucune erreur |
0 | 1 | Anomalie fin de course horaire |
1 | 0 | Anomalie fin de course trigo |
1 | 1 | Anomalie sur les deux fins de course |
Enfin, le champ fdc donne l’état des interrupteurs de fin de course. Les valeurs possibles sont les suivantes :
1 | 0 | Fins de course |
---|---|---|
0 | 0 | Les deux fins de course sont enfoncés |
0 | 1 | Fin de course trigo enfoncé |
1 | 0 | Fin de course horaire enfoncé |
1 | 1 | Aucun des fins de course n’est enfoncé |
Trames de commande reçues par la carte
Une trame de commande de servo permet d’envoyer une commande à un des servos de la carte ou à la carte dans sa globalité. L’identifiant d’une trame de commande est :
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 0 | 0 | 0 | 1 | n | n | n | n |
où nnnn est le numéro de la carte destinataire sur 4 bits.
Si plusieurs commandes doivent être envoyées, plusieurs trames sont nécessaires. Une trame de commande de servo comprend 2 octets de données. Le premier octet contient, dans les 4 bits de poids fort, le numéro du servo et, dans les 4 bits de poids faible, la commande. Le second octet contient l’argument de la commande dont la signification est variable selon la commande. Certaines commandes s’adressent à la carte dans sa globalité et, dans ce cas, le numéro de servo est ignoré.
Commandes
Les commandes sont résumées dans le tableau à la fin du billet.
Commande Aucune opération
Code : 0000
Cette commande est sans effet.
Commande Position
Code : 0001
La commande de position permet de fixer la consigne de position d’un servo. L’argument peut avoir les valeurs suivantes :
Argument | Signification |
---|---|
00 (0) | Pas de changement de position |
01 (1) | Position trigo |
10 (2) | Position horaire |
11 (3) | Position milieu |
Les commandes de vitesse
Les commandes de vitesse permettent de fixer la vitesse de rotation du servo dans le sens trigonométrique, horaire ou les deux à la fois. Si le servo est en mouvement au moment de la réception d’une commande de vitesse, la nouvelle vitesse ne sera prise en compte que pour le mouvement suivant.
Commande Vitesse trigo
Code : 0010
La commande Vitesse trigo permet de fixer la vitesse du servo quand il tourne dans le sens trigonométrique. L’argument est la vitesse sur 3 bits (de 1 à 7) dans les bits 2 à 0 de l’argument. La valeur 0 est sans effet.
Commande Vitesse horaire
Code : 0011
La commande Vitesse horaire permet de fixer la vitesse du servo quand il tourne dans le sens horaire. L’argument est la vitesse sur 3 bits (de 1 à 7) dans les bits 2 à 0 de l’argument. La valeur 0 est sans effet.
Commande Vitesses
Code : 0100
La commande Vitesses permet de fixer à la fois les vitesses trigonométrique et horaire du servo. L’argument est la vitesse trigonométrique sur les bits 6 à 4 (de 1 à 7) et la vitesse horaire sur les bits 2 à 0. Pour les deux vitesses, la valeur 0 est sans effet.
Commande Alimentation servo
Code : 0101
La commande Alimentation servo permet d’allumer ou d’éteindre un servo. L’argument est 0 (extinction) ou 1 (allumage) dans le bit 0 de l’argument. L’allumage est sans effet si le servo n’est pas dans l’état servo éteint. L’extinction est toujours effective.
Commande Reset servo
Code : 0110
Cette commande permet de passer un servo de l’état Servo en erreur à l’état Servo éteint. Aucun argument n’est nécessaire. La commande est sans effet si le servo n’est pas dans l’état Servo en erreur.
Commande Envoi trame d’état
Code : 0111
Cette commande permet de démarrer ou d’arrêter l’envoi de la trame d’état des servos. Le numéro de servo est ignoré. Au démarrage, l’envoi est arrêté. L’argument est 0 (arrêt) ou 1 (démarrage) dans le bit 0 de l’argument.
Commande Période d’envoi trame d’état
Code : 1000
Cette commande permet de fixer la période d’envoi de la trame d’état des servos. Cette période est réglable par multiple de 20ms. La valeur 0 correspond à une période de 20ms, 1 à 40ms, . . . 255 à 5,12s.
Commande Fixer nombre d’erreur maximum
Code : 1001
Cette commande permet de fixer le nombre d’erreurs admissible avant qu’un servo passe dans l’état servo erreur.
Commande Ecrire paramètres dans EEPROM
Code : 1010
Cette commande permet d’enregistrer les paramètres utiles d’un démarrage sur l’autre dans l’EEPROM.
Commande Limiter le nombre de servos en mouvement
Code : 1011
Cette commande permet de limiter le nombre de servos qui peuvent être en mouvement simultanément. L’argument est le nombre de servos. Un argument de 0 est sans effet. Un argument supérieur à 6 est ramené à 6.
Ce billet conclut la présentation de la carte 6 servos. Rendez vous dans la rubrique « Journal de bord » pour la suite.