Servo-moteur

Un article de Wikibot.

Un servo-moteur est un type de moteur électrique. C'est un dispositif typiquement utilisé en modélisme pour, par exemple, contrôler la direction d'une voiture télécommandée.

Il comprend :


L'utilisateur envoit à chaque instant un signal modulé qui représente un angle. Le servo tourne vers cet angle et s'y maintient.

Sommaire

[modifier] La commande du servo-moteur

Un connecteur à trois fils permet de commander un servo-moteur. Bien sûr, il y a la masse et le +5V (à peu près). Ces deux fils sont en général noir et rouge, mais ils sont marrons et rouge pour les modèles Graupner. Le 3ème fil est le fil de commande. Il est normalement blanc, mais jaune dans le cas des Graupner.

On pourrait dire hativement qu'il faut fournir un PWM comme signal de commande, mais ce n'est pas le cas :

  • Le PWM (Pulse-Width Modulation, Modulation en largeur d'impulsion) est un signal dont le taux de modulation varie de 0 à 100% (T_M=\frac{T_{ON}}{T_{PERIODE}}). Le signal ressemble alors a:
  • Pour un servo on parle de Signal-code modulated signal (Signal modulé en code d'impulsion) où seule l'impulsion compte, pas la fréquence (en théorie):

En clair, il faut fournir au servo une impulsion à 1 (suivie d'un retour à 0). Et le servo va prendre en compte la largeur temporelle de cette impulsion, qu'il va convertir proportionnellement (ou presque) en un angle.

Le retour à 0 de l'impulsion peut avoir n'importe quelle durée.

En pratique, il semblerait qu'il ne faille pas dépasser un temps de 20ms entre deux fronts montants.

A noter aussi que ce système présente un avantage par rapport au PWM : une absence de signal (toujours à 1, ou toujours à 0) laisse le servo en "roue libre" comme si il n'était pas alimenté.

On peut commander de manière simple un servo via un NE555.

Le PIC est capable de fournir directement ce signal de commande sur une sortie, avec un programme adéquat.

[modifier] Dans la pratique, ça donne ...

Voici les valeurs réellements trouvées pour le servo-moteur testé.

Le signal était généré à l'aide d'un PIC.

La précisions n'était peut-être pas au rendez-vous ! mais ça donne une idée...

  • Milieu vers 1.44 ms
  • -70°vers 0.8 ms
  • -102° (butée) vers 0.51 ms
  • +55° vers 1.92 ms
  • +98.8°(butée) vers 2.31 ms

Soit un "pas" de 8µs correspond à 0.89°.

Ou dans l'autre sens, un ° correspond à 9µs approximativement.

[modifier] Et comment on fait marcher tout ça avec un PIC ?

Voici la méthode utilisée pour générer le signal par un programme sur le PIC 16F84 : (voir la page Débuter avec un PIC)

On utilise ici des interruptions du timer pour le séquencement temporel.

Le programme passe par 2 phases. La phase 0 correspondant à l'état 0 du signal, la phase 1 à l'état 1. A chaque changement de phase, on rerègle le timer pour obtenir une interruption au bon moment pour la prochaine phase.

Le PIC a un timer d'une précision de 1 octet, soit 256 valeurs.

Il est incrémenté à chaque cycle, soit ici (quartz à 4Mhz) toutes les µs. Y est adjoint un prescaler non obligatoire et réglable qui permet d'incrémenter le timer tous les 1, 2, 4, 8, 16, 32 ... 256 cycles.

Pour la phase 1, le timer doit pouvoir aller le plus précisément possible de 0 à 2ms. On choisit donc un prescaler de 8. Ainsi le timer s'incrémente toutes des 8µs, avec un maximum à 256*8 = 2048 µs. Pour la phase 2 , la marge est bien plus large. On prend un prescaler de 128. Avec 140*128 = 17 920 µs

Ce premier programme utilise la méthode décrite ci-dessus pour faire bouger d'un "pas" le servo toute les 1/2 secondes (à peu près).

La base de temps (abusivement appelée PWM, vous m'excuserez, mais Signal-code modulated signal ça fait long comme variable ;-) est donc de 8 µs de précision, sur 1 octet.

Elle s'incrémente dès que la variable tmp_cmp atteint 64 (tmp_cmp repassant alors à 0).

Le signal de commande est disponible sur l'ensemble du port B.

Il vous suffit d'alimenter le servo avec un jeu de 4 piles R6 (attention à bien relier la masse du servo et celle du PIC) et à relier son fil de commande avec l'un des ports B du PIC.

Amusez-vous bien à tester vos servo !

Les sources du programme

[modifier] Modification d'un servo-moteur

Les avantages du servo moteur par rapport au moteur à courant continu sont

  • la simplicité de sa commande (un seul fil et pas d'electronique de commande) .
  • le couple fourni puisqu'il intègre le motoréducteur pour un prix modique.
  • il sait atteindre une position et s'y tenir.
  • la taille et la compacité.

Les inconvénients du servo moteur par rapport au moteur à courant continu sont

  • la limitation d'angle de rotation

Pour bénéficier de tous les avantages (couple, dimension, commande) On peut donc faire sauter la limitation d'angle (mais en perdant la position a atteindre) et tromper un peu l'électronique de commande. La modification d'un servo est décrite ici : http://tcremel.free.fr/doc/bidouille_servo.pdf