Publié 2026-03-10
Je constate que pendant leservomoteurprocessus de débogage, avez-vous souvent des maux de tête concernant la valeur PWM correspondant à cet angle ? L'angle a été calculé avec précision, mais le moteur ne peut pas tourner jusqu'à la position spécifiée ou il continue de trembler. En fait, il y a une formule mathématique simple à l’œuvre derrière cela. Une fois que vous l'avez compris, vous pouvez contrôler avec précision chaque degré duservomoteur.
Pour parler franchement, la fonction duservomoteurLa formule de calcul PWM est destinée à vous aider à établir une correspondance biunivoque entre « l'angle » et la « largeur d'impulsion ».
Le signal de servocommande couramment utilisé est un PWM de 50 Hz avec une période de 20 ms. Dans cette plage de périodes, la largeur du niveau haut est généralement comprise entre 0,5 ms et 2,5 ms, et la plage d'angle correspondant à cet intervalle de largeur est de 0° à 180°.
La formule de calcul peut s’écrire :largeur d'impulsion cible = largeur d'impulsion minimale + (angle/180°) × (largeur d'impulsion maximale - largeur d'impulsion minimale). Cette formule montre clairement comment calculer la largeur d'impulsion cible en fonction de paramètres spécifiques. Par exemple, dans le cadre d'un asservissement, si votre servo 0° correspond à 0,5ms et 180° correspond à 2,5ms, alors calculez la position 90° grâce à cette formule et le résultat sera de 1,5ms. Ce processus de calcul est d'une grande importance dans la correspondance entre l'angle de l'appareil à gouverner et la largeur d'impulsion, et peut déterminer avec précision la valeur de largeur d'impulsion requise par l'appareil à gouverner à différents angles.
Connaître la largeur d'impulsion ne suffit pas, car le registre du rapport cyclique doit généralement être configuré dans le microcontrôleur. Cycle de service = largeur d'impulsion cible/20 ms. Par exemple, si vous avez besoin d'une largeur d'impulsion de 1,5 ms, le rapport cyclique est de 1,5/20 = 0,075, soit 7,5 %.
Spécifiquement implémenté dans le code, par exemple, si vous choisissez STM32 et souhaitez définir la valeur de rechargement automatique sur 2000 (cette valeur représente 20 ms), alors la valeur de comparaison doit être définie sur 150 (cette valeur représente 1,5 ms). Ce processus convertit en fait le rapport temporel en valeur de registre pour garantir que le matériel peut produire une forme d'onde précise.
Dans le fonctionnement réel du code, en prenant STM32 comme exemple, lorsque vous définissez la valeur de rechargement automatique sur 2000 (ce qui représente 20 ms), la valeur de comparaison doit être définie sur 150 (ce qui représente 1,5 ms). This process of converting time proportions into register values plays a key role in ensuring that the hardware outputs accurate waveforms.
C’est probablement le piège dans lequel tomber le plus facilement. Différentes marques et modèles de servos, ou même des servos du même modèle mais de lots différents, ont des plages PWM différentes. La valeur PWM correspondante de certains servos à l'état 0° est de 0,5 ms, tandis que d'autres sont de 0,6 ms ; à 180°, la valeur PWM correspondante de certains servos peut être de 2,5 ms, tandis que d'autres peuvent être de 2,4 ms.
Par conséquent, lorsque vous utilisez le servo, assurez-vous de comprendre à l'avance sa plage PWM spécifique, sinon il est facile de provoquer divers problèmes dus à une inadéquation des paramètres, affectant l'utilisation normale du servo et le fonctionnement des équipements associés.
Le moyen le plus sûr est de vérifier la fiche technique officielle du servo. Si vous ne trouvez pas le manuel, il est recommandé de le mesurer vous-même : augmentez d'abord lentement la largeur d'impulsion pour trouver la valeur minimale à laquelle le servo commence à tourner, puis trouvez la valeur maximale à laquelle le servo arrête de tourner. Remplacez ces deux valeurs obtenues par des mesures réelles dans la formule, afin que le servo puisse pointer avec précision vers la position cible et éviter que le moteur ne soit endommagé en raison d'une contrainte excessive.
La conséquence la plus directe de calculs inexacts est la « non-linéarité ». Par exemple, lorsque vous vous attendez à ce que le servo tourne à 45°, la situation réelle est qu'il ne tourne que de 40°. Ce qui est plus grave, c'est qu'une fois que la largeur d'impulsion dépasse la plage autorisée du servo, par exemple, si une largeur d'impulsion de 2,6 ms est donnée, le limiteur à l'intérieur du servo sera fortement bloqué, provoquant une surcharge du servo, générant de la chaleur et même brûlant la puce du pilote.
D'un autre côté, si la plage de largeur d'impulsion est trop étroite, par exemple, seulement 1 ms à 2 ms est utilisée, alors la plage de rotation réelle de votre servo peut n'être que de 120°, ce qui gâche ses performances mécaniques. Par conséquent, les deux valeurs limites de la formule doivent correspondre avec précision aux limites physiques de l’appareil à gouverner.
Lors de l’écriture de code, nous encapsulons généralement la formule dans une fonction. L'entrée est l'angle souhaité et la sortie est la valeur de comparaison de la minuterie. Les étapes sont simples :
1. Définissez d’abord deux constantes :et, correspondant aux largeurs d'impulsion mesurées de 0° et 180°.
2. Utilisez ensuite la formule := + (angle / 180,0) * ( - ) .
3. N'oubliez pas de convertir le résultat à virgule flottante en un entier et de l'attribuer directement au registre de comparaison de capture du temporisateur.
De cette façon, chaque fois que la fonction est appelée, le servo peut tourner en douceur vers n'importe quel angle souhaité.
Si vous travaillez sur un bras robotique ou un projet de suivi visuel qui nécessite une grande précision, vous pouvez envisager d'introduire un contrôle en boucle fermée. La formule en boucle ouverte ci-dessus ne peut garantir que "la largeur d'impulsion donnée, l'angle de rotation", mais si le servo est bloqué à cause de la force, la position sera perdue.
À ce stade, vous pouvez ajouter un potentiomètre ou un encodeur à l'arbre de sortie du servo pour lire l'angle réel en temps réel, puis utiliser l'algorithme PID pour ajuster dynamiquement la valeur PWM. De cette façon, même en cas d'interférence externe, le système peut automatiquement ramener l'appareil à gouverner à la position cible, obtenant ainsi un contrôle véritablement précis.
Je me demande si vous avez déjà rencontré une situation où la plage de rotation des deux côtés de l'ensemble du mécanisme est asymétrique en raison de la valeur médiane du servo imprécise (90°) dans des projets réels ? Bienvenue pour discuter de votre expérience de débogage dans la zone de commentaires. Si vous le trouvez utile, n’oubliez pas de l’aimer et de le partager avec plus d’amis.
Heure de mise à jour:2026-03-10
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.