Publié 2026-02-24
Jouer avec leservomoteur: De la prise en main jusqu'au combat réel avec le 51 MCU, cet article va vous aider !
Envisagez-vous d'ajouter un « joint » capable de pivoter avec précision à votre produit innovant ? L'appareil à gouverner semble très professionnel, mais ce n'est en réalité pas aussi difficile qu'on le pense. Le connecter au microcontrôleur classique 51 est une excellente voie pour les créateurs débutants. Lorsque de nombreux amis sont entrés en contact avec lui pour la première fois, le plus gros problème était qu'ils ne parvenaient pas à comprendre comment il bougeait et comment je pouvais utiliser le code pour le contrôler. Ne vous inquiétez pas, nous en parlerons en détail aujourd'hui et je veillerai à ce que vous vous sentiez en confiance après l'avoir lu.
Pour parler franchement, leservomoteurs'apparente à un "petit garde tournant" particulièrement obéissant. Il intègre un moteur, un réducteur et un circuit de commande. Vous lui dites vers quel angle se tourner, et il travaillera dur pour atteindre cette position et s’arrêtera régulièrement.
Cette commande est transmise via un signal appelé PWM (Pulse width Modulation). Vous pouvez le considérer comme une impulsion répétitive de niveau haut et bas, et la largeur de l'impulsion, c'est-à-dire la durée du niveau haut, est le « signal d'action » pour l'appareil à gouverner.
CommunservomoteurLes systèmes, tels que les petits servos tels que le SG90, reconnaissent les impulsions avec une période de 20 millisecondes. Parmi eux, le temps de haut niveau d'environ 1,5 millisecondes correspond à la position médiane (90 degrés). Lorsque la largeur d'impulsion change entre 0,5 millisecondes et 2,5 millisecondes, l'axe du servo tourne dans la plage de 0 à 180 degrés. Plus la largeur d'impulsion que vous donnez est précise, plus elle tournera avec précision.
Le microcontrôleur 51 lui-même ne produira pas directement un signal de largeur d'impulsion aussi précis, mais nous pouvons le « simuler » par programmation. Cela nécessite l'utilisation d'un timer à l'intérieur du microcontrôleur, qui est un "timer" très précis.
Nous pouvons régler la minuterie pour générer une interruption toutes les 10 microsecondes ou 100 microsecondes. Dans le programme de service d'interruption, nous utilisons une variable pour compter, et en fonction de la valeur de ce compteur, nous modifions le niveau du port IO (comme P1.0) connecté au servo.
Par exemple, pour produire un niveau haut pendant 1,5 millisecondes, si la minuterie s'interrompt une fois toutes les 100 microsecondes, le niveau haut doit être maintenu pendant 15 interruptions. De cette façon, nous pouvons « reconstituer » l'onde PWM que le servo peut reconnaître. Cela peut sembler un peu déroutant lorsque vous commencez à écrire du code, mais une fois que vous l'avez débogué avec succès vous-même, le sentiment d'accomplissement est sans précédent.
Il existe de nombreux types de servomoteurs sur le marché. Le choix d'un « partenaire » pour le microcontrôleur 51 dépend principalement de deux points : la tension de fonctionnement et les exigences en matière de signal. Les plus couramment utilisés sont les servos analogiques comme le SG90. Leurs exigences en matière de signal sont le PWM standard que nous avons mentionné ci-dessus, ce qui est très convivial.
Ces servos fonctionnent généralement à une tension de 5 V, ce qui correspond exactement à la tension de fonctionnement standard du microcontrôleur 51. Puis-je utiliser directement le pilote du port IO du microcontrôleur ? Il est préférable de ne pas le faire, car le courant lorsque le servo fonctionne est relativement important, ce qui endommagerait les broches du microcontrôleur.
Une approche plus sûre consiste à utiliser une triode ou une puce de conversion de niveau spécialisée pour l'isolation. Le port IO du microcontrôleur émet un signal de commande au circuit d'entraînement, puis le circuit d'entraînement « commande » la rotation de l'appareil à gouverner. De cette façon, le microcontrôleur est uniquement responsable de la sortie des instructions « cérébrales », laissant le travail acharné à la partie pilote, rendant le système plus stable et fiable.
Lorsque de nombreux amis tournent le servo pour la première fois, ils peuvent constater qu'il tremble violemment ou réagit un demi-temps plus lentement. Il s'agit très probablement d'un problème d'alimentation électrique. L'impact actuel lorsque le servo est démarré et verrouillé ne peut pas être sous-estimé. Si l'alimentation électrique est insuffisante, la tension sera abaissée, provoquant la réinitialisation du microcontrôleur ou un fonctionnement anormal du servo.
La solution est simple : alimenter le servo séparément ! Utilisez une alimentation 5 V de meilleure qualité et connectez la masse d'alimentation (GND) et la masse du microcontrôleur ensemble pour vous assurer qu'elles ont un potentiel de référence commun. Ensuite, l'alimentation du microcontrôleur et l'alimentation du servo peuvent être séparées pour éviter efficacement les interférences.
Vérifiez également que votre période PWM est strictement stable à 20 millisecondes. Si le programme est bloqué en raison d'autres tâches, ce qui rend la période d'impulsion imprécise, le servo vibrera également. S'assurer que la priorité d'interruption de la minuterie est suffisamment élevée est la clé pour générer un signal stable.
Je veux que le servo tourne lentement de 0 degrés à 180 degrés et vice-versa. Comment dois-je écrire le code ? Nous pouvons définir une fonction de mappage angle/largeur d’impulsion. Par exemple, 0 degré correspond à un niveau haut de 0,5 ms et 180 degrés correspond à 2,5 ms. Alors 90 degrés équivaut à 1,5 ms.
Dans la boucle principale, nous pouvons utiliser une boucle for pour incrémenter la variable d'angle de 0 à 180 et réinitialiser la valeur de comparaison PWM à chaque fois qu'elle change d'un degré. Notez qu'il faut laisser un peu de temps entre chaque angle pour que le servo puisse tourner physiquement, par exemple un délai de 15 à 20 millisecondes. De cette façon, l’action semble cohérente et fluide.
Afin d'être plus flexible, vous pouvez encapsuler le contrôle du servo dans une fonction, telle quevoid (angle de caractère), transmettez la valeur de l'angle et les paramètres PWM seront automatiquement calculés et mis à jour dans la fonction. De cette façon, si vous souhaitez contrôler quelle action elle effectuera plus tard, comme lever un bras ou tourner la caméra, il vous suffit d'appeler cette fonction, et le programme principal deviendra très rafraîchissant.
Lorsque votre projet nécessite de contrôler plusieurs servos en même temps, comme par exemple la fabrication d'un bras robotique à plusieurs degrés de liberté, les choses sont un peu plus compliquées. Le microcontrôleur 51 disposant de ressources limitées, il est impossible d'équiper chaque servo d'un PWM matériel indépendant.
Mais ne vous inquiétez pas, nous pouvons toujours utiliser la simulation logicielle. L'idée de base est toujours d'utiliser le concept de « tranche de temps » dans l'interruption du minuteur. Par exemple, nous définissons une période de 10 millisecondes, et pendant cette période, chaque servo émet tour à tour la largeur d'impulsion requise. Après avoir traité l'impulsion du premier servo, passez immédiatement à la sortie d'impulsion du deuxième servo.
Cela nécessite que votre fonction de traitement des interruptions de minuterie soit très efficace et ne puisse pas y effectuer de retards ou de calculs complexes. L'approche habituelle consiste à créer un tableau pour stocker la largeur d'impulsion cible actuelle de chaque servo. Dans l'interruption, consultez le tableau pour définir le port IO en fonction du numéro de série du servo actuellement en service et chronométrez-le avec précision. De cette façon, un timer peut gérer « séparément » plusieurs servos. Bien qu’ils ne puissent pas être complètement déplacés en même temps, l’œil humain ne peut pas détecter ce petit décalage horaire.
En voyant cela, avez-vous déjà une idée claire sur la façon d'utiliser le microcontrôleur 51 pour contrôler le servo ? Du principe à la sélection en passant par l’implémentation du code, chaque étape est en réalité très intéressante. Si vous avez une idée sous la main en ce moment, vous pouvez aussi bien allumer votre ordinateur, retirer votre carte de développement de microcontrôleur et essayer de la connecter vous-même. La sensation merveilleuse lorsque le servo tourne avec précision sous le commandement de votre code pour la première fois est la joie de la création.
Je veux vous demander, quel type de gadget aimeriez-vous le plus assembler à l'aide d'un servo et d'un microcontrôleur ? S'agit-il d'un gadget qui suit automatiquement la lumière du soleil ou d'un petit robot capable de dessiner ? N'hésitez pas à laisser un message dans la zone de commentaires pour partager vos réflexions. Communiquons ensemble et peut-être pourrons-nous créer de meilleures étincelles ! Si cet article vous est utile, n'oubliez pas de l'aimer et de le partager avec davantage d'amis qui en ont besoin.
Heure de mise à jour:2026-02-24
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.