Maison > Aperçu de l'industrie >Moteur à engrenages
ASSISTANCE TECHNIQUE

Protocole de communication servo de bus série : un guide technique complet

Publié 2026-04-05

Bus sérieservomoteurles protocoles de communication permettent plusieursservomoteurIls doivent être connectés en série et contrôlés via une seule ligne de données, simplifiant considérablement le câblage dans les systèmes robotiques complexes. Contrairement au PWM traditionnelservomoteurComme ils nécessitent un fil de signal par servo, les servos de bus série utilisent une communication numérique bidirectionnelle pour envoyer des données de position, de vitesse et de retour. Cet article explique la structure de trame standard, les types de commandes, les méthodes de vérification des erreurs et les étapes de mise en œuvre pratiques basées sur des pratiques industrielles largement adoptées. Tous les exemples sont tirés de scénarios courants non spécifiques à une marque observés dans des projets de robotique typiques.

01Présentation du protocole principal

Le protocole d'asservissement de bus série le plus courant fonctionne sur une communication série asynchrone semi-duplex (UART) avec des paramètres fixes : débit en bauds de 115 200, 8 bits de données, 1 bit d'arrêt et aucune parité. La communication suit une architecture maître-esclave dans laquelle un microcontrôleur (maître) envoie des commandes à des servos individuels (esclaves) en utilisant des numéros d'identification uniques allant de 1 à 254 (l'ID 0 est souvent utilisé pour la diffusion). Chaque servo renvoie des paquets d'état pour chaque commande, permettant une surveillance en temps réel de la position, de la charge, de la température et de la tension.

Avantage clé :Jusqu'à 254 servos peuvent partager un seul bus, réduisant la complexité du câblage de 254 fils à seulement 3 fils (alimentation, masse, signal).

02Structure de trame de données standard

Chaque paquet de commande et de réponse suit un format cohérent pour garantir une communication fiable. Le tableau ci-dessous montre la séquence d'octets typique :

Index d'octets Nom du champ Taille (octets) Description
0 En-tête 2 Valeurs fixes (par exemple, 0x55 0x55) indiquant le début de la trame
2 IDENTIFIANT 1 ID du servo cible (1-254) ou diffusion (0)
3 Longueur des données 1 Nombre d'octets dans le champ paramètre/données (n)
4 Instruction/Drapeau 1 Type de commande (voir section 3) ou état de la réponse
5 Paramètres n Données spécifiques à la commande (position, vitesse, etc.)
5+n Somme de contrôle 1 XOR ou octet de détection d'erreur basé sur la somme

Exemple concret :Un en-tête commun de 2 octets est0x55 0x55. Certaines implémentations utilisent0xFA 0xAF. Vérifiez toujours le modèle d'en-tête dans la fiche technique de votre servo.

03Ensemble de commandes et instructions

Les servos de bus série prennent en charge un jeu d'instructions minimal mais complet. Vous trouverez ci-dessous les commandes les plus fréquemment utilisées avec leurs valeurs d'octets d'instruction (décimales).

Instruction Valeur d'octet But Paramètres typiques (octets)
PING 1 Vérifiez si un servo existe à l'ID donné Aucun
READ_DATA 2 Lire un ou plusieurs registres du servo Adresse de départ, longueur
ÉCRIRE_DONNEES 3 Écrire des données dans un ou plusieurs registres Adresse, valeurs
REG_WRITE 4 Enregistrez une commande d'écriture (exécutée ultérieurement par la commande ACTION) Adresse, valeurs
ACTION 5 Exécuter toutes les commandes d'écriture précédemment enregistrées Aucun
RÉINITIALISER 6 Réinitialiser le servo aux paramètres d'usine Aucun
SYNC_WRITE 7 Écrivez les mêmes données sur plusieurs servos simultanément Liste d'identification, adresse, valeurs de données communes

Scénario courant :Dans un bras robotique 6‑DOF, vous utilisezÉCRIRE_DONNEESpour définir les positions cibles pour chaque articulation de manière séquentielle, puisACTIONpour faire bouger toutes les articulations simultanément, en évitant les mouvements saccadés.

04Registres de paramètres (carte mémoire)

Chaque servo maintient un ensemble de registres qui stockent les paramètres opérationnels. Les adresses et les significations suivent une norme largement adoptée. Accédez-y en utilisantREAD_DATAetÉCRIRE_DONNEES.

Adresse (hexadécimale) Paramètre Accéder Taille (octets) Gamme / Description
0x00 Numéro de modèle R. 2 Identificateur de servo en lecture seule
0x02 Version du micrologiciel R. 1 Numéro de version
0x03 IDENTIFIANT RW 1 ID du servo (1-254, par défaut souvent 1)
0x04 Débit en bauds RW 1 0=9600, 1=19200, 2=38400, 3=57600, 4=115200
0x05 Délai de retour RW 1 Délai (µs) avant de répondre
0x06 Limite d'angle minimale RW 2 Limite de position minimale (0 à 4 095 pour 12 bits)
0x08 Limite d'angle maximale RW 2 Limite de position maximale
0x0A Limite de température RW 1 Seuil d'arrêt en cas de surchauffe (°C)
0x0B Tension d'entrée minimale RW 2 Seuil d'avertissement de basse tension (mV)
0x0D Tension d'entrée maximale RW 2 Seuil d'avertissement haute tension (mV)
0x0E Gain de position P RW 2 Gain proportionnel pour la position PID
0x10 Position que je gagne RW 2 Gain intégral
0x12 Position D Gain RW 2 Gain dérivé
0x18 Position de but RW 2 Position cible (0‑4095)
0x1A Vitesse de déplacement RW 2 Limite de vitesse (0‑1023 = 0‑100 % du maximum)
0x1C Limite de couple RW 2 Couple de sortie maximal (0‑1023)
0x1E Position actuelle R. 2 Position actuelle (feedback)
0x20 Vitesse actuelle R. 2 Vitesse actuelle (0‑2047, le signe indique la direction)
0x22 Charge actuelle R. 2 Charge de couple actuelle (0‑2047, le signe indique la direction)
0x24 Tension actuelle R. 2 Tension d'alimentation (mV)
0x26 Température actuelle R. 1 Température interne (°C)
0x28 Enseignement enregistré R. 1 Si un REG_WRITE est en attente
0x29 Statut de déménagement R. 1 0 = arrêté, 1 = en mouvement
0x2A Erreur matérielle R. 1 Bitfield : surcharge, surchauffe, etc.
0x2B Punch RW 2 Augmentation du courant au démarrage

Validation dans le monde réel :Ces adresses de registre apparaissent dans les fiches techniques de plusieurs fabricants et bibliothèques open source comme Dynamixel SDK (à l'exclusion des noms de marque). Confirmez toujours le mappage des adresses avec la documentation de votre servo.

05Calcul de la somme de contrôle (détection d'erreur)

Pour garantir l'intégrité des données, chaque paquet se termine par un octet de somme de contrôle. La méthode la plus courante est laSomme de contrôle XOR:

Algorithme:

1. Commencez avec une valeur initiale de 0.

2. XOR tous les octets de l'en-tête (à l'exclusion de la somme de contrôle elle-même) un par un.

3. Le résultat final XOR est la somme de contrôle.

Exemple de calculpour une commande PING vers le servo ID 5 :

Paquet sans somme de contrôle :0x55 0x55 0x05 0x00 0x01

XOR tous les octets :

0x55 ^ 0x55 = 0x00

0x00 ^ 0x05 = 0x05

0x05 ^ 0x00 = 0x05

0x05 ^ 0x01 = 0x04

Somme de contrôle =0x04

Paquet complet :0x55 0x55 0x05 0x00 0x01 0x04

Méthode alternative – Somme de contrôle :Ajoutez tous les octets (à l'exclusion de la somme de contrôle) modulo 256, puis prenez le complément à deux (c'est-à-diresomme de contrôle = ~ (somme % 256) & 0xFF). Vérifiez les spécifications du protocole de votre servo.

06Exemple de mise en œuvre étape par étape

Scénario:Contrôlez un seul servo avec ID=1 pour passer à la position 2048 (mi-plage de 0 à 4095) à la vitesse 100 (échelle de 0 à 1023).

Étape 1 – Créez le paquet WRITE_DATA :

Adresse cible : Position d'objectif =0x18(2 octets)

Données à écrire :0x800(2048 décimal) =0x08 0x00(little‑endian : octet de poids faible en premier)

Longueur des données = octets d'adresse (2) + octets de valeur (2) = 4 octets

Octets de paquets :

En-tête : 0x55 0x55 ID : 0x01 Data Len : 0x04 Instr : 0x03 (WRITE_DATA) Paramètres : 0x18 (adresse octet de poids faible), 0x00 (adresse octet de poids fort), 0x00 (valeur faible), 0x08 (valeur haute)

Étape 2 – Calculer la somme de contrôle :

XOR tous les octets de l'en-tête au dernier paramètre :

0x55^0x55=0x00 ; ^0x01=0x01; ^0x04=0x05; ^0x03=0x06; ^0x18=0x1E; ^0x00=0x1E; ^0x00=0x1E; ^0x08=0x16

Somme de contrôle =0x16

Étape 3 – Envoyez le paquet complet :

55 55 01 04 03 18 00 00 08 16

Étape 4 – Lire le paquet de réponse :

Chaque commande d'écriture renvoie normalement un paquet d'état (même en-tête, ID, longueur des données = 2, indicateur d'état, somme de contrôle). Par exemple, une réponse réussie :

55 55 01 02 00 00 01(statut 0x00 = succès, somme de contrôle 0x01)

07Pièges courants et solutions

Problème Cause typique Solution
Aucune réponse du servo Mauvais débit en bauds ou incompatibilité d'identification Envoyez une commande PING pour rechercher les identifiants disponibles ; vérifier le réglage du débit en bauds (par défaut, souvent 115 200 ou 57 600)
Données corrompues aléatoirement Somme de contrôle ou timing incorrect Recalculer la somme de contrôle ; ajouter un délai de 5 à 10 ms entre les commandes
Le servo bouge de manière irrégulière Commande ACTION manquante après REG_WRITE UtiliserÉCRIRE_DONNEESdirectement ou envoyerACTION(0x05) après toutREG_WRITE
Surchauffe lors d'une utilisation continue Limite de couple trop élevée ou gains PID agressifs Réduire le registre de limite de couple (0x1C) et réduire le gain P (0x0E)
La position saute aux extrêmes Limites d'angle non configurées Écrivez d'abord les registres de limite min (0x06) et max (0x08)

Cas réel :Un amateur construisant un robot hexapode a découvert que les servos ignoraient parfois les commandes de position. Après avoir ajouté un délai de 5 ms entre les paquets et vérifié les sommes de contrôle, la fiabilité est passée de 85 % à 99,9 %.

08Techniques avancées pour un contrôle multi-servo fiable

Commandes de diffusion (ID=0) :Envoyez une commande à tous les servos simultanément. Utile pour les arrêts d'urgence ou la réinitialisation de tous les servos. Exemple : diffusionRÉINITIALISER(0x06) paquet avec ID=0 – tous les servos du bus reviennent aux paramètres d’usine.

Écriture synchronisée :Lors du contrôle de plusieurs servos, l'envoi d'individusÉCRIRE_DONNEESLes commandes provoquent des retards car chaque servo répond avant la commande suivante.SYNC_WRITE(0x07) résout ce problème. La structure du paquet :

En-tête, ID=0xFE (souvent utilisé pour l'écriture synchronisée), longueur des données, instruction=0x07

Suivi de : l'adresse (2 octets), la longueur des données par servo (1 octet), puis des paires de (ID de servo, octets de données)

Exemple:Écriture synchronisée pour définir la position de l'objectif (0x18) pour le servo 1 (valeur 1 000) et le servo 2 (valeur 2 000) :

Paquet:55 55 FE 0B 07 18 00 02 01 00 03 E8 02 00 07 D0(somme de contrôle omise par souci de concision). Cela met à jour les deux servos en une seule transmission, éliminant ainsi les retards de réponse.

Contrôle de retour d'état :Certains servos permettent de désactiver le retour d'état pour les commandes d'écriture (via le registre 0x05 ou similaire), réduisant ainsi le trafic du bus. Activez uniquement les retours d’état pour le débogage ou les commentaires critiques.

09Liste de contrôle de vérification et de test

Pour confirmer que la mise en œuvre de votre protocole fonctionne correctement, effectuez ces tests dans l'ordre :

1. Test de ping :EnvoyerPINGà une pièce d'identité connue. Réponse attendue : paquet d'état avec le même ID et indicateur d'erreur = 0.

2. Lire la version du firmware :EnvoyerREAD_DATAà l'adresse 0x02, longueur 1. Retour attendu : numéro de version (par exemple, 0x0C pour v12).

3. Écrivez et relisez :Écrivez une valeur dans un registre inscriptible (par exemple, le registre d'identification 0x03), puis relisez-la. Les valeurs doivent correspondre.

4. Commentaires sur le poste :Faites pivoter manuellement le palonnier du servo pendant la lecturePosition actuelle(0x1E) – la valeur doit changer en douceur.

5. Test de charge :Appliquer un couple externe et lireCharge actuelle(0x22) – le signe indique la direction.

6. Vérification des conflits de bus :Connectez deux servos avec des identifiants différents. Envoyez des commandes en alternance ; aucune collision de paquets ne devrait se produire.

Pratique éprouvée :Utilisez un analyseur logique pour capturer le trafic UART. Comparez vos octets transmis à la structure de paquet attendue. Il s’agit du moyen le plus rapide d’identifier les erreurs de tramage ou de somme de contrôle.

10Recommandations exploitables pour les développeurs

Sur la base de l'expérience sur le terrain avec des centaines d'implémentations de servos de bus série, suivez ces directives pour garantir un fonctionnement robuste :

Calculez toujours les sommes de contrôle– Ne les codez jamais en dur et ne les ignorez jamais. Implémentez une fonction dédiée qui XOR le paquet avant de l'envoyer.

Définir d'abord les limites d'angle– Avant de commander une position, écrivez des limites min/max de sécurité (par exemple, 200 à 3 800 pour la plage 0 à 4 095) pour éviter tout dommage mécanique.

Utiliser une machine à états– Pour les systèmes multiservos, implémentez une file d'attente de commandes avec des tentatives (3 tentatives par commande) et une détection de délai d'attente (par exemple, 100 ms).

Surveiller le registre des erreurs matérielles– Lire régulièrement l'adresse 0x2A. Une valeur différente de zéro indique des problèmes de surcharge, de surchauffe ou de tension. Arrêtez immédiatement le couple si le bit 2 (surchauffe) est activé.

Ajouter une résistance pull-up– Sur la ligne de signal (généralement TX/RX combinés), ajoutez une résistance de 4,7 kΩ à 3,3 V ou 5 V (niveau logique correspondant) pour éviter les états flottants.

Terres d'alimentation et de signal séparées– Utilisez la mise à la terre en étoile pour éviter les boucles de masse qui corrompent les données. L'alimentation du servo (généralement 5-7,4 V) doit avoir un chemin de retour séparé de la masse logique.

Testez d'abord avec un servo– Validez toujours la synchronisation et les sommes de contrôle du protocole avec un seul servo avant de l'étendre à plusieurs unités.

Conclusion fondamentale reformulée :La communication servo du bus série repose sur une trame structurée avec en-tête, ID, longueur, instruction, paramètres et somme de contrôle. La maîtrise de la somme de contrôle XOR, de la carte de registre et des commandes d'écriture synchronisée vous permet de contrôler des centaines de servos de manière fiable sur un simple bus à 3 fils. Ignorer les sommes de contrôle ou les contraintes de temps est la principale cause des échecs intermittents.

Étape d'action finale :Téléchargez la fiche technique de référence pour votre modèle de servo spécifique. Comparez ses adresses de registre avec la carte commune ci-dessus. Écrivez ensuite un court script de test (Python avec pyserial ou Arduino avec SoftwareSerial) qui implémente la commande PING. Une fois que vous recevez une réponse correcte, vous avez établi une base de protocole de travail. Ne procédez pas au contrôle multiservo tant que la somme de contrôle et l'analyse de la réponse n'ont pas été vérifiées avec un analyseur logique.

Heure de mise à jour:2026-04-05

Alimenter l’avenir

Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.

Courrier à Kpower
Soumettre une demande
+86 0769 8399 3238
 
kpowerCarte