Publié 2026-05-06
Avez-vous déjà rencontré cette situation ?
Une fois le servo connecté à l’alimentation électrique, il n’y a aucune réponse. Après l'écriture du programme, des tremblements aléatoires se sont produits. J'ai évidemment suivi les instructions, mais je n'arrivais tout simplement pas à le tourner.
Ne pas paniquer. Tu n'es pas seul.
Dans cet article d'aujourd'hui, avec l'aide du microcontrôleur 51, nous expliquerons en détail le contrôle du servo. Il n'y a pas de contenu mathématique compliqué, pas de tableau de registre incompréhensible, seulement les idées les plus directes et le cadre de code le plus pratique.
Retenez ce point clé : si le servo reste à l'arrêt, c'est en grande partie dû à un problème de timing ; si le servo bouge de manière aléatoire, cela est probablement dû à une alimentation électrique insuffisante.
Es-tu prêt?
01 Qu'est-ce qu'un appareil à gouverner exactement ?
Beaucoup de gens reçoivent un servo pour la première fois et pensent que c'est un moteur. Il peut être allumé lorsque l'électricité est allumée.
Faux.
L'appareil à gouverner n'est pas un moteur ordinaire. C'est plutôt un petit robot avec un "cerveau".
Vous lui donnez une commande et il se tourne vers l'angle spécifié. Alors arrête. Arrêtez-vous net dans votre élan.
Comment y parvenir avec le petit potentiomètre et le tableau de commande à l'intérieur ? Lorsque vous envoyez une impulsion, il fait quelques gestes et se verrouille une fois qu'il atteint la position.
Par conséquent, pour contrôler l’appareil à gouverner, il n’est pas nécessaire d’écrire un PID ou d’effectuer des calculs en boucle fermée. Il vous suffit d’apprendre une chose : envoyer une impulsion.
02 Principe de base : un chiffre peut changer l'angle
Ouvrez votre fiche technique. Trouvez cette phrase : La largeur d’impulsion de haut niveau correspond à l’angle.
En termes simples : un niveau élevé de 0,5 millisecondes tournera à 0 degré, s'il dure 1,5 millisecondes, il tournera à 90 degrés, et s'il dure 2,5 millisecondes, il tournera à 180 degrés.
La période est fixée à 20 millisecondes.
Est-ce clair ? Contrôler le servo signifie en fait contrôler un port IO, le tirer vers le haut, attendre un certain temps, puis le tirer vers le bas, puis attendre le temps restant.
C'est aussi simple que ça.
Par exemple, l'impulsion qui tourne de 90 degrés :
Tout d'abord, effectuez une opération de pull-up vers le haut, puis effectuez un retard d'une durée de 1,5 millisecondes, puis effectuez une opération de pull-down vers le bas, puis effectuez un retard d'une durée de 18,5 millisecondes, puis répétez les étapes ci-dessus dans une boucle infinie.
Il s'agit d'un cycle de contrôle complet.
03 Avant d'écrire un programme, configurez d'abord l'environnement
Vous n’avez pas besoin d’équipement sophistiqué.
Un microcontrôleur 51 (STC89C52 suffit)

Un servo (un SG90 ou un MG995 commun fera l'affaire)
Quelques fils Dupont
Il y a une alimentation 5 V, alors ne vous attendez pas à ce qu'elle soit alimentée par un microcontrôleur. Permettez-moi de dire trois fois des choses importantes, ne vous attendez pas à ce qu'il soit alimenté par un microcontrôleur.
Les servos de nombreuses personnes tremblent et ne tournent pas correctement. Ce n'est pas une erreur de programme, mais une puissance insuffisante.
Lorsque le servo est au moment du démarrage, le courant peut atteindre plus de 1A, et la petite quantité d'énergie consommée par l'USB ne peut pas l'alimenter complètement.
ce qu'il faut faire? Alimentation externe. Terrain d’entente. Terrain d’entente. Terrain d’entente.
La borne positive de l'alimentation doit être VCC et la borne négative de l'alimentation doit être GND. Le GND du microcontrôleur doit également être connecté au GND de l'alimentation, puis la ligne de signal doit être connectée au port IO du microcontrôleur.
Le circuit est-il connecté ? Félicitations. La moitié la plus difficile est terminée.
04 Codage pratique : commencer par le plus simple
Nous ne jouons pas au faux. Donnez directement le code qui peut être exécuté.
Points clés : utilisez une minuterie pour générer une interruption d'une période de 20 ms et contrôlez de manière flexible la durée du niveau haut pendant l'interruption.。
Idée:
Définissez une variable pour stocker le temps de haut niveau actuellement requis, tout comme ce 15, et ce 15 représente 1500 microsecondes, soit 1,5 ms。
Au début de chaque période de 20 ms, tirez d'abord le port IO vers le haut.
Retarder le temps de haut niveau.
Déroulez le port IO.
Retardez le temps restant.
Écrit sous forme de pseudo-code :
void main() { Initialiser la minuterie (définir une interruption de 20 ms) ; while(1) { // Ne rien faire, compter sur les interruptions } } void timer interrompu () interruption 1 { Pull high; retard (temps de haut niveau); tirez bas; délai (20 ms - temps de haut niveau) ; }
Important : des retards précis au niveau de la microseconde nécessitent l'utilisation de fonctions de retard. Lorsque la fréquence principale du microcontrôleur 51 est de 11,0592 MHz, un nop équivaut approximativement à 1,085 microsecondes. Pour écrire une fonction delay_us, la fonction doit transmettre le nombre de microsecondes et l'implémenter en le soustrayant via une boucle while.
N'ayez pas peur des ennuis. Ce type de débogage par approximation successive est la norme dans les systèmes embarqués.
05 Laissez le gouvernail bouger : avant, arrière, n'importe quel angle
Il vous faut maintenant réaliser : appuyer sur le bouton 1, tourner à 0 degré ; appuyez sur le bouton 2, tournez à 90 degrés ; appuyez sur le bouton 3, tournez à 180 degrés.
Ajouter la détection de clé dans le pseudo-code :
si (le bouton 1 est enfoncé) temps de niveau haut = 500 ; // 0,5 ms -> 0 degré si (le bouton 2 est enfoncé) temps de niveau haut = 1500 ; // 1,5 ms -> 90 degrés si (le bouton 3 est enfoncé) temps de haut niveau = 2500 ; // 2,5 ms -> 180 degrés

Important : L'unité de temps de haut niveau est la microseconde. 500, 1 500, 2 500.
N'écrivez pas 1, 2, 3. Cela représente des millisecondes. 1000 fois pire.
Et alors ? Ensuite, le servo se tournera docilement vers l’angle correspondant.
Vous n'y croyez pas ? Vous essayez.
06 Les pièges sur lesquels vous avez peut-être marché (Q/A)
Q : Le servo ne tourne pas, mais bourdonne simplement ?
Premièrement, A, le courant d’alimentation est insuffisant ou la largeur d’impulsion est inexacte. Il est nécessaire de changer l'alimentation en une alimentation supérieure à 5V/2A, puis de vérifier si le temps de haut niveau est compris entre 500 et 2500us.
Q : Le servo peut tourner mais il tremble énormément ?
Ajoutez un grand condensateur (valeur 470 uF) aux deux extrémités de l'alimentation du servo en raison de la situation mentionnée en A, c'est-à-dire qu'il y a une différence excessive entre deux cycles de contrôle adjacents ou que l'alimentation présente des ondulations.
Q : Il n'y a pas de réponse lorsque le programme est gravé, mais il s'éteint lorsque le câble de signal est débranché ?
R : L'état de niveau du port IO au début est incertain, ou la période pendant laquelle il est à un niveau élevé dépasse la plage spécifiée. Lors de la mise sous tension de l'appareil, vous devez d'abord baisser le niveau du port IO, puis lui donner la valeur initiale.。
Q : Vous souhaitez contrôler la rotation continue (comme un servo à 360 degrés) ?
Si cela ne fonctionne pas, vous devez le remplacer par un servo capable de tourner en continu à 360 degrés. Si le niveau haut est de 1,5 ms, le servo cessera de tourner. S'il est supérieur à 1,5 ms, le servo tournera vers l'avant. S'il est inférieur à 1,5 ms, le servo tournera en sens inverse.
Q : Si je n’ai pas d’oscilloscope à portée de main, comment puis-je confirmer que les impulsions sont correctes ?
Programmez le servo pour alterner entre 0 degrés et 90 degrés toutes les 1 seconde. Utilisez un analyseur logique ou une simple méthode LED pour observer si son oscillation est régulière.
07 Mise à niveau : laissez le servo se déplacer en fonction de la courbe que vous dessinez
Un programme avec des angles codés en dur est trop élémentaire.
Une façon de jouer plus avancée : laissez le servo passer lentement de 0 degrés à 180 degrés, puis revenir lentement.
Comment faire ?
Utilisez une variable de boucle appelée angle pour augmenter de 0 à 180, et la valeur du pas ne doit pas être trop grande. Par exemple, augmentez de 1 degré à chaque fois.。
Pour chaque incrément de 1 degré, recalculez le temps de haut niveau :
Le temps de niveau haut est égal à 500 plus l'angle multiplié par 2000 divisé par 180.
Il convient de noter que 500 correspond à 0 degré, 2 500 correspond à 180 degrés et que la plage totale est de 2 000 microsecondes, divisée en 180 parties égales.
Puis retardez 20 ms. Faites-le à nouveau.
L’effet est un swing doux. Comme un robot qui fait signe.
Vous pouvez appeler cela quelque chose appelé « servocinématique », mais ne vous laissez pas effrayer par son nom. Il s’agit essentiellement d’une sorte d’interpolation linéaire.
08 Allez plus loin : utilisez le port série pour contrôler le servo à distance
Ajoutez une communication série. L'ordinateur envoie un numéro et le servo tourne à l'angle correspondant.
Par exemple, prononcez « 0 » et tournez à 0 degré. Dites « 90 » et tournez à 90 degrés.
Points clés :
Dans le port série du microcontrôleur recevant l'interruption, la chaîne est analysée.
Remarque : Vous ne pourrez peut-être pas tout collecter en même temps. Pour déterminer si un caractère de nouvelle ligne est reçu.
Après avoir reçu le numéro complet, la plage est limitée à 0~180.
Convertissez en heure de haut niveau et mettez à jour la variable.
De cette façon, votre servo devient un actionneur programmable. Une fois connecté au module Bluetooth, même votre téléphone portable peut le contrôler.
09 Résumé : Trois éléments de contrôle de l'appareil à gouverner
alimentation. Fournissez un courant suffisant et stabilisez la tension à la terre commune.
Timing. Période 20 ms, niveau élevé 500-2500us.
N'effectuez pas d'opérations de blocage, utilisez des interruptions de minuterie au lieu d'utiliser des délais qui continuent d'attendre, sinon vous ne pourrez rien faire.
Une fois ces trois choses maîtrisées, vous pourrez contrôler 99% des servos du marché.
N'oubliez pas : lorsque vous écrivez un programme, réfléchissez encore à "ce qui se passera si l'alimentation électrique tremble soudainement" au lieu de "il suffit que le programme fonctionne correctement".
10 Maintenant, c'est à votre tour d'agir
Ne considérez pas seulement cet article comme une collection. Allumez votre Keil, connectez correctement la carte de développement et tapez une fois le code ci-dessus.
Il y a une forte probabilité que les trois premières fois ne tournent pas. Ne soyez pas pressé. Prenez un multimètre pour mesurer la tension et utilisez un analyseur logique pour capturer la forme d'onde. S'il n'y a vraiment pas d'autre moyen, essayez de changer le servo.
Chaque fois que vous résolvez un problème, votre compréhension de l’encastrement s’approfondit.
En regardant en arrière quelques années plus tard, vous constaterez que le jour où vous avez maîtrisé l'appareil à gouverner a été le point de départ pour vraiment comprendre « contrôler le monde physique par le code ».。
Le petit servo bourdonnant dans votre main est la première clé du monde des robots.
N'attendez plus. Mettez sous tension maintenant.
Essayez-le.
Heure de mise à jour:2026-05-06
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.