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 !!