Servomoteurs
Par Charles Combes, jeudi 15 mars 2007 à 11:04
SOMMAIRE
Un servomoteur est, comme son nom l'indique, un moteur mais avec quelques spécificités en plus. Contrairement à un moteur classique qui est utilisé pour tourner avec une vitesse proportionnelle à un courant ou à une tension, un servomoteur est utilisé pour obtenir une position.
1. L'aspect physique d'un servomoteur
Un servomoteur est généralement un bloc noir ou bleu avec un petit plateau rotatif sur le dessus. De ce bloc partent 3 fils dont les couleurs sont généralement les suivantes :
- Noir : Masse
- Rouge : Alimentation
- Jaune ou blanc : La commande
Un servomoteur est principalement caractérisé par :
- Sa vitesse de rotation pour aller à la position désirée en rad/s ou sec/60°
- Son couple (torque en anglais) qui signifie la force que le servomoteur peut dégager pour garder la position souhaitée en kg/cm ou en Nm.
L'unité kg/cm signifie le poids que peut supporter le servomoteur en considérant qu'on y a fixé une tige de 1 cm. Pour être plus clair voici un petit dessin.

Exemple du servomoteur Futaba S3003 :
| Futaba S3003 |
|
| Vitesse : |
0,23 sec/60°à 4,8 Volt |
| Couple : |
3.2 kg/cm à 4,8 Volt ou 4.1 kg/cm à 6 Volt |
| Poid : |
37.2 g |
2. Les signaux de commande
Contrairement aux moteurs classiques, le servomoteur est commandé en numérique. Il suffit de lui envoyer une impulsion logique (commandable directement par un microcontrôleur) dont la durée varie entre 1ms et 2ms. La durée de l'impulsion définie la position du servo, c'est-à-dire que si l'impulsion dure 1ms, le servo se déplacera tout à gauche et si l'impulsion dure 2ms, il ira tout à droite. Vous aurez également compris que pour 1,5ms, le servo se positionne au milieu.

Au repos, un servomoteur n'a que très peu de force. C'est pourquoi une seule impulsion ne lui permet souvent pas de garder la position demandée. Pour exploiter toute la puissance d'un servomoteur il est nécessaire de renvoyer la commande toutes les 20ms maximum. Au delà de cette valeur, le servomoteur risque de trembler pour garder sa position

3. Les applications
Les servomoteurs sont très utilisés dans le modélisme pour orienter les roues pour les voitures, le gouvernail pour les bateaux etc... Cependant, ils sont souvent chers avec un prix variant de 10 Euros à plus de 150 Euros. Il est donc important de bien déterminer son besoin. Par exemple, il peut être préférable d'utiliser un moteur classique et d'effectuer un asservissement de position. La solution revient moins cher en matériel, mais nécessite des connaissances en asservissement et en électronique de puissance ainsi que du temps de développement en plus.
Une application un peu particulière des servos est de les utiliser comme des moteurs classiques. Pour cela, il est nécessaire d'effectuer des modifications en coupant la butée à l'intérieur du servo. Cela permet de s'affranchir de la partie puissance, mais j'avoue ne pas en connaître plus sur le sujet. Cependant, vu le prix des servomoteurs, je trouve quand même ça dommage.
4. Mise en oeuvre sur un PIC
Bien entendu, il existe de nombreuses façons d'implémenter la gestion d'un servomoteur dans un pic. La méthode la plus classique est d'utiliser l'interruption d'un timer qui comptera pour vous le temps entre chaque impulsion.
Dans l'exemple suivant, je ne détaille que les parties nécessaires pour le servo.
Le support est un pic 16F628a avec un quart à 20 MHz.
#DEFINE SERVO1 PORTB, 5
...
CBLOCK 0x020
SAV_W, SAV_STATUS, SAV_FSR
;...
p_horizontal ; Position horizontale souhaité du servo
;...
ENDC
...
;*********************************************************************
; DEMARRAGE *
;*********************************************************************
org 0x0000
goto Init
org 0x0004
goto Interruptions
;*********************************************************************
; INITIALISATION *
;*********************************************************************
Init :
clrf PORTA
clrf PORTB
BANK1
bcf SERVO1
; Init des Options
movlw b'11000101'
movwf OPTION_REG ; Pull-up disabled, Prescaler sur Tmr0 a 1:64
; 200ns * 256 * 32 * 6 = 10ms
BANK0
movlw d'30'
movwf p_horizontal ; Position de depart du servo
movlw b'10100000'
movwf INTCON ; Interruption sur Timer0 et pas d'interrupt externe
;*********************************************************************
; PROGRAMME *
;*********************************************************************
Start:
goto Start
;*********************************************************************
; INTERRUPTIONS *
;*********************************************************************
Interruptions:
Call SAV_REG ; sauvegarde des registres
btfsc INTCON, T0IF
Call Int_Timer0 ; Si il n'y a qu'une seule interruption
; d'activée il n'est pas nécessaire de faire
; le test
Call RAP_REG ; restitution des registres
Retfie
Int_Timer0:
bcf INTCON, T0IF ; Efface le flag
decfsz cmpt,f
return
movlw d'06'
movwf cmpt ; Compte 6 fois avant de lancer le servo
bsf SERVO1
movf p_horizontal, W
call WaitServo_20Mhz ;Attend p_horizontal * 50 µs
bcf SERVO1
return
Et voilà, j'espère avoir été clair. Si vous avez des questions n'hésitez pas !!
