Вы находитесь на странице: 1из 3

Introduction : Qu'est-ce qu'un servomoteur ?

Un servomoteur est un dispositif typiquement utilis en modlisme pour, par exemple, diriger une
voiture tlcommande.
Il comprend :
Un moteur lectrique de petite taille.
Un rducteur en sortie de ce moteur pour avoir moins de
vitesse et plus de couple.
Un capteur : un potentiomtre qui produit une tension variable
en fonction de l'angle de l'axe de sortie.
Un asservissement lectronique pour contrler la position de cet
axe de sortie.
L'utilisateur envoie chaque instant un signal modul
reprsentatif dun angle.
Le servo tourne vers cet angle et s'y maintient.
La commande du servomoteur
Un connecteur trois fils permet de commander un servomoteur :
Il y a la masse et le +5V (environ). Ces deux fils sont en gnral noir et
rouge, mais ils sont marrons et rouge pour les modles Graupner.
Le 3me fil est le fil de commande. Il est normalement blanc, mais jaune pour les Graupner. On
pourrait dire sommairement qu'il faut fournir un signal PWM en tant que signal de commande, mais ce
n'est pas tout fait exact :
Le PWM (Pulse Width Modulation : Modulation en largeur d'impulsion) est un signal dont le
taux de modulation varie de 0 100% (TM=Ton/Tpriode).
Pour un servo on parle de Pulse-Code Modulated Signal (Signal modul en code
d'impulsion ) o seule l'impulsion compte, pas la frquence (en thorie).
En clair, il faut fournir au servo une impulsion 1 (suivie d'un retour 0). Le servo va prendre en
compte la largeur temporelle de cette impulsion qu'il va convertir de faon linaire en un angle.
La dure de retour 0 de l'impulsion nest pas critique, en pratique il faut viter de dpasser
20ms entre deux fronts montants.
A noter aussi que ce systme prsente un avantage par rapport au PWM : une absence de signal
(toujours 1, ou 0) laisse le servo en "roue libre" comme si il n'tait pas aliment.

Signal modul en code d'impulsion

Signal PWM

J. Taillefer

243-113-AH

1 de3

Exemples de programmation avec Arduino


A. Fonction Servo
Cette fonction gnre automatiquement les 20 impulsions requises afin de positionner le servomoteur un
angle voulu.
Dabord, crer un objet, appel ici myservo pour contrler le servomoteur laide de la fonction en langage C
Servo.h :

#include <Servo.h>
Servo myservo;
Ensuite, associer un port de sortie PWM, appel pin, du Arduino avec le servomoteur :

myservo.attach(pin);
Appeler la fonction myservo la position angulaire pos entre 0 et 180 degrs :

myservo.write(pos);
Pour ne pas laisser la boucle de commande du servomoteur, dconnecter le servo avec detach.

myservo.detach(pin);
Exemple de code:
#include <Servo.h>
Servo myservo1;
int servoPin = 8;
int fin=9;
int pos = 90;

// Cration de lobjet myservo1 (maximum de 8 objets servo).


// Initialiser le port de sortie PWM..
// Pin pour arrter le servo : 1 arrte.
// Variable de la position angulaire du servo en degrs.

void setup()
{
pinMode(fin,INPUT);
myservo1.attach(servoPin);
}

// Associer le servo au port No. servoPin.

void loop()
{
myservo1.write(pos);
// Envoyer les 20 impulsions pour positioner le servo pos degrs.
delay(15);
// Attendre 15ms afin de laisser le servo se mettre en position.
if(fin == 1)
{
myservo1.detach(); // Dconnecter le servo (consomme pas lalimentation)
}
}

B. Fonction digitalWrite
Cette fonction gnre manuellement les 20 impulsions requises afin de positionner le servomoteur un angle
voulu.

J. Taillefer

243-113-AH

2 de3

Exemple dun train dimpulsions pour la commande du servomoteur :

a : largeur de limpulsion (entre 1 et 2 ms)


b : dure de 20 ms (0.02 s) entre deux impulsions
: Rpter pour 20 impulsions.

Mettre le port du servo, appel servoPin, un niveau haut :

digitalWrite(servoPin, HIGH);
Spcifier la dure haute de limpulsion (a) en ajoutant un dlai en microsecondes :

delayMicroseconds(a);
Ensuite, remettre le port du servo un niveau bas :

digitalWrite(servoPin, LOW);
Il suffit de rpter en boucle un minimum de 20 fois cette forme donde avec un dlai de 25 ms
(minmum de 20 ms).
int pulseTime = a;
// Dure du pulse haut en micro secondes.
Exemple de code:
int servoPin = 8;

// Initialiser le port de sortie PWM..

void setup()
{ pinMode(servoPin, OUTPUT); }

// Associer en sortie le servo sur le port No. servoPin.

void loop()
{
int a = 1500;
// Dure du pulse haut en microsecondes.
int b = 25;
// Dure du pulse bas en millisecondes.
for (int i = 0; i < 20; i++)
// Envoyer les 20 impulsions pour positionner le servo.
{
digitalWrite(servoPin, HIGH);
delayMicroseconds(a);
// Attendre a usec avec le pulse haut..
digitalWrite(servoPin, LOW);
delay (b);
// Attendre b msec avec le pulse bas.
}
}

J. Taillefer

243-113-AH

3 de3

Вам также может понравиться