Accueil > La conception > L’électronique et l’informatique > La carte de commande 6 servo-moteurs, la messagerie et les commandes

La carte de commande 6 servo-moteurs, la messagerie et les commandes

vendredi 23 août 2013, par Jean-Luc

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 :

109876543210
0 1 1 0 0 0 0 n n n n

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 :

Octet d’une trame « États des servos »

Le champ état est l’état dans lequel se trouve la machine d’états du servo. Les valeurs possibles sont les suivantes :

7654É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 :

32Erreur
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 :

10Fins 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 :

109876543210
0 1 1 0 0 0 1 n n n n

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é.

Trame de commande

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 :

ArgumentSignification
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.

Résumé des commandes

Ce billet conclut la présentation de la carte 6 servos. Rendez vous dans la rubrique « Journal de bord » pour la suite.

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)