Contrôle du servomoteur à l'aide des microcontrôleurs AVR AtMega32

Les capacités d'Arduino sont très diverses : du contrôle conventionnel de la température et de l'acquisition de données au contrôle des imprimantes 3D et maisons intelligentes. De plus, en utilisant cette carte, vous pouvez programmer divers mécanismes et même des robots. À ces fins, divers moteurs, moteurs et entraînements sont souvent utilisés.

Les mécanismes les plus courants et les plus populaires sont les moteurs pas à pas et les servos. Nous parlerons de ce dernier dans cet article. Les servomoteurs sont les moteurs les moins chers et les plus pratiques à utiliser. Leur taille et leur poids sont petits et une combinaison de ces modules contribuera à créer avec succès des robots.

Commençons par nous familiariser avec le plus populaire d'entre eux, sinon il s'appelle SG90 (Tower Pro Micro Servo 9G). Le servomoteur est une petite boîte dans laquelle le mécanisme lui-même est caché. Apprendre à écrire correctement code de programme, vous pouvez contrôler la position de l'arbre.

Pour connecter le servomoteur à Arduino, la carte utilise 3 contacts (3 fils mâle-mâle sont utilisés pour la connexion) : alimentation (5 V), masse et sortie analogique (située sur le panneau numérique). Diagramme visuel la connexion est illustrée dans la figure ci-dessous :

Attention! Lors de la connexion de plusieurs servos ou d'un servo plus puissant, vous pouvez autoriser une chute de tension sur la carte Arduino (en raison d'une faible stabilisation sur la carte). Par conséquent, si vous connectez plusieurs servomoteurs, il est préférable de connectez les contacts d'alimentation à une source distincte de celle de la carte.

Une fois connecté, vous pouvez accéder à l'IDE Arduino et essayer le premier programme pour vérifier la fonctionnalité du module. Nous vous recommandons également d'utiliser la bibliothèque Servo.h. Il est déjà intégré EDI Arduino, ce qui signifie que vous n’avez pas besoin de le télécharger et de l’installer. Et d'ailleurs, cette bibliothèque contient déjà quelques commandes et simplifie ainsi le travail avec le servo variateur, nous épargnant des codes très longs et gourmands en espace. Il contient les commandes utiles suivantes :

  • attacher(pin_number) - initialisation du servo variateur ;
  • écrire(angle) - rotation du servomoteur à un angle donné ;
  • lire() - obtenir l'angle du servo actuel.

Regardons maintenant le premier programme utilisant un servomoteur.

Ce programme vous permettra de modifier l'angle de rotation de l'arbre du servo variateur au fil du temps :

#inclure ; //utiliser la bibliothèque pour travailler avec le servomoteur Servo servo ; //déclare une variable servo de type Servo void setup() //procédure de configuration ( servo.attach(10); //associe le lecteur au port 10) void loop() //procédure de boucle ( servo.write(0); //mettre l'arbre à un délai de 0 (2000); //attendre 2 secondes servo.write(180); //mettre l'arbre à un délai de 180 (2000); //attendre 2 secondes)

#inclure ; //utiliser la bibliothèque pour travailler avec le servomoteur

Servo-servo ; //déclare une variable servo de type Servo

void setup () // procédure de configuration

servo. attacher(10); // lie le lecteur au port 10

void loop () //boucle de procédure

servo. écrire(0); // met l'arbre à 0

retard(2000); //attends 2 secondes

servo. écrire (180); //mettre l'arbre à 180

C'est un élément de cinématique de précision, permettant un positionnement précis des mécanismes. Mais contrairement à un moteur pas à pas, un servomoteur a retour, vous permettant de suivre l'angle exact de rotation de l'arbre à tout moment. Peut être utilisé comme source de commentaires Divers types codeurs et potentiomètres.

Dans l'article, nous examinerons la connexion et la collaboration avec des représentants juniors des servos - les soi-disant. servos - un favori parmi les constructeurs et modélistes de robots.

Constructif

La servomachine se compose d'un boîtier contenant un petit moteur électrique à collecteur, une boîte de vitesses et une électronique de commande.

Les potentiomètres sont utilisés comme retour. Par conséquent, ces servos ont des limitations sur l'angle de rotation de l'arbre autour de l'axe. Ainsi, dans les servos Futaba S3003 que j'ai achetés, l'angle de rotation de l'arbre de sortie est de 225°.

Caractéristiques techniques du Futaba S3003

Paramètre Tension d'alimentation, V
4,8 6,0
Force de l'arbre 3,2 kg/cm 4,1 kg/cm
Vitesse positionnement 0,23 s/60° 0,19 s/60°
Taille, L x l x H 41 mm x 20 mm x 36 mm
Poids, g37

Le potentiomètre de rétroaction est placé directement sur l'arbre de sortie, grâce auquel la servocommande surveille la position exacte de l'arbre : résistance du potentiomètre change proportionnellement angle de braquage . Après avoir lu la résistance, l'unité de contrôle compare cette valeur avec celle qui devrait être à une position d'arbre donnée. Si ces valeurs diffèrent, la centrale commande au moteur de faire tourner l'arbre en direction donnée, réduisant la différence de valeurs. Ayant atteint la position de l'arbre, lorsque la valeur du potentiomètre correspond à la valeur réglée, le moteur s'arrête. La lecture de la valeur du potentiomètre et sa comparaison s'effectuent à haute fréquence, de sorte que l'arbre de sortie aura tendance à occuper une position donnée lorsque la charge externe change.

La conception de la servomachine est conçue de telle manière que le couple du moteur à l'arbre de sortie est transmis via une boîte de vitesses avec un rapport de démultiplication élevé. Par conséquent, avec de petites dimensions et une consommation d'énergie réduite, les servos peuvent fournir une plus grande traction.


Contrôle

Le signal de commande est un signal impulsionnel d'une période de 20 ms et d'une durée de 0,8 à 2,2 ms. Il s'agit d'une certaine norme pour contrôler les servos. Plus l'impulsion arrive longtemps, plus l'angle de rotation de l'arbre du servo est grand.Pour accélérer le servo, la période de répétition des impulsions peut être réduite à 10 ms.


Le signal de commande est envoyé au servo via le fil de signal S. Dans mon servo, il est blanc, dans certains modèles, il est jaune. En plus du fil de signal, deux fils sortent du servo - lignes électriques - masse (noir) et alimentation (rouge)


Partie logicielle

Comme vous pouvez le voir, contrôler le servo est assez simple : il suffit de générer un signal d'impulsion avec la fréquence et le rapport cyclique requis. Ce signal peut être généré PWM, ou vous pouvez écrire votre propre fonction de gestion des interruptions de minuterie. Mais Bascom-AVR dispose déjà d'une commande intégrée pour contrôler les servos -Servomoteur . Considérons-le.

Vous devez d'abord configurer la connexion des servos :

Configuration Servos = X, Servo1 = Portb. 0, Servo2 = Portb. 1, Recharger = Var

Servomoteurs= X ; le nombre de servos connectés est indiqué ; jusqu'à 14 servos peuvent être connectés.

Servo1= Portb. 0 ; indique le port de connexion du premier servo

Servo2= Portb. 1 ; indique le port de connexion pour le deuxième servo

Recharger= Var ;Ici Vartemps en microsecondes qui s'écoule entre les interruptions de la minuterie.

Par défaut, Timer0 est utilisé pour organiser les interruptions, vous ne pouvez donc plus l'utiliser à vos propres fins. Bascom-AVR vous permet de transférer le service d'interruption vers n'importe quel autre timer, par exemple, pour libérer Timer0 et utiliser Timer1, spécifiez simplement ceci dans la ligne de configuration :

Configuration Servos = 2, Servo1 = Portb. 0, Servo2 = Portb. 1, recharger = 10, Minuteur= Minuterie1


Une fois que tout est configuré, il ne reste plus qu'à piloter notre servo. Cela se fait avec la commande suivante

Servomoteur( un ) = F

a - numéro de série du servo

F est une variable dont la valeur précise l'angle de rotation de l'arbre d'asservissement

Code de test complet :


$fichierreg = "m8def.dat" "microcontrôleur ATmega8
$cristal = 8000000 "fréquence de fonctionnement 8 MHz

"nous configurons les ports pour connecter les servos
Configuration Portb. 0 = Sortir
Configuration Portb. 1 = Sortir

"on configure les connexions de deux servos
Configuration Servos = 2, Servo1 = Portb. 0, Servo2 = Portb. 1, recharger = 15

Faible F CommeOctet"variable pour le premier servo
Faible S CommeOctet"variable pour le deuxième servo

"activer les interruptions
Activer Interruptions

F= 15 "la valeur de la variable définit l'angle de rotation de l'arbre d'asservissement
S= 70

Faire

Servomoteur(1) = F
Servomoteur(2) = S

Boucle

Fin


Je ne fournis pas de schéma de connexion, je pense qu'un seul fil de signal ne posera pas de problèmes ;) Il peut être connecté directement au port du microcontrôleur, ou via une résistance avec une résistance de quelques centaines d'ohms - pour être prudent .

En modifiant les valeurs des variables F et S, nous pouvons modifier respectivement l'angle de rotation du premier et du deuxième servos. Plus la valeur du paramètre Reload est basse, plus nos servos tourneront rapidement jusqu'à l'angle souhaité.

J'ai sélectionné une plage de travail pour mes servos c'est la valeur Servo(a) dans laquelle l'arbre peut tourner. L'arbre occupe ses positions extrêmes aux valeurs de 0 et 150 ; respectivement, à la valeur de 75, l'arbre occupe une position intermédiaire.


Servo(a) =0 Servo(a) =75 Servo(a) =150

Dans les conceptions d'équipements modernes créés sur la base haute technologie, divers processus automatiques. Parmi eux, un servomoteur installé dans le but d'effectuer éléments séparés et les détails des mouvements dynamiques constants. Ces dispositifs assurent un contrôle constant des angles de rotation de l'arbre et règlent la vitesse souhaitée dans les dispositifs électromécaniques.

Les servomoteurs font partie intégrante de ces systèmes, qui permettent de contrôler les vitesses dans la plage souhaitée dans un laps de temps défini. Ainsi, tous les processus et mouvements peuvent être répétés périodiquement, et la fréquence de ces répétitions est intégrée au système de contrôle.

Dispositif de servomoteur

Les principales pièces qui composent un servomoteur typique sont le rotor et le stator. Pour la commutation, des composants spéciaux sont utilisés sous forme de fiches et de boîtes à bornes. La gestion, le contrôle et la correction des processus sont effectués à l'aide d'un nœud de contrôle distinct. Pour allumer et éteindre le servo, utilisez système séparé. Toutes les pièces sont placées dans un boîtier commun.

Presque tous les servos disposent d'un capteur qui exploite et surveille certains paramètres, tels que la position, la force ou la vitesse de rotation. Pris en charge par l'unité de contrôle mode automatique paramètres nécessaires lors du fonctionnement de l'appareil. Le choix de l'un ou l'autre paramètre s'effectue en fonction des signaux reçus du capteur à des intervalles spécifiés.

La différence entre un servomoteur et un moteur électrique conventionnel réside dans la capacité de déplacer l'arbre vers une position précise, mesurée en degrés. La position réglée, ainsi que d'autres paramètres, sont maintenus par l'unité de commande.

Leur principe de fonctionnement est de transformer énergie électriqueà la mécanique, à l'aide d'un moteur électrique. Une boîte de vitesses est utilisée comme entraînement, permettant de réduire la vitesse de rotation à la valeur requise. Partie de cet appareil comprend des arbres avec des engrenages qui convertissent et transmettent le couple.

Comment fonctionne un servo variateur ?

La rotation de l'arbre de sortie de la boîte de vitesses, relié par des engrenages au servomoteur, s'effectue par le démarrage et l'arrêt du moteur électrique. La boîte de vitesses elle-même est nécessaire pour réguler la vitesse. L'arbre de sortie peut être connecté à des mécanismes ou des appareils qui doivent être contrôlés. La position de l'arbre est contrôlée à l'aide d'un capteur de rétroaction, capable de convertir l'angle de rotation en signaux électriques et sur lequel repose le principe de fonctionnement de l'ensemble du dispositif.

Ce capteur est également appelé codeur ou potentiomètre. Au fur et à mesure que vous tournez le curseur, sa résistance changera. Les changements de résistance sont directement proportionnels à l'angle de rotation du codeur. Ce principe le travail vous permet d'installer et de réparer des mécanismes dans une certaine position.

De plus, chaque servomoteur possède une carte électronique qui traite signaux externes venant du potentiomètre. Ensuite, une comparaison des paramètres est effectuée, sur la base des résultats desquels le moteur électrique est démarré ou arrêté. Par conséquent, en utilisant carte électronique les commentaires négatifs sont maintenus.

Vous pouvez connecter le servomoteur à l'aide de trois fils. Deux d'entre eux alimentent le moteur électrique et le troisième sert à transmettre les signaux de commande qui entraînent l'arbre dans une certaine position.

Il est possible d'éviter des charges dynamiques excessives sur le moteur électrique en utilisant une accélération douce ou un freinage tout aussi doux. Pour cela, des microcontrôleurs plus complexes sont utilisés, offrant un contrôle et un contrôle de position plus précis de l'élément de travail. Un exemple est Disque dur un ordinateur dans lequel les têtes sont installées dans la position souhaitée à l'aide d'un entraînement de précision.

Commande de servomoteur

La condition principale pour qu'un servomoteur fonctionne correctement est qu'il fonctionne avec le système dit G-code. Ces codes sont un ensemble de commandes de contrôle intégrées dans un programme spécial.

Si nous prenons comme exemple la CNC - numérique contrôle logiciel, alors dans ce cas les servos interagiront avec . Selon le niveau tension d'entrée ils sont capables de modifier la valeur de tension sur l'enroulement ou l'induit d'excitation du moteur électrique.

Le contrôle direct du servomoteur et de l'ensemble du système s'effectue à partir d'un seul endroit : l'unité de commande. Lorsqu'une commande est reçue d'ici pour parcourir une certaine distance le long de l'axe de coordonnées X, une tension d'une certaine valeur apparaît dans le convertisseur numérique-analogique, qui est fourni comme alimentation au lecteur de cette coordonnée. Dans le servomoteur, le mouvement de rotation de la vis mère commence, reliée à l'encodeur et à l'actionneur du mécanisme principal.

L'encodeur génère des impulsions qui sont comptées par l'unité qui contrôle le servomoteur. Le programme est conçu pour se conformer Un certain montant signaux du codeur, la distance réglée que l'actionneur doit parcourir. DANS bon moment convertisseur analogique, ayant reçu nombre fixe impulsions, cesse de produire une tension de sortie, en conséquence, le servomoteur s'arrête. De la même manière, sous l'influence d'impulsions, la tension est rétablie et le fonctionnement de l'ensemble du système reprend.

Types et caractéristiques

Les servomoteurs sont disponibles dans la plupart différentes options permettant leur utilisation dans de nombreux domaines. Les principales conceptions sont divisées en collecteurs et conçues pour fonctionner en courant continu et alternatif.

De plus, chaque servomoteur peut être synchrone ou asynchrone. Appareils synchrones avoir la possibilité de définir une vitesse de rotation de haute précision, ainsi que des angles de rotation et une accélération. Ces entraînements atteignent très rapidement leur vitesse nominale. Les servomoteurs asynchrones sont contrôlés en modifiant les paramètres du courant d'alimentation lorsque sa fréquence change à l'aide d'un onduleur. Ils avec haute précision maintenir la vitesse réglée même aux vitesses les plus basses.

En fonction de la diagramme schématique et conceptions, les servos peuvent être électromécaniques et électrohydromécaniques. La première option, qui comprend une boîte de vitesses et un moteur, se caractérise par de faibles performances. Dans le second cas, l'action se produit très rapidement du fait du mouvement du piston dans le cylindre.

Chaque servo variateur est caractérisé par certains paramètres :

  • Couple ou force exercé sur un arbre. Il est considéré comme le plus indicateur important fonctionnement du servomoteur. Pour chaque valeur de tension, il existe son propre couple, reflété dans la fiche technique du produit.
  • Vitesse de rotation. Ce paramètre représente certaine période le temps nécessaire pour changer la position de l'arbre de sortie de 600. Cette caractéristique dépend également de la valeur de tension spécifique.
  • L'angle de rotation maximum selon lequel l'arbre de sortie peut tourner. Le plus souvent, cette valeur est de 180 ou 3600.
  • Tous les servos sont divisés en numériques et analogiques. En fonction de cela, le servomoteur est contrôlé.
  • Alimentation pour servomoteurs. La plupart des modèles utilisent une tension de 4,8 à 7,2 V. L'alimentation et le contrôle s'effectuent à l'aide de trois conducteurs.
  • Possibilité de passer à un servo variateur à rotation constante.
  • Une variété de matériaux peuvent être utilisés pour la boîte de vitesses. Les engrenages sont en métal, carbone, plastique ou combinaisons. Chacun d'eux a ses propres avantages et inconvénients. Par exemple, les pièces en plastique résistent mal aux chocs, mais résistent à l'usure lors d'une utilisation à long terme. Au contraire, les engrenages métalliques s'usent rapidement, mais ils sont très résistants aux charges dynamiques.

Avantages et inconvénients des servomoteurs

Grâce à leurs dimensions standardisées, ces appareils peuvent être installés facilement et simplement dans n'importe quelle structure. Ils sont sans problème et fiables, chacun d'eux fonctionne presque silencieusement, ce qui a grande importance lors de leur intervention dans des zones complexes et critiques. Même à basse vitesse, vous pouvez atteindre la précision et mouvements fluides. Chaque servo variateur peut être configuré par le personnel, en fonction de la solution à certains problèmes.

Les inconvénients incluent certaines difficultés de mise en place et un coût relativement élevé.

Dans cet article, nous parlerons des servos dans les projets Arduino. C'est grâce aux servomoteurs que les projets électroniques ordinaires deviennent robotisés. Connecter un servo à un projet Arduino vous permet de répondre aux signaux des capteurs avec un mouvement précis, par exemple ouvrir une porte ou tourner les capteurs dans la direction souhaitée. L'article aborde les problèmes de contrôle des servos, les schémas possibles de connexion des servos à Arduino, ainsi que des exemples de croquis.

Un servomoteur est un type de variateur capable de contrôler avec précision les paramètres de mouvement. En d’autres termes, il s’agit d’un moteur capable de faire tourner son arbre selon un angle spécifique ou de maintenir une rotation continue à une période précise.

Le circuit de fonctionnement du servo variateur est basé sur l'utilisation du feedback (un circuit fermé dans lequel les signaux d'entrée et de sortie ne correspondent pas). Le servomoteur peut être n'importe quel type d'entraînement mécanique, qui comprend un capteur et une unité de commande qui prend automatiquement en charge tous définir les paramètres sur le capteur. La structure du servomoteur se compose d'un moteur, d'un capteur de position et Système de contrôle. La tâche principale de ces dispositifs est leur mise en œuvre dans le domaine des servomécanismes. En outre, les servomoteurs sont souvent utilisés dans des domaines tels que la transformation des matériaux, la production de matériel de transport, la transformation du bois, la production de tôles, la production de matériaux de construction et autres.

Dans les projets de robotique Arduino, le servo est souvent utilisé pour des actions mécaniques simples :

  • Faites pivoter le télémètre ou d'autres capteurs jusqu'à un certain angle pour mesurer la distance dans un champ de vision étroit du robot.
  • Faites un petit pas avec votre pied, bougez votre membre ou votre tête.
  • Créer des manipulateurs robotiques.
  • Mettre en œuvre le mécanisme de direction.
  • Ouvrir ou fermer une porte, un rabat ou tout autre objet.

Bien entendu, le champ d'application du servo dans des projets réels est beaucoup plus large, mais les exemples donnés sont les schémas les plus populaires.

Schéma et types de servos

Le principe de fonctionnement d'un servo variateur repose sur le retour d'information d'un ou plusieurs signaux système. L'indicateur de sortie est transmis à l'entrée, où sa valeur est comparée à l'action de réglage et à la actions nécessaires– par exemple, le moteur s'arrête. Le plus options simples la mise en œuvre est une résistance variable, qui est contrôlée par l'arbre - lors de la modification des paramètres de la résistance, les paramètres du courant alimentant le moteur changent.

Dans les vrais servos, le mécanisme de contrôle est beaucoup plus complexe et utilise des puces de contrôleur intégrées. Selon le type de mécanisme de rétroaction utilisé, il existe analogique Et numérique servos. Les premiers utilisent quelque chose de similaire à un potentiomètre, les seconds utilisent des contrôleurs.

L'ensemble du circuit de commande d'asservissement est situé à l'intérieur du boîtier, les signaux de commande et l'alimentation sont généralement fournis par trois fils : masse, tension d'alimentation et signal de commande.

Servo à rotation continue 360, 180 et 270 degrés

Il existe deux principaux types de servomoteurs : à rotation continue et à angle fixe (le plus souvent 180 ou 270 degrés). La différence entre la rotation servo-limitée réside dans les éléments mécaniques de conception qui peuvent bloquer le mouvement de l'arbre en dehors des angles spécifiés par les paramètres. Ayant atteint un angle de 180, l'arbre affectera le limiteur et donnera l'ordre d'éteindre le moteur. Les servomoteurs à rotation continue ne disposent pas de tels limiteurs.

Matériaux des engrenages de servo

La plupart des servos lien Il y a un engrenage entre l'arbre et les éléments externes, il est donc très important de savoir de quel matériau il est fait. La plupart Options disponibles deux : des engrenages en métal ou en plastique. Dans les modèles plus chers, vous pouvez trouver des éléments en fibre de carbone et même en titane.


Les options en plastique sont naturellement moins chères, plus faciles à produire et sont souvent utilisées dans modèles bon marché servo. Pour les projets pédagogiques où le servo effectue quelques mouvements, ce n’est pas bien grave. Mais en des projets sérieux l'utilisation de plastique est impossible, en raison de l'usure très rapide de tels engrenages sous charge.

Les engrenages métalliques sont plus fiables, mais cela affecte bien sûr à la fois le prix et le poids du modèle. Les fabricants économes peuvent fabriquer certaines pièces en plastique et d’autres en métal, il faut également garder cela à l’esprit. Et bien entendu, dans les modèles les moins chers, même la présence d'un engrenage métallique n'est pas un gage de qualité.

Les engrenages en titane ou en carbone sont l'option la plus préférable si vous n'êtes pas limité par votre budget. Légers et fiables, ces servos sont largement utilisés pour créer des modèles de voitures, de drones et d'avions.

Avantages des servomoteurs

L'utilisation répandue des servos est due au fait qu'ils ont travail stable, haute résistance aux interférences, petite taille et large plage de contrôle de vitesse. Les caractéristiques importantes des servos sont la capacité d'augmenter la puissance et de fournir un retour d'informations. Et il s'ensuit que dans le sens direct, le circuit est un émetteur d'énergie et dans le sens inverse, il est un émetteur d'informations utilisées pour améliorer la précision du contrôle.

Différences entre un servo et un moteur conventionnel

En allumant ou éteignant un moteur électrique conventionnel, nous pouvons générer un mouvement de rotation et faire bouger les roues ou d’autres objets attachés à l’arbre. Ce mouvement sera continu, mais pour comprendre à quel angle l'arbre a tourné ou combien de tours il a effectué, il sera nécessaire d'installer des éléments externes: encodeurs. Le servomoteur contient déjà tout le nécessaire pour obtenir des informations sur les paramètres de rotation actuels et peut s'éteindre indépendamment lorsque l'arbre tourne à l'angle requis.

Différences entre le servomoteur et le moteur pas à pas

Une différence importante entre un servomoteur et un moteur pas à pas est la capacité de travailler avec des accélérations élevées et sous des charges variables. De plus, les servomoteurs ont une puissance plus élevée. Les moteurs pas à pas n'ont pas de retour, donc l'effet de la perte de pas peut être observé ; dans les servomoteurs, la perte de pas est exclue - toutes les violations seront enregistrées et corrigées. Avec tous ces avantages évidents, les servomoteurs sont des appareils plus coûteux que les moteurs pas à pas, disposent d'un système de connexion et de contrôle plus complexe et nécessitent une maintenance plus qualifiée. Il est important de noter que les moteurs pas à pas et les servos ne sont pas des concurrents directs - chacun de ces appareils a son propre domaine d'application spécifique.

Le facteur décisif dans le contrôle des servomoteurs est le signal de commande, qui consiste en des impulsions de fréquence constante et de largeur variable. La longueur d'impulsion est l'une des les paramètres les plus importants, qui détermine la position du servo. Cette longueur peut être définie manuellement dans le programme à l'aide de la méthode de sélection des coins ou à l'aide des commandes de la bibliothèque. Pour chaque marque d'appareil, la longueur peut être différente.

Lorsque le signal entre dans le circuit de commande, le générateur délivre son impulsion dont la durée est déterminée à l'aide d'un potentiomètre. Dans une autre partie du circuit, la durée du signal appliqué et celle du signal du générateur sont comparées. Si ces signaux sont de durée différente, le moteur électrique est mis en marche, dont le sens de rotation est déterminé par laquelle des impulsions est la plus courte. Lorsque les longueurs d'impulsion sont égales, le moteur s'arrête.

La fréquence standard à laquelle les impulsions sont émises est de 50 Hz, soit 1 impulsion toutes les 20 millisecondes. A ces valeurs, la durée est de 1520 microsecondes, et le servo est en position médiane. La modification de la longueur d'impulsion entraîne la rotation du servomoteur - lorsque la durée augmente, la rotation se fait dans le sens des aiguilles d'une montre et lorsqu'elle diminue, elle tourne dans le sens inverse des aiguilles d'une montre. Il existe des limites de durée - dans Arduino dans la bibliothèque Servo, pour 0°, la valeur d'impulsion est définie sur 544 μs (limite inférieure), pour 180° - 2400 μs (limite supérieure).

(Image utilisée sur amperka.ru)

Il est important de considérer que appareil spécifique les paramètres peuvent différer légèrement des valeurs généralement acceptées. Pour certains appareils, la position et la largeur moyennes de l'impulsion peuvent être de 760 µs. Toutes les valeurs acceptées peuvent également varier légèrement en raison d'erreurs pouvant survenir lors de la production de l'appareil.

La méthode de contrôle du variateur est souvent appelée à tort PWM/PWM, mais ce n'est pas tout à fait correct. Le contrôle dépend directement de la durée des impulsions, la fréquence de leur apparition n'est pas si importante. Travail correct sera assurée aussi bien à 40 Hz qu'à 60 Hz, la contribution ne se fera que par une forte diminution ou augmentation de fréquence. En cas de forte baisse, le servomoteur commencera à fonctionner par saccades ; si la fréquence dépasse 100 Hz, l'appareil peut surchauffer. Par conséquent, il est plus correct de l'appeler PDM.

Par interface interne Les servos analogiques et numériques peuvent être distingués. Différences externes non - toutes les différences résident uniquement dans l'électronique interne. Le servomoteur analogique contient une puce spéciale à l'intérieur, tandis que le servomoteur numérique contient un microprocesseur qui reçoit et analyse les impulsions.

Lors de la réception d'un signal, le servo analogique décide de changer ou non la position et, si nécessaire, fournit un signal d'une fréquence de 50 Hz au moteur. Pendant le temps de réaction (20 ms), des influences externes peuvent survenir qui modifient la position du servomoteur, et l'appareil n'aura pas le temps de réagir. Un servo numérique utilise un processeur qui fournit et traite les signaux de fréquence plus élevée– à partir de 200 Hz, afin de pouvoir réagir plus rapidement aux influences extérieures et développer rapidement la vitesse et le couple requis. Par conséquent, le servo numérique sera mieux à même de maintenir la position définie. Dans le même temps, les servocommandes numériques nécessitent plus d’électricité pour fonctionner, ce qui augmente leur coût. La complexité de leur production contribue également grandement au prix. Prix ​​élevé– le seul inconvénient des servos numériques est que, techniquement, ils sont bien meilleurs que les appareils analogiques.

Connecter un servomoteur à Arduino

Le servomoteur possède trois contacts peints de différentes couleurs. Le fil marron mène à la terre, le fil rouge mène à l'alimentation +5 V, le fil orange ou couleur jaune– signaler. L'appareil est connecté à l'Arduino via une maquette de la manière indiquée sur la figure. Le fil orange (signal) est connecté à la broche numérique, les fils noir et rouge sont connectés respectivement à la masse et à l'alimentation. Pour contrôler le servomoteur, vous n'avez pas besoin de vous connecter spécifiquement aux broches de cale - nous avons déjà décrit le principe du servocommande plus tôt.

Il n'est pas recommandé de connecter des servos puissants directement à la carte, car... ils créent un courant pour le circuit d'alimentation Arduino qui n'est pas compatible avec la vie - vous aurez de la chance si la protection fonctionne. Le plus souvent, les symptômes de surcharge et d'alimentation incorrecte du servo sont les « secousses » du servo, son désagréable et redémarrez la carte. Pour l'alimentation, il est préférable d'utiliser des sources externes, veillez à combiner les masses des deux circuits.

Croquis pour contrôler un servo dans Arduino

Contrôler un servo directement en modifiant la durée d'impulsion dans le croquis est une tâche plutôt non triviale, mais heureusement, nous disposons d'une excellente bibliothèque de servos intégrée à l'environnement de développement Arduino. Nous examinerons toutes les nuances de la programmation et du travail avec les servos dans un article séparé. Ici, nous donnerons exemple le plus simple en utilisant Servo.

L'algorithme de fonctionnement est simple :

  • Nous connectons d’abord Servo.h
  • Créer un objet de la classe Servo
  • Dans le bloc de configuration, nous indiquons à quelle broche le servo est connecté.
  • Nous utilisons les méthodes de l'objet de la manière habituelle en C++. La plus populaire est la méthode write, à laquelle on fournit une valeur entière en degrés (pour un servo 360 ces valeurs seront interprétées différemment).

Un exemple de croquis simple pour travailler avec un servomoteur

Un exemple de projet dans lequel nous installons d'abord immédiatement le servomoteur sur angle nul, puis faites-le pivoter de 90 degrés.

#inclure Servo-servo; // Crée un objet void setup() ( servo.attach(9); // Indique à un objet de la classe Servo que le servo est attaché à la broche 9 servo1.write(0); // Set position de départ) void loop() ( servo.write(90); // Rotation du servo de 90 degrés delay(1000); servo.write(1800); delay(100); servo.write(90); delay(1000); servo .write(0); délai(1000); )

Croquis pour deux servos

Et dans cet exemple, nous travaillons avec deux servos à la fois :

#inclure Servoservo1 ; // Premier servomoteur Servo servo2; // Deuxième servo void setup() ( servo1.attach(9); // Indique à l'objet de classe Servo que le servo est connecté à la broche 9 servo2.attach(10); // Et ce servo est connecté à la broche 10 ) void loop() ( // Définir les positions servo1.write(0); servo2.write(180); delay(20); // Changer les positions servo2.write(0); servo1.write(180); )

Asservissement par potentiomètre

Dans cet exemple, nous faisons tourner le servo en fonction de la valeur reçue du potentiomètre. Nous lisons la valeur et la convertissons en angle à l'aide de la fonction map :

//Fragment exemple standard en utilisant la bibliothèque Servo void loop() ( val = analogRead(A0); // Lit la valeur de la broche à laquelle le potentiomètre est connecté val = map(val, 0, 1023, 0, 180); // Convertit le nombre dans la plage de 0 à 1023 à la nouvelle plage - de 0 à 180. servo.write(val); delay(15); )

Caractéristiques et connexion du SG-90

Si vous envisagez d'acheter le servomoteur le moins cher et le plus simple, la meilleure option sera le SG 90. Ce servo est le plus souvent utilisé pour contrôler de petits mécanismes légers avec un angle de rotation de 0° à 180°.

Spécifications SG90 :

  • Vitesse d'exécution des commandes 0,12 s/60 degrés ;
  • Alimentation 4,8 V ;
  • Températures de fonctionnement de -30C à 60C ;
  • Dimensions 3,2 x 1,2 x 3 cm ;
  • Poids 9 g.

Descriptif SG90

Les couleurs des fils sont standard. Le servo variateur est peu coûteux, il ne fournit pas réglages précis positions de départ et d'arrivée. Afin d'éviter les surcharges inutiles et les crépitements caractéristiques dans les positions 0 et 180 degrés, il est préférable de régler les points extrêmes à 10° et 170°. Lors du fonctionnement de l'appareil, il est important de surveiller la tension d'alimentation. Si cet indicateur est fortement surestimé, les éléments mécaniques des mécanismes d'engrenage peuvent être endommagés.

Servomoteurs MG995 et MG996 tower pro

Le servo MG995 est le deuxième modèle de servo le plus populaire, le plus souvent connecté aux projets Arduino. Ce sont des servomoteurs relativement bon marché qui ont beaucoup meilleures caractéristiques par rapport au SG90.

Spécifications MG995

L'arbre de sortie du MG995 tourne à 120 degrés (60 dans chaque direction), bien que de nombreux vendeurs indiquent 180 degrés. L'appareil est logé dans un boîtier en plastique.

  • Poids 55 g ;
  • Couple 8,5 kg x cm ;
  • Vitesse 0,2s/60 degrés (à 4,8V) ;
  • Puissance de travail 4,8 – 7,2 V ;
  • Températures de fonctionnement – ​​de 0C à -55C.

Descriptif MG995

La connexion à l'Arduino s'effectue également via trois fils. En principe, pour les projets amateurs, il est possible de connecter le MG995 directement à l'Arduino, mais le courant du moteur créera toujours une charge dangereuse sur les entrées de la carte, il est donc toujours recommandé d'alimenter le servo séparément, sans oublier de connecter la masse. des deux circuits de puissance. Une autre option qui faciliterait la vie serait d'utiliser des servocontrôleurs et des boucliers prêts à l'emploi, que nous examinerons dans un article séparé.

Le MG996R est similaire au MG995 dans ses caractéristiques, sauf qu'il est livré dans un boîtier métallique.

Conversion d'un servo variateur en servo à rotation continue

Comme décrit ci-dessus, le servo est contrôlé par des impulsions de largeur variable qui définissent l'angle de rotation. La position actuelle est lue sur le potentiomètre. Si vous débranchez l'arbre et le potentiomètre, le servomoteur prendra la position du coulisseau du potentiomètre comme au milieu. Toutes ces actions entraîneront la suppression des commentaires. Cela vous permet de contrôler la vitesse et le sens de rotation via le fil de signal et de créer un servo de rotation continue. Il est important de noter qu’un servo à rotation constante ne peut pas tourner d’un certain angle et effectuer un nombre de tours strictement spécifié.

Pour effectuer les étapes ci-dessus, vous devrez démonter l'appareil et apporter des modifications à la conception.

Dans l'IDE Arduino, vous devez créer un petit croquis qui mettra la bascule en position médiane.

#inclure Servo monservo ; void setup())( myservo.attach(9); myservo.write(90); ) void loop())( )

Après cela, l'appareil doit être connecté à Arduino. Une fois connecté, le servo commencera à tourner. Il est nécessaire de réaliser son arrêt complet en ajustant la résistance. Une fois la rotation arrêtée, vous devez trouver l'arbre, en retirer l'élément flexible et le réinstaller.

Cette méthode présente plusieurs inconvénients : la mise à l'arrêt complet de la résistance est instable ; au moindre choc/échauffement/refroidissement, le point zéro réglé peut être perdu. Par conséquent, il est préférable d'utiliser la méthode consistant à remplacer le potentiomètre par un trimmer. Pour ce faire, vous devez retirer le potentiomètre et le remplacer par une résistance trimmer de même résistance. Le point zéro doit être réglé à l'aide d'un croquis d'étalonnage.

Toute méthode de conversion d'un servo en servo à rotation continue a ses inconvénients. Premièrement, il est difficile de régler le point zéro, tout mouvement peut le perturber. Deuxièmement, la plage de contrôle est petite - avec un petit changement dans la largeur d'impulsion, la vitesse peut changer considérablement. Vous pouvez étendre la gamme par programme dans Arduino.

Conclusion

Les servos jouent un rôle très important dans de nombreux projets Arduino, de la robotique aux systèmes Maison intelligente. Tout ce qui touche au mouvement nécessite traditionnellement des connaissances particulières et pour créer un entraînement à part entière et fonctionnant correctement - pas une tâche facile. Mais avec l'aide de servomoteurs, la tâche peut être simplifiée dans de nombreux cas, c'est pourquoi les servomoteurs sont constamment utilisés, même dans les projets d'entrée de gamme.

Dans cet article, nous avons essayé de révéler différents aspects de l'utilisation des servos dans projets arduino: de la connexion à l'écriture de croquis. Ayant choisi le plus modèle simple servo (par exemple, sg 90), vous pouvez facilement répéter les exemples donnés et créer vos premiers projets dans lesquels quelque chose bouge et change. Nous espérons que cet article vous aidera.

Dans cette leçon, nous examinerons la conception et le principe de fonctionnement des servos. Regardons deux croquis simples pour contrôler un servo à l'aide d'un potentiomètre sur Arduino. Nous apprendrons également de nouvelles commandes dans le langage de programmation C++ - servo.écrire, servo.lire, servo.attacher et apprenez à connecter une bibliothèque dans des croquis pour contrôler des servos et d'autres appareils via Arduino.

Dispositif servomoteur (servo)

Un servomoteur (servomoteur) est élément important lors de la conception de divers robots et mécanismes. Il s'agit d'un artiste précis doté d'un retour d'information qui vous permet de contrôler avec précision les mouvements des mécanismes. Autrement dit, recevant la valeur du signal de commande en entrée, le servomoteur s'efforce de maintenir cette valeur en sortie de son actionneur.

Les servos sont largement utilisés pour simuler les mouvements mécaniques des robots. Le servo variateur est constitué d'un capteur (vitesse, position, etc.), d'une unité de commande d'entraînement issue d'un système mécanique et circuit électrique. Les boîtes de vitesses (engrenages) de l'appareil sont en métal, en carbone ou en plastique. Les engrenages de servomoteur en plastique ne peuvent pas résister à de lourdes charges et impacts.

Le servomoteur dispose d'un potentiomètre intégré qui est connecté à l'arbre de sortie. En tournant l'arbre, le servomoteur modifie la valeur de tension sur le potentiomètre. La carte analyse la tension signal d'entrée et le compare avec la tension sur le potentiomètre, en fonction de la différence résultante, le moteur tournera jusqu'à ce qu'il égalise la tension à la sortie et au potentiomètre.


Asservissement par modulation de largeur d'impulsion

Comment connecter un servo à Arduino

Le schéma de connexion du servomoteur à l'Arduino est généralement le suivant : connectez le fil noir à GND, connectez le fil rouge au 5V et le fil orange/jaune à la broche analogique avec PWM (Pulse width Modulation). Contrôler un servo variateur sur Arduino est assez simple, mais les angles de rotation des servos sont de 180° et 360°, ce qui doit être pris en compte en robotique.

Pour cette leçon, nous aurons besoin des détails suivants :

  • Carte Arduino Uno/Arduino Nano/Arduino Mega ;
  • Planche à pain;
  • Cable USB;
  • 1 servomoteur ;
  • 1 potentiomètre ;
  • Fils "mâle-mâle" et "mâle-mâle".

Dans le premier croquis, nous verrons comment contrôler un servo sur Arduino à l'aide de la commande myservo.write(0). Nous utiliserons également la bibliothèque standard Servo.h. Connectez le servo à la carte Arduino selon le schéma de la photo ci-dessus et téléchargez le croquis terminé. Dans la procédure void loop(), nous réglerons simplement le servo sur l'angle de rotation requis et le temps d'attente jusqu'à la prochaine rotation.

Esquisse d'un servomoteur sur Arduino

#inclure Servoservo1 ; // déclare une variable servo de type "servo1" void setup()(servo1.attach(11); // lie le servo à la sortie analogique 11) boucle vide () ( servo1.write (0); // définit l'angle de rotation sur 0 retard(2000); // attends 2 secondes servo1.write (90); // définit l'angle de rotation à 90 retard(2000); // attends 2 secondes servo1.write (180); // définit l'angle de rotation à 180 retard(2000); // attends 2 secondes)

Explications pour le code :

  1. La bibliothèque standard Servo.h contient un ensemble commandes supplémentaires, ce qui permet de simplifier considérablement l'esquisse ;
  2. La variable Servo est nécessaire pour éviter toute confusion lors de la connexion de plusieurs servos à Arduino. Nous attribuons à chaque lecteur un nom différent ;
  3. La commande servo1.attach(10) lie le variateur à la sortie analogique 10.
  4. Dans le programme, nous faisons pivoter le lecteur de 0 à 90-180 degrés et le remettons à la position initiale, car la procédure de boucle vide est répétée de manière cyclique.

Servocommande avec potentiomètre


Connexion du servo et du potentiomètre à Arduino Uno

Arduino vous permet non seulement de contrôler, mais également de lire les lectures du servomoteur. La commande myservo.read(0) lit l'angle de rotation actuel de l'arbre du servo et nous pouvons le voir sur le moniteur du port. Nous fournirons plus exemple complexe contrôlez le servomoteur avec un potentiomètre sur Arduino. Construisez un circuit de potentiomètre et téléchargez le croquis de servocommande.

Croquis pour un servo avec un potentiomètre

#inclure // connecte la bibliothèque pour travailler avec le servomoteur Servo-servo; // déclare une variable servo de type "servo" void setup()(servo.attach(10); // lie le servo à la sortie analogique 10 pinMode(A0,ENTRÉE); // connecter un potentiomètre à l'entrée analogique A0 Série.begin(9600); // connecte le moniteur de port) boucle vide () ( servo.write(analogRead(A0)/4); // transmet les valeurs pour l'arbre du servo Série .println(analogRead(A0)); // afficher les lectures du potentiomètre sur le moniteur Série .println(analogRead(A0)/4); // sort le signal envoyé au servo variateur Serial.println(); // affiche une ligne vide sur le moniteur de port retard (1000); // retarde une seconde }

Explications pour le code :

  1. Cette fois, nous avons nommé le servo dans le croquis servo ;
  2. La commande servo.write(analogRead(A0)/4) transmet les valeurs de l'arbre de servomoteur - nous divisons la tension résultante du potentiomètre par quatre et envoyons valeur donnée au servomoteur.
  3. La commande Serial.println (servo.read(10)) lit l'angle de l'arbre du servo et le transmet au moniteur du port.

Les servomoteurs sont souvent utilisés dans divers projets Arduino pour diverses fonctions : structures tournantes, pièces mobiles de mécanismes. Étant donné que le servomoteur s'efforce constamment de maintenir un angle de rotation donné, préparez-vous à une consommation d'énergie accrue. Cela sera particulièrement sensible dans robots autonomes alimenté par des piles ou des batteries rechargeables.

On lit aussi souvent :