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

Servomoteurs

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.

Servomoteurs

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

http2://www2.tuwerhobbies.com

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.

Servomoteurs

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

Servomoteurs

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