Go to file
2025-08-12 20:01:10 +02:00
doc Basse résolution 2025-08-10 20:58:22 +02:00
src Mode2 semi-fonctionnel 2025-08-12 20:01:10 +02:00
.gitignore Ping et lecture des registres lorsqu'un servo avec l'ID 1 est trouvé 2025-08-10 16:32:27 +02:00
platformio.ini Ping et lecture des registres lorsqu'un servo avec l'ID 1 est trouvé 2025-08-10 16:32:27 +02:00
Readme.md Basse résolution 2025-08-10 20:58:22 +02:00

Fonctionnement en mode Servo "Classique"

En faisant varier la consigne de position de -512 à 5120, nous observons des butées logicielles à 0 et à 4093. Notons aussi que la position renvoyée peut reboucler à 0 comme indiqué sur le graphique. Nous avons globalement le fonctionnement d'un servomoteur classique, sauf que nous avons le retour de position et que nous pouvons régler également la vitesse.

Voici le graphique obtenu à partir du comportement du servomoteur.

Suppression des butées

En faisant varier la consigne de position de -512 à 5120, nous observons l'absence de butées logicielles.

Voici le graphique obtenu à partir du comportement du servomoteur.

Seulement, en poussant le servomoteur un peu plus loin, nous observons que le multitour est limité. Lorsqu'il doit faire son 8e tour (ou presque), le servomoteur part dans l'autre sens à toute vitesse. Un tour correspond à 4096 points de codeurs et la position est enregistrée sur 16 bits, donc avec une limite vers 32700 (en positif ou en négatif).

Nous remarquons que la valeur de la position du servo est toujours comprise entre 0 et 4095. Pas moyen de savoir combien de tours le servomoteur a fait.

Sur le graphique ci-dessous, nous voyons que le servomoteur (position en bleu) s'affole quand la consigne passe au dessus de 32000.

Note : Pour la butée logicielle haute, contrairement à ce qui est indiqué dans la documentation, des valeurs plus grandes que 4095 sont acceptées.

Retour de position qui correspond à la consigne

En passant le bit4 du registre 0x12 à 1, vous obtenez un retour de position du servomoteur qui n'est plus bloqué entre 0 et 4095. Mais attention, cette valeur n'est pas celle qui persistera à une coupure de courant. Si votre servo s'arrête à la position 6000, après une extinction, vous lire une position à 1904.

C'est donc une solution intéressante tant que vous avez un moyen de refaire le zéro à la mise sous tension.

Fonctionnement en mode Servo "Classique" - basse résolution

Un paramètre permet de baisser artificiellement la résolution du codeur. Ceci permet, en interrogeant le servo de savoir où il se trouve sur une position de 0 à 4095, d'avoir une réponse sur 2 ou 3 tour, en fonction de la valeur de 0x1E :

  • 2 : ce sera sur 2 tours
  • 3 : ce sera sur 3 tours

En théorie, ceci va de pair avec une perte en précision, qui est probablement négligeable.

Je ne comprends pas trop l'intérêt de ce mode. La valeur de position n'est pas persistante après une extinction...