PrécédentLes Module RTC14 / 24SuivantLes moteurs pas-à-pas
3. Les microcontrôleurs

Les servomoteurs

Les servomoteurs

servo-moteurs

Les sont utilisés lorsqu'on souhaite un asservissement en position d'un axe de rotation.

Asservissement

Un asservissement est un processus de correction pour maintenir une consigne.
Par exemple, un régulateur de vitesse dans une voiture est un système asservi car la vitesse doit être constante quelle que soit la pente.

Architecture

Constitution d'un servo-moteur
Constitution d'un servo-moteur

Un servomoteur est composé de trois parties principales :

Le fonctionnement global d'un servomoteur peut être décrit comme un système en boucle fermée, où le circuit de commande ajuste en permanence la tension envoyée au moteur en fonction des informations de rétroaction de la position.

Contrôle de position

Le principal avantage d'un servomoteur est sa capacité à contrôler précisément la position angulaire de son arbre de sortie. Pour ce faire, le circuit de commande utilise un système de retour de position.

Le capteur de position est habituellement un potentiomètre ou un capteur de position à effet Hall.

Principales caractéristiques

Les servomoteurs présentent plusieurs caractéristiques importantes à prendre en compte lors du choix d'un modèle pour une application spécifique :

Mécaniques

Électriques

Domaines d'application

Commande des

Les ont besoins d'être contrôlés via un signal PWM ou MLI.

Principe de la PWM

La PWM est la création d'un signal numérique dont le temps à l'état haut est variable.
On fait varier le rapport cyclique (appelé $r$) qui est compris entre 0 et 1.

$$ r = \frac{T_{on}}{T_{signal}} $$

Différents rapports cycliques
Différents rapports cycliques

Trame de commande servomoteurs

Pour indiquer une consigne de position, il faut faire varier le rapport cyclique du signal envoyé au servomoteur.

La période des signaux est de 20 ms et le temps à l'état Haut du signal représente la position :

Une trame PWM
Une trame PWM

Branchement d'un servo-moteur

⚠️

Lors de ce chapitre sur les servomoteurs, l'alimentation se fait directement sur la carte électronique. Ce montage ne convient plus si une charge est connectée au servomoteur car le courant va monter et peut potentiellement détruire l'alimentation interne de la carte. Pour plus d'explications, je vous invite à vous reporter au chapitre {Label_Power

Branchement d'un servomoteur
Branchement d'un servomoteur

Code Arduino

C++

Variation de la position d'un

#include 

#define SERVO_PIN 11 //broche de commande //Inclusion de la bibliothèque Servo Servo myServo; // Création d'un objet Servo void setup() myServo.attach(SERVO_PIN); //Choix de la broche du servo moteur void loop() { for (int pos = 0; pos <= 180; pos += 1) myServo.write(pos); //Actualise la position delay(15); //Fin for for (int pos = 180; pos >= 0; pos -= 1) myServo.write(pos); //Actualise la position delay(15); //Fin for }//Fin loop

Code ESP12

C++

Variation de la position d'un pour ESP12

#include 

#define SERVO_PIN D2 //broche de commande //Inclusion de la bibliothèque Servo Servo myServo; // Création d'un objet Servo void setup() myServo.attach(SERVO_PIN); //Choix de la broche du servo moteur void loop() { for (int pos = 0; pos <= 180; pos += 1) myServo.write(pos); //Actualise la position delay(15); //Fin for for (int pos = 180; pos >= 0; pos -= 1) myServo.write(pos); //Actualise la position delay(15); //Fin for }//Fin loop

Pour aller plus loin

Une autre application de la PWM

En faisant varier la tension de sortie dans le temps rapidement ($>$50Hz), on peut simuler une tension analogique.

Voici un code d'exemple pour faire varier la luminosité d'une LED.

C++

Variation de la luminosité d'une LED

const int pin_led = 11; //Selection d'une broche PWM

float duty_cyle[11] = 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0;//Création d'un tableau avec les différents rapports cycliques void setup() pinMode(pin_led, OUTPUT); //Mise en sortie de la broche LED //Fin setup void loop() { for(int i=0;i<11;i++) int value_r = duty_cyle[i]*255.0; //Conversion d'une valeur entre 0 et 1 en une valeur entre 0 et 255 analogWrite(pin_led, value_r); //Change le rapport cyclique pendant 3 s delay(600); //Attend 0.6s }//Fin loop

PrécédentLes Module RTC14 / 24SuivantLes moteurs pas-à-pas