Publié 2026-03-29
Lorsqu'on s'engage dans l'innovation de produits, la plus grande crainte est que si la puce de contrôle principale est remplacée, la puce initialement bien ajustéeservomoteurcessera de tourner. De nombreux amis ont reçu une nouvelle carte de développement STM32 et voulaient déplacer laservomoteurprogramme utilisé à l'origine sur d'autres cartes, mais a constaté qu'il ne répondait pas ou tremblait violemment. En fait, à condition de clarifier quelques points clés de la transplantation, ce n’est pas compliqué du tout. Aujourd'hui, nous allons parler de la façon de "déplacer" en douceur leservomoteurprogramme entre différents modèles STM32.
Le cœur de la servocommande est de produire une onde PWM avec une période d'environ 20 ms et un temps de haut niveau allant de 0,5 ms à 2,5 ms. Par conséquent, la première étape de la migration du code consiste à trouver les minuteries et les canaux sur la nouvelle carte pouvant générer du PWM. Votre programme d'origine utilisait CH1 de TIM2, mais vous devrez peut-être maintenant le remplacer par CH2 de TIM3. Cette correspondance doit être clairement confirmée dans la fiche technique de la puce. Le changement n’est en réalité qu’une question de quelques paramètres. Une fois le numéro de minuterie et le numéro de canal modifiés, la plupart du code peut être utilisé.
Après avoir modifié la configuration de la minuterie, n'oubliez pas de vérifier la fréquence de l'horloge. Différents modèles de STM32 peuvent avoir différentes sources d'horloge pour l'horloge système et la minuterie. Par exemple, la fréquence principale d'origine de 72 MHz utilisée dans la série F1 peut devenir 48 MHz lors du passage à la série F0. À ce stade, vous devez recalculer le coefficient de division de fréquence PWM et la valeur de recharge pour vous assurer que la période PWM de sortie finale est toujours de 20 ms. Pour faire simple, les deux paramètres ARR et PSC sont recalculés en fonction de l'horloge de la nouvelle puce pour garantir que le servo puisse recevoir les signaux qu'il reconnaît.
Lors de la sélection des broches, ne vous contentez pas de trouver un GPIO et de le connecter. Vous devez d'abord rechercher les broches avec la fonction "", qui sont des broches de sortie matérielles PWM. L'avantage de l'utilisation du PWM matériel est qu'il n'occupe pas de ressources CPU, la sortie d'impulsion est très stable et le servo tourne en douceur. Si vous devez utiliser un GPIO ordinaire pour simuler via la fonction de retard, le processeur sera épuisé, et si le programme devient légèrement plus compliqué, le timing sera facilement gâché et le servo tremblera définitivement.
Après avoir sélectionné la broche, dans la partie initialisation du programme, vous devez définir le mode de fonctionnement GPIO sur sortie push-pull multiplexée. C'est comme attribuer des responsabilités professionnelles à cette broche et lui dire "vous êtes responsable de la sortie du signal PWM". De plus, si le circuit imprimé d'origine possède une résistance de rappel mais pas la nouvelle, vous devez déterminer s'il convient d'activer le rappel interne dans le code pour garantir que la broche a un certain état de niveau lorsqu'elle est inactive afin d'éviter les interférences de signal.
De nombreuses personnes ont mal à la tête lors du calcul de la fréquence. En fait, il existe un moyen simple. Le cycle PWM requis par le servo est de 50 Hz, soit un cycle de 20 ms. Quelle que soit la minuterie que vous utilisez, l’objectif est d’amener la fréquence à 50 Hz. La formule de calcul est simple : fréquence de sortie du minuteur = horloge système / (PSC+1) / (ARR+1). Vous définissez d'abord le PSC sur un nombre pratique, tel que 7200-1, puis inversez la valeur ARR afin que le résultat final soit proche de 50 Hz.
Par exemple, si l'horloge système est de 72 MHz et que vous réglez PSC sur 7200-1, la fréquence de comptage du temporisateur devient 10 kHz. Pour que la fréquence de sortie atteigne 50 Hz, l'ARR doit être réglé sur 200-1, de sorte que tous les 200 nombres soient comptés, soit 20 ms. Différentes puces ont des fréquences principales différentes, vous pouvez donc calculer selon cette idée pour vous assurer que l'ARR et le PSC finaux calculés sont tous deux des nombres entiers, et que l'ARR ne doit pas dépasser la valeur de comptage maximale de la minuterie, afin que le programme fonctionne sans problème.
Si vous souhaitez qu'une carte contrôle plusieurs servos en même temps, cela dépend du nombre de canaux dont dispose le timer. Une minuterie dispose généralement de 4 canaux, chaque canal peut produire indépendamment un PWM et la fréquence est partagée. Par conséquent, tant que vos servos fonctionnent tous à 50 Hz, vous pouvez utiliser une minuterie pour piloter 4 servos, ce qui peut économiser beaucoup de ressources de minuterie. Il vous suffit de configurer plusieurs canaux lors de l'initialisation et de définir respectivement leurs valeurs de comparaison.
Si plus de 4 servos doivent être contrôlés, une deuxième minuterie doit être activée. Lors de la transplantation, vous pouvez écrire le code d'initialisation pour contrôler un seul servo en tant que fonction, l'appeler autant de fois que nécessaire pour le contrôler et transmettre le numéro de minuterie et le numéro de canal comme paramètres. De cette façon, le code est hautement réutilisable et il sera facile à maintenir, quel que soit le nombre de servos ajoutés à l'avenir. N'oubliez pas que le registre de comparaison de chaque canal est indépendant et que vous pouvez le faire fonctionner séparément lors du réglage du rapport cyclique.
Le programme est gravé, mais le servo ne répond pas ? Ne vous inquiétez pas, commencez par le matériel le plus simple. Utilisez un multimètre pour vérifier si l'alimentation électrique et la masse du servo sont correctement connectées. Le servo a des besoins en courant élevés, vous devez donc utiliser une alimentation externe. Ne vous attendez pas à ce que le 3,3 V de la carte de développement puisse s'allumer. S'il n'y a pas de problème avec l'alimentation électrique, utilisez un oscilloscope ou un analyseur logique pour voir s'il y a une forme d'onde de sortie sur les broches de la puce et voyez si la période et la largeur d'impulsion sont correctes.
Si la forme d'onde est correcte mais que le servo ne tourne toujours pas, il peut s'agir d'un problème avec la logique du code. Vous pouvez d'abord écrire le programme de test le plus simple et émettre un niveau élevé fixe de 1,5 ms pour ramener le servo en position médiane. Si cette option peut être activée, cela signifie qu'il n'y a aucun problème avec le pilote sous-jacent et que le problème réside dans votre logique de contrôle. Ajoutez progressivement des fonctions, modifiez petit à petit et utilisez la méthode d'élimination pour localiser rapidement le problème, ce qui est beaucoup plus rapide que de deviner par vous-même.
Maintenant que la transplantation de base est effectuée, nous pouvons faire quelques astuces. Par exemple, si vous souhaitez que le servo tourne vers un angle spécifique, vous pouvez écrire une fonction de conversion d'angle pour mapper 0 à 180 degrés sur une valeur de largeur d'impulsion de 0,5 ms à 2,5 ms. De cette façon, vous n’avez pas besoin de vous souvenir de ces valeurs temporelles compliquées. Vous pouvez appeler directement la fonction et transmettre l'angle. La lisibilité et la portabilité du code seront grandement améliorées, et les autres le comprendront d'un seul coup d'œil.
Pour un autre exemple, vous pouvez également ajouter un filtrage logiciel pour éviter des changements brusques dans le signal de commande provoquant un « tremblement » du servo. Dans les projets réels, les données renvoyées par le capteur auront inévitablement une gigue. Si vous ajoutez un simple filtre de moyenne mobile au programme et que vous l'envoyez ensuite au servo, le mouvement sera beaucoup plus fluide. Encapsulez ces fonctions étendues dans des modules indépendants. Lors de la prochaine transplantation vers d'autres projets, ces « accumulations » pourront être directement utilisées et l'efficacité du développement sera doublée.
Où en est votre projet de transplantation de servos ? Est-ce parce que la configuration des broches n'est pas claire, ou le calcul de la fréquence est-il toujours erroné ? N'hésitez pas à laisser un message dans la zone de commentaires pour parler de votre expérience. Si vous pensez que cet article vous est utile, n'oubliez pas de l'aimer et de l'enregistrer. Vous êtes également invités à rechercher sur le site officiel de notre société des cas plus pratiques et des modèles de code !
Heure de mise à jour:2026-03-29
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.