PRINCIPE D'UN SERVOMOTEUR
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) |
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).