Les servomoteurs
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
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)