11) Les servomoteurs.

Difficile d’envisager la robotique de loisir sans aborder dans le cadre des motorisations l’éventail des moteurs asservis avec leur électronique de gestion embarquée. On trouve deux types de servomoteurs. Ceux qui présentent un débattement angulaire d’amplitude inférieure à un tour et ceux sans limitation pour l’angle de rotation de l’arbre de sortie.
ATTENTION : Un seul de ces moteurs branché sur le +5Vcc d’Arduino provoque de brusques baisses de tension lors des appels de courant. Ces perturbations sont parfaitement mesurables quand on branche un voltmètre quelconque sur l’alimentation. Si la tension chute, c’est que le régulateur intégré à Arduino passe en limitation de courant. Outre que le microcontrôleur et les circuits intégrés périphériques ne fonctionnent pas dans des conditions fiables, le régulateur intégré à Arduino va chauffer, et ce d’autant plus qu’il n’est pas refroidi par radiateur. Il est donc fortement recommandé d’alimenter les moteurs séparément avec un bloc externe sans oublier de réunir les masses GND pour la référence des signaux de commande.
La Fiche n°46 précise le brochage et les signaux à fournir pour les piloter.
Le tableau de la Fig.143 donne les caractéristiques de deux références particulièrement populaires.


Experience_070 : Pilotage par sorties binaires.

Compte tenu de la simplicité des signaux à générer, la première approche logique consiste à utiliser les instructions classiques d’Entrée/Sortie d’Arduino. Comme la période doit avoisiner les 20mS, l’utilisation de la PWM d’origine n’est pas possible. En effet, la fréquence de répétition de la PWM d’Arduino fait environ 1kHz, donc une période vingt fois trop faible. Toutefois, rien n’interdit de générer directement de la PWM sur une sortie binaire en usant des fonctions de temporisation de base. Comme on peut le vérifier sur la Fig.144 le démonstrateur Experience_070.ino génère des impulsions calibrées correspondant au standard. Bien que le fonctionnement soit correct, le moteur est affecté d’un bruit de « grenaillage » prouvant qu’il corrige sans arrêt sa position. Ce phénomène n’est pas compréhensible en ce qui me concerne, car les signaux observés à l’oscilloscope sont rigoureux et les informations envoyées sur la ligne série sont conformes. Les transmissions série doivent être passées en remarque dès que les valeurs ont été vérifiées, car elles allongent la période de répétition du signal de commande. La librairie Servo.h fournie en standard dans l’environnement IDE corrige ce phénomène, du coup je n’en ai pas recherché l’origine.

Experience_071 : Utilisation de la bibliothèque Servo.h.

Native du compilateur C++ la bibliothèque Servo.h est décrite en page 14 du petit livret Bibliothèques Arduino.pdf permet de piloter un servomoteur aussi bien en précisant la durée de l’impulsion de commande que l’angle d’orientation désiré exprimé en degrés. Dans le démonstrateur Experience_071.ino c’est la durée de l’impulsion qui définit la commande. Comme pour la manipulation précédente on utilise un potentiomètre sur l’entrée A0 pour ajuster la valeur de la consigne. Noter que l’on peut librement utiliser un MG90S qui se positionne angulairement ou un 90SGR qui tourne en continu dans un sens imposé par la consigne.

Experience_072 : Pilotage « angulaire ».

Pratiquement identique à P071 le démonstrateur Experience_072.ino fait également appel à la bibliothèque Servo.h  pour piloter le petit servomoteur sauf que dans ce logiciel c’est la valeur de la position angulaire comprise entre 0 et 180° qui est envoyée comme consigne par le potentiomètre. (Position angulaire ou sens et vitesse de rotation si le servomoteur utilisé est de type sans limite angulaire.) Comme pour les manipulations précédentes on utilise un potentiomètre sur l’entrée A0 pour ajuster la valeur de la consigne.

La suite est ici.