Les servomoteurs

\partImg{Les servomoteur}{\rootImages/img.jpg}{0.4}

Présentation

\newcommand{\servo}{servo-moteurs }
\index{Servo-moteurs}
Les \servo 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

Figure – Constitution d’un servo-moteur

Domaines d’application

  • Modélisme
  • Robotique

Commande des \servo

Les \servo ont besoins d’être contrôlés via un signal PWM. [note]

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 va\(r\)ie\(r\) le \(r\)appo\(r\)t cyclique (appelé \(r\)) qui est comp\(r\)is ent\(r\)e 0 et 1.
\( r = \frac{T_{on}}{T_{signal}} \)
\begin{figure}[h]
\centering
\begin{subfigure}[b]{0.4\linewidth}
\begin{graphic}{0.8}{1}{-1}{60}{-1}{7}{t(ms)}{Tension V}{}
\addPoints{blue}{(0,5)(5,5)(5,0)(20,0)(20,5)(25,5)(25,0)(40,0)(40,5)(45,5)(45,0)(70,0)}
\addPoints{green}{(0,1.25)(70, 1.25)}
\addLegend{Tension PWM,~Tension moyenne}
\end{graphic}%NO END LINE HERE
\caption{r=0.25}
\end{subfigure}
\begin{subfigure}[b]{0.4\linewidth}
\begin{graphic}{0.8}{1}{-1}{60}{-1}{7}{t(ms)}{Tension V}{}
\addPoints{blue}{(0,5)(10,5)(10,0)(20,0)(20,5)(30,5)(30,0)(40,0)(40,5)(50,5)(50,0)(70,0)}
\addPoints{green}{(0,2.5)(70, 2.5)}
\addLegend{Tension PWM,~Tension moyenne}
\end{graphic}%NO END LINE HERE
\caption{r=0.5}
\end{subfigure}
\caption{Différents rapports cycliques}
\end{figure}

Applications de la PWM

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

  • Contrôle de la luminosité d’une LED
  • Contrôle de \servo

Code Arduino

Voici un code d’exemple pour faire varier 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

Trame de commande servomoteurs

\begin{graphic}{0.8}{0.4}{0}{62}{-1}{8}{t(ms)}{Tension(V)}{Trame PWM}
\addPoints{blue}{(0,5)(1,5)(1,0)(20,0)(20,5)(21,5)(21,0)(40,0)(40,5)(41,5)(41,0)(70,0)}
\addLegend{Ton=1ms (180°)}

\end{graphic}

Branchement d’un servo-moteur

  • Câble noir ou marron : GND
  • Câble rouge : +5V
  • Câble blanc ou jaune : Signal Arduino (11)

Code Arduino


  #include       //Inclusion de la bibliothèque Servo
Servo myservo; // Création d'un objet Servo
int pos = 0; //Angle du servomoteur

void setup() {
myservo.attach(11); //Choix de la broche du servo moteur
}

void loop() {
for (pos = 0; pos <= 180; pos += 1) { //Parcours la plage angulaire [0-180] degré par degré
myservo.write(pos); //Actualise la position
delay(15); //Attend 15 ms avant l'actualisation
}//Fin for
for (pos = 180; pos >= 0; pos -= 1) { //Parcours la plage angulaire [0-180] degré par degré
myservo.write(pos); //Actualise la position
delay(15); //Attend 15 ms avant l'actualisation
}//Fin for
}//Fin loop

Caractéristiques

Electriques

  • Tension de commande et d’alimentation : \~5V

Mécaniques

  • Couple de sortie (Nm)
  • Vitesse de rotation (degré/temps)