Le Servomoteur ! comment ça marche ?
Principe général du servomoteur
Utilisation pour nos systÚmes micro-programmé
Fonctionnement dâun servomoteur standard
Quelles différences entre servomoteurs digital (numérique) et analogique ?
Avantages Ă embarquer un microcontrĂŽleur
Construction et Fonctionnement dâun servomoteur
Utilisation des servomoteurs en mode programmé
Passons maintenant à un cÎté pratique :
Gestion de la durée de la pulsation de commande :
Principe général du servomoteur
Un servomoteur est avant tout un dispositif asservi en position.
Câest un systĂšme capable dâassurer et de maintenir une position.
Il existe une variĂ©tĂ© de dispositif nommĂ© âServomoteurâ dans une gamme dâutilisation assez Ă©largie.
Lâindustrie est le prĂ©curseur de lâutilisation dâĂ©quipements asservies en position, le terme de servomoteur a donc une origine industriel. A lâorigine le servomoteur est un prĂ©actionneur, a plupart du temps pneumatique (systĂšme membrane/ressort), plus rarement hydraulique ou Ă©lectrique dâune vanne de rĂ©gulation. Dans ce cas lâasservissement de position est toujours effectuĂ© par un organe distinct nommĂ© positionneur.
Un servomoteur est un systĂšme motorisĂ© capable dâatteindre des positions prĂ©dĂ©terminĂ©es, puis de les maintenir. La position est : dans le cas dâun moteur rotatif, une valeur dâangle et, dans le cas dâun moteur linĂ©aire une distance. On utilise des moteurs Ă©lectriques (continu, asynchrone, brushless) aussi bien que des moteurs hydrauliques. Le dĂ©marrage et la conservation de la position prĂ©dĂ©terminĂ©e sont commandĂ©s par un systĂšme de rĂ©glage.
Le systĂšme de rĂ©glage souvent Ă©lectronique compare le signal Ă une valeur prescrite de la position de consigne. Sâil y a une dĂ©viation, le moteur est commandĂ© dans la direction qui garantit le plus petit chemin Ă effectuer pour arriver Ă la valeur de consigne. Cela a pour consĂ©quence de faire diminuer lâĂ©cart. La procĂ©dure se rĂ©pĂšte aussi longtemps et, jusquâĂ ce que la valeur courante se trouve incrĂ©mentalement ou par lâintermĂ©diaire dâune approximation dans les seuils de tolĂ©rance de la valeur consigne. Alternativement, la position du moteur peut ĂȘtre saisie aussi numĂ©riquement et comparĂ©e via un ordinateur appropriĂ© Ă une valeur prescrite.
Il existe une vaste gamme de servomoteurs : des gros modĂšles industriels de plusieurs kilogrammes Ă courant alternatif, avec des boĂźtiers et carters dâengrenages en mĂ©tal, jusquâaux minuscules servomoteurs en plastique de quelques grammes Ă courant continu que lâon retrouve en modĂ©lisme dans les avions, les bateaux, les voitures et les hĂ©licoptĂšres modĂšles rĂ©duits.
Je limiterais cette petite Ă©tude Ă des servomoteurs utilisable dans nos petits montages ”system. Une utilisation assez comparable en nature Ă celui du monde du modĂ©lisme. Pour un usage sur des systĂšmes programmĂ©s, seul la maniĂšre de gĂ©nĂ©rer et de contrĂŽler la consigne dâorigine se diffĂ©rencie du mode du modĂ©lisme qui utilise principalement une consigne radio-commandĂ©.
Utilisation pour nos systÚmes micro-programmé
Comme pour le modélisme le servomoteur sera utilisé en ”system pour réaliser des déplacements en translation ou en rotation sur des montages de taille et de puissances limités.
Mais mĂȘme dans ces limites dâusage assez fermĂ©, il existe une grande variĂ©tĂ© et qualitĂ© de servomoteur, se diffĂ©renciant par leur vitesse de rotation/seconde , par leur course en degrĂ© et par leur couple exprimĂ© en kg.cm .
Ils se distinguent Ă©galement par la matiĂšre utilisĂ©e et le montage Ă©ventuel sur roulements âŠ
Câest un ensemble mĂ©canique et Ă©lectronique comprenant :
Un moteur Ă courant continu de trĂšs petite taille ;
Un réducteur en sortie de ce moteur diminuant la vitesse mais augmentant le couple ;
Un potentiomĂštre (faisant fonction de diviseur rĂ©sistif) qui gĂ©nĂšre une tension variable, proportionnelle Ă lâangle de lâaxe de sortie ;
Un dispositif Ă©lectronique dâasservissement ;
Un axe dépassant hors du boßtier avec différents bras ou roues de fixation.
En modélisme les servosmoteur servent à actionner les parties mobiles du modÚle : ailerons, volets et trains pour les avions, contrÎle de direction dans le cas de modélisme automobile⊠à cette fin, les moteurs sont asservis et obéissent à une commande externe, généralement transmise par radio
Dans nos utilisations micro-programmĂ© on va principalement retrouver les servomoteurs en robotique. Ils seront utilisĂ©s Ă chaque fois que lâon aura besoin dâeffectuer un positionnent, un dĂ©placement, de façons gĂ©nĂ©rale dĂšs que nous auront besoin dâeffectuer une action dynamique sur lâun de nos objets, contrĂŽler par lâun de nos micro-contrĂŽleur.
Fonctionnement dâun servomoteur standard
MĂ©caniquement, il sâagit dâun moteur avec rĂ©ducteur. Le mouvement de sortie est une rotation . Lorsque le moteur tourne, lâaxe du servomoteur change de position , ce qui modifie la rĂ©sistance du potentiomĂštre. Le rĂŽle de lâĂ©lectronique est alors de commander le moteur pour que la position de lâaxe de sortie soit conforme Ă la consigne reçue .
La commande se fait via une petite impulsion, une consigne de position codĂ© en largeur dâimpulsion plus communĂ©ment appelĂ© PWM ( P ulse W ide M odulation en français MLI M odulation Ă L argeur dâ I mpulsion). Cela signifie que câest la durĂ©e des impulsions qui dĂ©termine lâangle absolu de lâaxe de sortie et donc la position du bras de commande du servomoteur. Le signal est rĂ©pĂ©tĂ© pĂ©riodiquement, en gĂ©nĂ©ral toutes les 20 millisecondes, ce qui permet Ă lâĂ©lectronique de contrĂŽler et de corriger continuellement la position angulaire de lâaxe de sortie, cette derniĂšre Ă©tant mesurĂ©e par le potentiomĂštre.
La durée de cette impulsion de consigne est comprise entre 1ms et 2ms. La valeur intermédiaire de 1,5ms donne au servomoteur la position centrale, à 90° en général.
Commande en largeur dâimpulsion : la largeur des impulsions, comprise en gĂ©nĂ©ral entre 1 et 2 millisecondes, commande la position du servomoteur.
Lâaugmentation de lâamplitude des impulsions agit sur le contrĂŽle de la vitesse jusquâau moment oĂč le bras du servomoteur se trouve dans la position souhaitĂ©e . Durant la rotation , le potentiomĂštre indique au circuit Ă©lectronique le moment oĂč la position dĂ©sirĂ©e est obtenue . Les impulsions diminuent alors dâamplitude jusquâĂ ce que plus aucune tension soit appliquĂ©e au moteur du servomoteur tout en conservant le bras dans sa nouvelle position .
InconvĂ©nient : lâimpulsion est forte et instantanĂ©e , entraĂźnant aucune continuitĂ© de la rotation initiĂ©e comme pourrait le faire une mise sous tension continue . Les petites impulsions de commande ne produisent que de faibles effets . Ils peuvent se rĂ©vĂ©ler inefficaces et sont les causes de lâimportante zone neutre qui caractĂ©rise les servomoteurs traditionnels .
Quelles différences entre servomoteurs digital (numérique) et analogique ?
Quâil soit Analogique ou Digital, un servomoteur contient le mĂȘme moteur, les mĂȘmes engrenages mais aussi le mĂȘme potentiomĂštre.
OĂč est donc la diffĂ©rence ? ⊠il embarque un microcontrĂŽleur en lieu et place de lâĂ©tage de commande Ă©lectronique (analogique).
Avantages Ă embarquer un microcontrĂŽleur
Le microcontrÎleur embarqué dans le servomoteur est capable de transformer la consigne de position, en une chaßne de pilotage au moteur plus dynamique.
LâĂ©chantillonnage de la commande moteur passe dâun signal Ă 50Hz Ă un pilotage en PWM Ă 300Hz. Cela confĂšre une bien meilleur dynamique :
Une rapidité accrue du temps de réponse du moteur.
Donc un temps dâatteinte Ă la consigne plus court.
La mémorisation de la consigne de base, apporte un autre avantage :
Celui de maintenir la position dans lâĂ©tat jusquâĂ tant quâune nouvelle consigne est appliquĂ©.
Le servomoteur NumĂ©rique (Digital) gagne ainsi en finesse et en prĂ©cision, rĂ©duisant Ă©galement sa zone âneutreâ tout en garantissant une bien meilleur stabilitĂ© statique. Car la position finale est contrĂŽlĂ© et compensĂ© tant quâune nouvelle consigne nâest pas demandĂ©.
Inconvénient du servomoteur digital
une plus grande consommation dâĂ©nergie
Construction et Fonctionnement dâun servomoteur
Utilisation des servomoteurs en mode programmé
Passons maintenant à un cÎté pratique :
Dans cette premiĂšre Ă©tape Ă©tudions la mise en Ćuvre dâun servomoteur avec un Arduino.
Je vous ai indiqué que la consigne à transmettre à un servomoteur était du type PWM. Cela étant dit il faut pour assurer un pilotage correct entrer dans quelques détails de fonctionnements particuliers aux servomoteurs.
Le signal PWM destinĂ© aux servomoteurs doit impĂ©rativement ĂȘtre cadencĂ© Ă une frĂ©quence de 50Hz.
Soit une pulsation de signal toute les 20ms, comme représenté dans le schéma suivant :
Cela tombe bien, me direz-vous, lâArduino possĂšde prĂ©cisĂ©ment une fonction pour traiter le mode PWM :
La fonction analogWrite().
LoupĂ©, car cette fonction distribue un signal PWM de frĂ©quence 500Hz, soit 10x trop important pour ĂȘtre comprise par notre servomoteur. Alors comment faire ? ⊠Nous allons voir cela un peut pus loin.
Avant dâĂ©mettre notre consigne regardons dâabord comment faire comprendre au servomoteur comment atteindre telle distance, Ă telle vitesse et dans tel sens.
Gestion de la durée de la pulsation de commande :
Vous vous en doutiez, en effet câest cette largeur dâimpulsion qui indiquera la nature de lâaction Ă effectuer par le servomoteur.
Mais comment ça marche ?
Attention !! et retenez bien cela âŠ. Toute la subtilitĂ© de la commande dâun servomoteur se joue sur une toute petite milliseconde. Oui! une seule milliseconde , 1ms.
Exemple :
Prenons un servomoteur standards, qui fonctionne sur une plage de 180°. ConsidĂ©rons quâil se trouve en son point central, usuellement indiquĂ© comme point âneutreâ Ă 90°.
Bien, alors pour effectuer un positionnement Ă 0° (soit vers la droite de mon cercle trigonomĂ©trique) jâappliquerais une consigne, une pulsation de 1ms, rĂ©pĂ©tĂ© toute les 20ms.
Vous aurez immĂ©diatement compris que pour positionner le servomoteur Ă lâangle opposĂ©, cad Ă 180°, je vais donc appliquer une consigne, une pulsation de 2ms, Ă une cadence de 50HZ.
Et pour revenir au point neutre Ă 90°, câest tout Ă fait proportionnel, il faut donc appliquer une consigne, une largeur dâimpulsion de 1,5ms avec toujours la mĂȘme frĂ©quence de 50Hz. câest tout âŠ
Cela est illustré par le schéma suivant :
Et pour la vitesse ?
Rien Ă dire, car rien Ă faire ⊠?? Jâexplique (oui quand mĂȘme un peut) ,câest en fait la boucle de rĂ©gulation du servomoteur qui sâoccupe de tout, selon un seul objectif : aller Ă la valeur demandĂ© le plus vite possible et de façons stabilisĂ©e.
Selon la performance mĂ©canique des servomoteurs, cela va lĂ©gĂšrement diffĂ©rer, en respectant toujours la mĂȘme rĂšgle. Faire le job le plus vite possible ! Cela implique que plus la consigne est Ă©loignĂ© de la position courante, plus lâon va monter en vitesse, en dĂ©cĂ©lĂ©rant Ă lâapproche de la consigne, la valeur courante Ă©tant donnĂ©e par le potentiomĂštre montĂ© sur lâaxe de sortie du servomoteur. (le feeback de la boucle de rĂ©gulation)
Oui mais ! Mais quoi ?
Mais pour les servomoteurs Ă rotation continue, on fixe bien la vitesse, NON ?
En fait, on utilise exactement la mĂȘme mĂ©thode. Mais, mais on triche sur un seul paramĂštre. Oui mais lequel ?
Soit vous trouvez tout seul, soit vous allez voir sur mon prochain article.
âTransformation en servomoteur Ă rotation continueâ
Vous allez me dire, ça va pas ĂȘtre coton pour piloter le servomoteur avec une finesse aussi pousser, tout se joue en 1ms.
Rassurez-vous et comme dâab, les dĂ©veloppeurs ont dĂ©jĂ fait tout le job pour vous, il suffit comme toujours de choisir la bonne librairie de travail.
CâĂ©tait bien la peine de nous prendre la tĂȘte avec toute cette thĂ©orie. Oui vraiment oui, câest beaucoup mieux de comprendre les concepts des objets que lâon manipule.
Bon alors, on y va Ă cette programmation ??
Ok ! RĂ©alisons dâabord le montage. La connectique dâun servomoteur est composĂ© de trois fils :
Deux pour lâalimentation (Vcc et la masse) et le dernier pour le signal de commande.
1 fil de masse - noir ou marron -
1 fil de tension dâalimentation de 4 Ă 6V - rouge -
1 fil de tension de commande 0-5V - blanc, jaune voir orange selon les constructeurs -
Un servomoteur accepte gĂ©nĂ©ralement une plage dâalimentation comprise entre 4.5V et 6V (Ă 6V il aura plus de couple et sera un peu plus rapide quâĂ 4.5V).
On peut, sans ĂȘtre du tout recommander, utiliser la tension de 5V distribuer par lâArduino, mais attention lâalimentation de lâArduino nâest pas conçu pour fournir un courant important. On risque de dĂ©tĂ©riorer dĂ©finitivement lâAduino.
Il est bien prĂ©fĂ©rable dâutiliser une Alimentation complĂ©mentaire de 6V. Dans ce cas, nâoubliez pas de relier la masse de lâalimentation externe et celle de lâArduino afin de garder un rĂ©fĂ©rentiel Ă©lectrique commun.
Le montage sur un Arduino Uno :
Et enfin le programme !
Enfin presque, dâabord quelle librairie utiliser, pour ne par ĂȘtre obligĂ© de gĂ©rer en dur cette notion de temps de signal.
LâĂ©quipe Arduino, a bien fait le travail, en proposant une bibliothĂšque nommĂ© trĂšs a propos âServoâ.
1er action : inclure la fameuse bibliothĂšque dans notre code.
Puis on crĂ©e une instance, un objet âServoâ, je propose de lâappeler âtestServoâ.
Bien sur il faudra crée une instance de ce type pour chaque servomoteur à creer dans notre programme.
Maintenant nous devons indiquer à quelle broche est attaché physiquement le servomoteur.
La mĂ©thode (fonction Ă utiliser) de nommer prĂ©cisĂ©ment âattach()â, elle prend 3 arguments :
Le numéro de la broche sur laquelle est relié le fil de signal
La valeur basse (angle Ă 0°) de la durĂ©e de lâĂ©tat haut du signal de PWM en microsecondes (optionnel, dĂ©faut Ă 544 ”s)
La valeur haute (angle Ă 90°, 180°, 360°, etc.) de la durĂ©e de lâĂ©tat haut du signal de PWM en microsecondes (optionnel, dĂ©faut Ă 2400 ”s)
Dans lâexemple du servomoteur standard dĂ©crit prĂ©cĂ©demment, on obtient :
#include <Servo.h> Servo monServo; void setup() { monServo.attach(2, 1000, 2000); }
Voilà notre servomoteur initialisé, nous pouvons maintenant lui passer une consigne.
En gĂ©nĂ©ral pour sâassurer de sa position dite âneutreâ, dans la phase dâinitialisation, il est frĂ©quent de positionner le servomoteur dans cette phase, en demandant une consigne de 1,5ms. Dans le cas prĂ©sent une valeur dâangle de 90°.
Pour cela, nous allons utiliser la méthode (fonction) prévue à cet effet : write()
En intĂ©grant cette commande dans le code prĂ©cĂ©dent, jâobtiens le programme complet suivant :
#include <Servo.h> Servo monServo; void setup() { monServo.attach(2, 1000, 2000); monServo.write(90); } void loop() { }
On aurait pu ajouter une commande de positionnement dans le corps du programme (boucle loop), vous avez maintenant compris comment cela fonctionne, alors Ă vous maintenant de jouer.