Contrôle d’un servomoteur

Principe du contrôle

Les servomoteurs de modélisme sont commandés par l’intermédiaire d’un câble électrique à trois fils :

  • Masse : Noir ou Marron
  • Alimentation : Rouge
  • Signal : Blanc ou Jaune

 

 

Cas des servomoteurs classiques

Le signal est codé en largeur d’impulsion (PWM). Cela signifie que c’est la durée des impulsions (en général entre 1 et 2 millisecondes) qui détermine  l’angle absolu de l’axe de sortie et donc la position du bras de commande du servomoteur. Le signal est répété périodiquement (en général toutes les 20 millisecondes), ce qui permet à l’électronique de contrôler et de corriger continuellement la position angulaire de l’axe de sortie, cette dernière étant mesurée par le potentiomètre.

Lorsque le moteur tourne, l’axe du servomoteur change de position, ce qui modifie la résistance du potentiomètre. Le rôle de l’électronique est de commander le moteur pour que la position de l’axe de sortie soit conforme à la consigne reçue : c’est un asservissement.

Modèle représentatif : hitec HS-422

 

vitesse_servoCas des servomoteur à rotation continue

Certains servomoteurs ne sont pas asservis en position, mais en vitesse. Dans ce cas, la vitesse est proportionnelle à la largeur des impulsions :

Modèle représentatif : parallax

 

 

Câblage

Si la puissance nécessaire est faible, le servomoteur peut être alimenté directement par l’Arduino :

Si une puissance plus importante est nécessaire, il faudra utiliser une alimentation externe, en passant par un shield de pilotage de moteurs par exemple.

 

Programmation

Grâce à la bibliothèque Servo.h , la commande des servomoteurs est très simple.

Après avoir inclus la bibliothèque …

#include <Servo.h>

… on crée un objet de type Servo  (la partie « numérique » de l’objet « matériel »)…

Servo monServo;

… et on attache le Servo « numérique » à un port numérique (comme on a déjà attaché le servo « matériel » au connecteur du port de l’Arduino) …

monServo.attach(9);

… et il ne reste plus qu’à lui donner des ordres …

Cas des servomoteurs classiques :

#include <Servo.h> 

Servo monServo;

void setup() 
{ 
  monServo.attach(9);  // relier le servomoteur au port 9 
  monServo.write(90);  // positionner le servomoteur à l'angle absolu 90°
} 

void loop() {}

Cas des servomoteur à rotation continue :

#include <Servo.h> 

Servo monServo;

void setup() 
{ 
  monServo.attach(9);                // relier le servomoteur au port 9
  monServo.writeMicroseconds(1500);  // mettre le servomoteur à l'arrêt (1500 = 1.5 ms)
} 

void loop() {}

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *