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.
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).
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 :
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.
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).
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.
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.
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.
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.
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)
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 %.
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.
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.
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
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.