Un servo moteur est un moteur à courant continu avec réducteur (engrenages) et une électronique de commande intégrée  qui permet d'asservir en rotation l'arbre moteur (en sortie) : en fonction normal, il suffit d'envoyer une impulsion d'une largeur déterminée (entre 1 et 2ms) pour que l'axe tourne d'un angle déterminé:

Par programmation du microcontrôleur, il est possible de générer ce signal directement sur une sortie.
L'algorithme (le plus simple) est le suivant :

Répéter 
    Mettre A0 à 1
    temporiser n      (n étant la valeur en ms voulue)
    Mettre A0 à 0
    temporiser 20ms  
Toujours   
  

 Mais ce programme n'est guère performant car il mobilise tout le temps machine pour 1 seul malheureux servo.
On peut faire beaucoup mieux en travaillant sous interruption du microcontroleur. 

Programme principal
Répéter
   (ici , vous traitez vos E/S ou ce que vous voulez)

Toujours

Programme interruption (déclenchée toutes les 20ms par timer)
      Mettre A0 à 1
       temporiser n
       Mettre A0 à 0
Fin interruption

En paramétrant correctement votre microcontrôleur, toutes les 20ms le programme principal sera interrompu par la routine d'interruption qui va envoyer votre impulsion sur la sortie A0 du portA . Pendant tout le reste du temps, votre programme principal pourra exécuter d'autre tâches (gestion des obstacles, cycle de déplacement ...)

Comment faire pour gérer 2 servo ou plus ?
On pourrait s'amuser à répéter les instructions à l'intérieur de l'interruption :
 

Programme principal
Répéter
   (ici , vous traitez vos E/S ou ce que vous voulez)

Toujours

Programme interruption (déclenchée toutes les 20ms par timer)
      Mettre A0 à 1  (servo 1)
       temporiser n
       Mettre A0 à 0

     Mettre A1 à 1    (servo 2)
     temporiser n2
     Mettre A1 à 0
 
   .... ETC ...  

 
Fin interruption

La durée de l'interruption s'allonge d'autant plus qu'il y aura de servo. La limite théorique est 10 servos (2*10 = 20ms) mais vous mangez tout le temps machine ! (vous n'avez plus le temps de faire autre chose, le micro est en permanence sous interruption !)
Cette solution est acceptable pour 2 servos mais pas plus. (durée interruption = 4 à 5ms max)



Comment faire alors pour gérer les 6 servos de la pince 5 axes et avoir encore beaucoup de temps machine de disponible ?


La solution est soit d'utiliser 1 ou 2 circuits spécialisé (ref : Mic800 ou FT 639 dispo chez sélectronic ) mais encore faut-il le gérer en envoyant les ordres sous forme de mot série, soit utiliser le programme (du prof) qui permet la gestion de 12 (ou plus) servo moteur sur n'importe quel port . Cette solution présente l'avantage de simplifier l'électronique (pas de circuit annexe à rajouter). 

 

 

 

RETOUR