Comment contrôler un mouvement angulaire à l’aide d’un servomoteur ?

NIVEAU 2

Objectifs

  • Comprendre le fonctionnement d’un servomoteur
  • Piloter un servomoteur à l’aide d’un microcontroleur

Pré-requis

Servomoteur

Qu’est-ce que c’est ?

Un servomoteur est un actionneur qui réalise une rotation d’un angle calibré en fonction d’une commande externe (image de redohm.fr).

Il contient un moteur à courant continu, un capteur de position angulaire (souvent un potentiomètre) et un contrôleur numérique. Il se pilote à l’aide de 3 fils :

  • Noir : masse
  • Rouge : alimentation continue (souvent 6V, mais à vérifier dans la documentation technique)
  • Vert/Jaune/Blanc : commande (la couleur dépend du fabricant)

Ils sont souvent utilisés en modélisme pour pouvoir commander en rotation des modèles réduits (image de Eskimon.fr) :

Quelle est la différence avec un moteur à courant continu ?

Un moteur à courant continu est un élément permettant de transformer une énergie électrique en un mouvement rotatif continu. En fonction de la tension à ses bornes, le moteur à courant continu va tourner à une certaine vitesse. Ces moteurs nécessitent souvent (pour être pilotés) des courants assez élevés (non compatibles directement avec un microcontroleur par exemple). Un étage d’adaptation en courant (amplification avec des transistors par exemple) est nécessaire.

Dans le cas d’un servomoteur, l’électronique et la mécanique, associées au moteur à courant continu, permettent de transformer une commande en un angle de rotation calibré. Le signal de commande en entrée est compatible avec les sorties d’un microcontroleur. L’alimentation est par contre externe.

Pilotage d’un servomoteur

Le pilotage d’un servomoteur se fait à l’aide d’un signal modulé en largeur d’impulsions – MLI ou PWM (voir tutoriel Régler la luminosité d’une LED2).

Pilotage d’un servomoteur standard

Principe en vidéo : https://www.youtube.com/watch?v=LXURLvga8bQ

Principe

Le signal de commande est un signal rectangulaire (numérique) de période fixée à 20 ms. C’est ensuite la durée du temps haut qui permet de modifier l’angle de sortie du servomoteur :

L’angle que peut atteindre le servomoteur est compris entre -90° et +90° par rapport à l’axe principal du servomoteur. La position angulaire de 0° correspond à un temps haut de 1,5 ms (par rapport à 20 ms de période). Lorsque la durée du temps haut du signal de commande diminue, jusqu’à 1 ms, l’angle est négatif (jusqu’à -90°). Lorsque la durée du temps haut du signal de commande augmente, jusqu’à 2 ms, l’angle est alors positif (jusqu’à 90°).

Câblage du servomoteur

Exemple de connexion entre la carte Nucléo et un servomoteur :

On rappelle ici que la tension \(V_{CC}\) d’alimentation doit être entre 5 et 6V (sur la plupart des servomoteurs standards).

Exemple

Voici un exemple de commande d’un servomoteur, connecté sur la broche D10 (connecteur Arduino) de la carte Nucléo.

#include "mbed.h"

PwmOut servo_mot(D10);

int main() {
    int i, time = 1500;
    servo_mot.period_ms(20);         // Initialisation période
    servo_mot.pulsewidth_us(1500);   // Initialisation en position 0
    while(1){
        servo_mot.pulsewidth_us(1200);   // Angle négatif
        wait(0.3);
        servo_mot.pulsewidth_us(1800);   // Angle positif
        wait(0.5);
    }
}

Ce programme permet d’aller successivement d’une position ayant un angle négatif à une position ayant un angle positif (par rapport à l’angle d’origine fixé dans le partie initialisation). Le servomoteur reste 300ms à la première position et 500ms à la seconde position.

Pilotage d’un servomoteur continu

Il existe également des servomoteurs dits continus. Le signal de commande permet alors de piloter la vitesse de rotation du moteur, dans un sens ou dans un autre, jusqu’à la vitesse maximale admissible par celui-ci.

Le principe de commande est le même. Il faut appliquer un signal modulé en largeur d’impulsions – MLI ou PWM – dont la période est fixée à 20 ms. Le temps haut \(t_h\) de ce signal permet alors de commander la vitesse.

Lorsque \(t_h = 1.5 ms\), le servomoteur est à l’arrêt.
Lorsque \(1.0 ms \leq t_h \leq 1.5 ms\) le servomoteur tourne dans un sens (vitesse proportionnelle à \(t_h – 1.5 ms\)).
Lorsque \(1.5 ms \leq t_h \leq 2.0 ms\) le servomoteur tourne dans l’autre sens (vitesse proportionnelle à \(t_h – 1.5 ms\)).

MInE Prototyper Prototyper avec Nucleo et MBED

Nucléo – Contrôler un mouvement angulaire