113 module ar 6 programmation du servomoteur aut14

3
J. Taillefer 243-113-AH 1 de3 Introduction : Qu'est-ce qu'un servomoteur ? Un servomoteur est un dispositif typiquement utilisé en modélisme pour, par exemple, diriger une voiture télécommandée. Il comprend : Un moteur électrique de petite taille. Un réducteur en sortie de ce moteur pour avoir moins de vitesse et plus de couple. Un capteur : un potentiomètre qui produit une tension variable en fonction de l'angle de l'axe de sortie. Un asservissement électronique pour contrôler la position de cet axe de sortie. L'utilisateur envoie à chaque instant un signal modulé représentatif d’un 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 général noir et rouge, mais ils sont marrons et rouge pour les modèles Graupner. Le 3ème 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/Tpériode). Pour un servo on parle de Pulse-Code Modulated Signal (Signal modulé en code d'impulsion ) où seule l'impulsion compte, pas la fréquence (en théorie). 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 façon linéaire en un angle. La durée de retour à 0 de l'impulsion n’est pas critique, en pratique il faut éviter de dépasser 20ms entre deux fronts montants. A noter aussi que ce système présente 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 PWM Signal modulé en code d'impulsion

Upload: jerry

Post on 01-Feb-2016

217 views

Category:

Documents


0 download

DESCRIPTION

servo

TRANSCRIPT

Page 1: 113 Module Ar 6 Programmation Du Servomoteur Aut14

J. Taillefer 243-113-AH 1 de3

Introduction : Qu'est-ce qu'un servomoteur ? Un servomoteur est un dispositif typiquement utilisé en modélisme pour, par exemple, diriger une voiture télécommandée.

Il comprend :

Un moteur électrique de petite taille. Un réducteur en sortie de ce moteur pour avoir moins de

vitesse et plus de couple. Un capteur : un potentiomètre qui produit une tension variable

en fonction de l'angle de l'axe de sortie. Un asservissement électronique pour contrôler la position de cet

axe de sortie. L'utilisateur envoie à chaque instant un signal modulé représentatif d’un 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 général noir et rouge, mais ils sont marrons et rouge pour les modèles Graupner. Le 3ème 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/Tpériode). Pour un servo on parle de Pulse-Code Modulated Signal (Signal modulé en code d'impulsion ) où seule l'impulsion compte, pas la fréquence (en théorie).

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 façon linéaire en un angle. La durée de retour à 0 de l'impulsion n’est pas critique, en pratique il faut éviter de dépasser 20ms entre deux fronts montants. A noter aussi que ce système présente 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 PWM Signal modulé en code d'impulsion

Page 2: 113 Module Ar 6 Programmation Du Servomoteur Aut14

J. Taillefer 243-113-AH 2 de3

Exemples de programmation avec Arduino

A. Fonction Servo

Cette fonction génére automatiquement les 20 impulsions requises afin de positionner le servomoteur à un angle voulu. D’abord, créer un objet, appelé ici myservo pour contrôler le servomoteur à l’aide 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 degrés :

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

myservo.detach(pin); Exemple de code:

#include <Servo.h> Servo myservo1; // Création de l’objet myservo1 (maximum de 8 objets servo). int servoPin = 8; // Initialiser le port de sortie PWM.. int fin=9; // Pin pour arrêter le servo : 1 arrête. int pos = 90; // Variable de la position angulaire du servo en degrés. 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 degrés. delay(15); // Attendre 15ms afin de laisser le servo se mettre en position. if(fin == 1)

{ myservo1.detach(); // Déconnecter le servo (consomme pas l’alimentation) }

}

B. Fonction digitalWrite

Cette fonction génère manuellement les 20 impulsions requises afin de positionner le servomoteur à un angle voulu.

Page 3: 113 Module Ar 6 Programmation Du Servomoteur Aut14

J. Taillefer 243-113-AH 3 de3

Exemple d’un train d’impulsions pour la commande du servomoteur :

… a b

a : largeur de l’impulsion (entre 1 et 2 ms) b : durée de 20 ms (0.02 s) entre deux impulsions … : Répéter pour 20 impulsions.

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

digitalWrite(servoPin, HIGH); Spécifier la durée haute de l’impulsion (a) en ajoutant un délai en microsecondes :

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

digitalWrite(servoPin, LOW); Il suffit de répéter en boucle un minimum de 20 fois cette forme d’onde avec un délai de 25 ms (minmum de 20 ms).

int pulseTime = a; // Durée 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; // Durée du pulse haut en microsecondes. int b = 25; // Durée 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. } }