Projet : notre Plen2 Robot / bus Attiny13a [etape 2]

Réalisation d’un dispositif de pilotage de servomécanismes montés en réseau

Les objectifs:

  1. Diminuer l’encombrement des fils de liaison entre le calculateur central du robot (l’arduino dans le cas présent) et les nombreux servomécanismes prévus sur le prochain robot humanoide(16).
  2. Réduire le poids des fils donc du robot et faciliter le passage des fils en optimisant la discrétion..
  3. Diminuer le nombre de sorties que le calculateur doit attribuer au pilotage des servomécanismes

Description du principe de réseau choisi :

Un microcontrôleur de petites dimensions(Attiny 13A en SOIC8)  est implanté dans chaque servo SG90 afin de le rendre adressable spécifiquement lorsqu’il est relié à un bus de communication. On peut ainsi connecter tous les servomécanismes en parallèles avec 3 fils :

  • 1 fil de masse (- et référence de tension)
  • 1 fil d’alimentation +
  • 1 fil de contrôle ou de pilotage.

A l’origine, le fil de pilotage du servomécanisme sert à propager une impulsion dont la largeur du palier haut peut varier de 1ms à 2ms (éventuellement 500µs à 2500µs) en fonction de la position ou de l’angle que l’on souhaite obtenir. Cette impulsion se répète en général toutes les 20ms.

Maintenant, c’est le petit microcontroleur qui fournit cette impulsion en prenant en compte l’information qui lui est fournie par le bus.

Le protocole de communication qui a été développé est du type série sur 4 octets qui ont les rôles suivants :

  • Octet n°1 : 2 bits de fonction/ 5 bits d’adresse (soit 32 servos max) / 1 bit toujours à 1
  • Octet n°2 : le complément des 7 bits de l’octet n°1 / 1 bit toujours à 1 /
  • Octet n°3 : 8 bits de donnée (largeur de l’impulsion)
  • Octet n°4 : complément des 8 bits de donnée précédents.

 

Il y a redondance au niveau de l’information reçue et 2 octets auraient été suffisants. En fait, cette redondance assure la sécurité de fonctionnement afin d’éviter de prendre en compte des données parasitées. Ce procédé aboutit à des trames plus longues que celles, constituées de 2 octets qui posséderaient 1 bit de parité/octet, mais il offre un niveau de fiabilité bien supérieur.

Etude et développement de ce réseau :

Au départ, la solution envisagée prévoyait un réseau pour chaque membre du robot puisque le premier objectif était la discrétion et la diminution de l’encombrement des fils. Cependant, comme l’Arduino UNO utilisé pour le contrôle du robot ne possède qu’un seul UART (Universal Asynchrone Reception Transmission) matériel, et que la mise en oeuvre d’UART logiciels aurait été trés pénalisante sur le plan temporel, il a été décidé de mettre tous les servomécanismes sur un seul réseau. Afin de rafraichir les servos à une cadence de l’ordre de 20 ms, la cadence de communication a été fixée à 38400 bits/s (valeur standard).

Cette solution présente les avantages suivants :

  • Une seule sortie de l’arduino consacrée au pilotage de tous les servos.
  • Possibilité d’utiliser l’UART matériel de l’arduino et ainsi laisser plus de temps pour les calculs de déplacement.
  • Simplification du câblage car tous les servos sont reliés ensemble par 3 fils.
  • Possibilité de tenir la cadence de rafraichissement de l’ordre de 20ms.

 

Réalisation logicielle et matérielle :

Au niveau du logiciel, les fonctions UART (réception uniquement), vérification des données reçues, reconnaissance d’adresse et génération de l’impulsion déstinée au servomécanisme ont été implémentées, téléchargées dans l’ATTINY avec l’outil ARDUINO et testées sur des ATTINY montés sur des supports DIP.

Etude et développement de ce réseau :

Au niveau matériel, après mise au point, le logiciel (avec une adresse différente à chaque f ois) a été implanté dans chaque ATTINY (boitier SOIC8 ou SOP8) avec l’aide d’une pince spéciale. Ensuite, après démontage du fond du servo SG90 (4 petites vis), le fil orange est déssoudé pour être relié à une patte de l’ATTINY, une autre patte de l’ATTINY est reliée au circuit imprimé du servo à l’endroit où était soudé le fil orange. Pour l’alimentation, l’ATTINY utilise celle du servo avec une cellule de filtrage (diode/résistance/capacité) afin d’éviter de perturber l’ATTINY avec les appels de courants provoqués par les déplacements du servo. Le boitier SOIC8 ou mieux SOP8 peuvent se loger sans trop de difficultés dans le fond du boitier. Il suffit de remettre les 4 vis et le servo adressable est prêt à fonctionner.

Leave a reply