Ce que vous allez faire
Vous allez contrôler la position angulaire d'un servo à l'aide de votre encodeur rotatif. Cet exercice permet de mobiliser ce qu'on a vu sur les timers et me fournit l'occasion de vous parler des servos.
Les servos
Les servos, ou servomoteurs, sont des moteurs dont la position
angulaire de l'axe est asservie (c'est-à-dire "dépend de")
au rapport cyclique d'un signal de commande.
Cette propriété en fait des actionneurs de choix pour construire bras manipulateurs, électrovannes, commandes de vol, etc. Si vous avez fait du radio-modélisme, vous avez forcément a minima entendu ce nom.
Un servo est donc commandé à l'aide d'un signal PWM. Sa fréquence est de 50Hz (période de 20ms) et au repos (angle 0° de l'axe), la largeur de l'impulsion est de 1.5ms. Si la largeur de l'impulsion est < 1.5ms, l'angle de l'axe du servo est positif (donc l'axe tourne dans le sens anti-horaire). Si la largeur de l'impulsion est > 1.5ms, l'angle de l'axe du servo est négatif (l'axe tourne dans le sens horaire).
La largeur de l'impulsion peut varier de +/- 1ms autour de la valeur médiane, donc entre 0.5ms et 2.5ms. Sur cet intervalle, la position angulaire de l'axe variera de 90° à -90°, puisque je vous ai conseillé d'acheter un servo "180°".
Il existe aussi des servos dits "360°" pour lesquels ce n'est pas la position de l'axe qui est asservie, mais le sens et la vitesse de rotation. Lorsque le rapport cyclique est égal à la valeur médiane, le moteur est arrêté. S'il lui est supérieur, le moteur tourne dans un sens, inférieur dans l'autre. Dans ces 2 cas, la vitesse de rotation croît avec la valeur absolue de l'écart du rapport cyclique du signal par rapport à la valeur médiane.
Détails pratiques
Le servo que je vous ai recommandé est fourni avec des accessoires, dont une patte de fixation et plusieurs bras (mais les anglophones disent "horn", c'est-à-dire corne). Vous en fixerez un sur l'axe du servo pour bien visualiser son angle. Vous trouverez une documentation succincte ici.
Le schéma du câblage à réaliser est le suivant :
J'ai choisi de laisser l'encodeur connecté à PD3 et PD4 comme précédemment, et de connecter la ligne de commande du servo à PD2, c'est-à-dire T1CH1. En effet, si vous utilisez TIM2 pour gérer l'encodeur rotatif, vous ne pouvez pas l'utiliser pour autre chose. Il est donc nécessaire d'utiliser TIM1 pour commander le servo.
Cet exercice ne devrait pas vous poser de grosses difficultés, mais il est important de le faire car nous retrouverons notre ami le servo dans un exercice ultérieur. :)