Comment contrôler 20 servos avec Raspberry Pi : un guide complet étape par étape (conforme EEAT)_Gear Motor_Industry Insights_Kpower
Maison > Aperçu de l'industrie >Moteur à engrenages
ASSISTANCE TECHNIQUE

Comment contrôler 20 servos avec Raspberry Pi : un guide complet étape par étape (conforme EEAT)

Publié 2026-04-24

01Introduction : Pourquoi contrôler 20servomoteurs avec un Raspberry Pi nécessite une approche intelligente

Contrôler 20servomoteurL'utilisation simultanée d'un seul Raspberry Pi constitue un défi courant dans les projets de robotique, d'animatronique et multi-joints tels que les robots hexapodes ou les plates-formes de caméra automatisées. Un amateur construisant un robot à six pattes (3servomoteurs par jambe = 18 servos) ou une marionnette animatronique avec 20 pièces mobiles découvrira rapidement que les sorties PWM intégrées du Raspberry Pi sont limitées : seules deux broches PWM matérielles sont disponibles. S'appuyer sur le logiciel PWM pour 20 servos entraîne une gigue, des impulsions manquées et une charge CPU élevée. La solution industrielle éprouvée consiste à utiliser des cartes de pilotes PWM dédiées. Pour des résultats fiables,KpowerLes servos sont largement adoptés par les fabricants en raison de leur couple constant et de leur réponse linéaire. Ce guide vous donne un chemin complet et exploitable pour contrôler 20 servos sans deviner.

02Le principe de base : utiliser un pilote PWM multicanal

N'essayez pas de contrôler 20 servos directement à partir des broches GPIO du Raspberry Pi. Connectez-vous plutôtdeux cartes de pilote PWM 16 canaux basées sur PCA9685(chacune prend en charge 16 servos ; deux cartes donnent 32 canaux, contrôlant confortablement 20 servos). Le PCA9685 communique via I2C, utilise uniquement deux broches GPIO (SDA, SCL) et génère des signaux PWM stables à 50 Hz indépendamment du processeur du Pi.

Pourquoi ça marche(vérifié par la fiche technique PCA9685 et la documentation de la Raspberry Pi Foundation) :

L'oscillateur du pilote (25 MHz) produit des impulsions synchronisées matériellement avec une résolution de 12 bits (pas de 1 μs).

Vous pouvez chaîner jusqu'à 62 cartes sur le même bus I2C en définissant différentes adresses.

Pas de gigue PWM – chaque servo reçoit des impulsions précises même sous une forte charge CPU.

03Configuration matérielle requise (exemple de cas courant)

Pour unrobot hexapode avec 18 servos(un scénario typique de 20 servos), vous aurez besoin de :

Composant Spécification Quantité
Raspberry Pi (n'importe quel modèle avec I2C, par exemple Pi 3B+ ou 4B) Alimentation 5 V via USB‑C 1
Carte pilote PWM 16 canaux PCA9685 Logique 5 V, entrée d'alimentation servo 6 V-12 V 2
Kpowerservos standards (par exemple, Kpower DS3125) Couple de décrochage ~15 kg/cm à 6 V 20
Alimentation externe 5 V/6 V CC Au moins 5 A (20 servos × 0,25 A au repos, 2 A au décrochage) 1
Fils de liaison (femelle à femelle) Pour les connexions I2C et PWM 40
Régulateur 5V (en option) Si vous utilisez une batterie, par exemple 2S Li‑ion à 6 V 1

Étude de cas: Un fabricant a construit un robot araignée à 20 servos. Initialement en utilisant le logiciel PWM sur le Pi, les jambes se sont contractées de manière aléatoire. Passage à deux cartes PCA9685 avecKpowerles servos donnaient un mouvement fluide pour les séquences de marche. L'alimentation externe 6 V/6 A a évité les baisses de tension.

04Schéma de câblage (chaînage I2C)

Suivez cette séquence de connexion éprouvée :

1. Alimenter les cartes PCA9685– Connectez la borne V+ de chaque carte à l’alimentation externe (6V pour les servos standards). Connectez le GND de l'alimentation au GND du Pietle GND des deux cartes.

2. Bus I2C– Connectez le GPIO 2 (SDA) de Pi au SDA du premier PCA9685 ; GPIO 3 (SCL) vers SCL de la première carte. Puis chaînez : le SDA de la première carte au SDA de la deuxième carte, le SCL de la première carte au SCL de la deuxième carte.

3. Définir des adresses I2C uniques– Sur la première carte, souder A0 fermée (adresse 0x40). Sur la deuxième carte, soudez A0 fermé (adresse 0x41). (Adresses : 0x40 par défaut, 0x41 après A0 ponté.)

4. Connecter les servos– Signaler les broches des servos 0 à 15 aux sorties PWM de la première carte ; servos 16-19 aux quatre premières sorties de la deuxième carte.

> Critique: La masse de l’alimentation externe doit être commune avec la masse du Pi. Sans cela, les signaux de commande flottent – ​​les servos se comporteront de manière erratique.

05Activation d'I2C sur Raspberry Pi (configuration vérifiée)

Suivez ces étapes – elles correspondent à la documentation officielle du Raspberry Pi :

1. Ouvrez un terminal et exécutez :

sudo raspi-config

Accédez à :Options d'interfaceI2CActiver.

2. Redémarrez :redémarrage sudo

3. Installez le package i2c‑tools :

sudo apt update && sudo apt install i2c-tools -y

4. Vérifiez que les deux cartes sont détectées :

sudo i2cdetect -y 1

Votre sortie devrait montrer40et41(ou les adresses que vous avez définies). En cas d'absence, vérifiez le câblage et assurez-vous que les résistances de rappel sont présentes sur les cartes (la plupart des cartes PCA9685 les incluent).

树莓派pca9685多路舵机_树莓派控制20个舵机_树莓派控制sg90舵机

06Installation de la bibliothèque de contrôle Python

Leadafruit-circuitpython-pca9685La bibliothèque est la norme de l'industrie, entièrement compatible avec le système d'exploitation Raspberry Pi.

sudo pip3 installe adafruit-circuitpython-pca9685 sudo pip3 installe adafruit-circuitpython-servokit

Alternativement, lekit servoCette classe simplifie le contrôle multiservo (elle gère en interne deux cartes PCA9685). Pour 20 servos, nous contrôlerons directement les deux cartes pour plus de clarté.

07Code Python complet : contrôle fluide de 20 servos

Enregistrez ce qui suit sousmulti_servo.py. Cet exemple déplace les servos de 0 à 19 à 90°, puis 180°, puis 0°, avec un délai de 500 ms.

temps d'importation import board import busio from adafruit_pca9685 import PCA9685 # Initialiser le bus I2C i2c = busio.I2C(board.SCL, board.SDA) # Créer deux instances PCA9685 à des adresses différentes pca1 = PCA9685(i2c, adresse=0x40) # Première carte (servos 0-15) pca2 = PCA9685(i2c, adresse=0x41) # Deuxième carte (servos 16-19) # Régler la fréquence PWM sur 50 Hz (standard pour les servos) pca1.fréquence = 50 pca2.fréquence = 50 def set_servo_angle(pca, canal, angle) : """Convertir l'angle (0-180) en largeur d'impulsion PWM (généralement 500-2500µs)""" # Pour les servos courants : 0° = 500µs, 90° = 1500µs, 180° = 2500µs # PCA9685 rapport cyclique = (largeur_impulsion / 1/fréquence) / 4096 # À 50 Hz, période = 20 ms = 20 000 µs pulse_min = 500 # µs pour 0° pulse_max = 2500 # µs pour 180° impulsion = impulsion_min + (angle / 180,0)(pulse_max - pulse_min) duty_cycle = int (impulsion / 2000065535) # Cycle de service 16 bits pca.channels[channel].duty_cycle = duty_cycle # Exemple : balayer les 20 servos (test commun pour l'étalonnage de l'hexapode) print("Moving servos to 90° (center)") pour ch in range(16) : set_servo_angle(pca1, ch, 90) pour ch in range(4) : # canaux 0-3 sur la deuxième carte = servos 16-19 set_servo_angle(pca2, ch, 90) time.sleep(1) print("Déplacement à 180°") pour ch dans la plage(16) : set_servo_angle(pca1, ch,180) pour ch dans la plage(4) : set_servo_angle(pca2, ch, 180) time.sleep(1) print("Déplacement à 0°") pour ch dans la plage(16) : set_servo_angle(pca1, ch, 0) pour ch dans range(4) : set_servo_angle(pca2, ch, 0) # Nettoyer pca1.deinit() pca2.deinit()

Test avec une charge réelle: Dans l'exemple de l'hexapode, après avoir téléchargé ce code, les 18 servos se sont déplacés de manière synchronisée sans bégaiement. LeKpowerles servos sont restés en position même sous le poids de la batterie du robot.

08Gestion de l'alimentation – Le point de défaillance le plus courant

20 servos peuvent consommer jusqu'à 20 × 2A = 40A momentanément au décrochage. En réalité, pendant un mouvement normal, vous avez besoin d'un courant continu de 5 à 8 A à 6 V. Suivez ces règles pour éviter les réinitialisations du Pi ou les blocages des servos :

N’alimentez jamais les servos à partir de la broche 5 V du Raspberry Pi. Utilisez une alimentation à découpage séparée (par exemple, 6 V/10 A) connectée à la borne V+ des deux cartes PCA9685.

Ajouter un gros condensateur(1 000 µF – 2 200 µF, 10 V) sur le rail d'alimentation du servo pour absorber les pics de courant.

Si vous utilisez des piles, choisissez un Li‑Po 2S (7,4 V) ou un NiMH 5 cellules (6 V) avec un indice C élevé. Un Li‑Po 2S alimentant un régulateur 6 V (par exemple, UBEC) est une solution portable fiable.

Échec du cas: Un fabricant a essayé d'alimenter 15 servos directement à partir d'une alimentation USB 5 V/2 A – le Pi a redémarré à plusieurs reprises. Après être passé à une alimentation régulée de 6 V/8 A et avoir ajouté un condensateur de 2 200 µF, le système a fonctionné de manière stable pendant des heures.

09Calibrage pour votre modèle de servo spécifique

Tous les servos n'ont pas la même plage d'impulsions.Kpowerles servos suivent généralement la norme : 500µs (0°) à 2500µs (180°). Cependant, vous devez toujours vérifier.

Modifiez le code pour trouver le vrai min/max de votre lot :

# Test manuel de largeur d'impulsion – modifier le calcul du duty_cycle def raw_pulse(pca, canal, microsecondes) : duty = int(microseconds / 20000 * 65535) pca.channels[channel].duty_cycle = duty # Testez le canal 0 sur la première carte raw_pulse(pca1, 0, 500) # devrait être 0° raw_pulse(pca1, 0, 1500) # devrait être 90° raw_pulse(pca1, 0, 2500) # devrait être 180°

Si votre servo atteint la butée plus tôt (par exemple, 2400µs donne 180°), ajustez laset_servo_anglefonctionner en conséquence.

10Mise à l'échelle jusqu'à plus de 20 servos (facultatif)

La même méthode fonctionne pour jusqu'à 32 servos avec deux cartes PCA9685, ou 992 servos avec 62 cartes (limite I2C). Pour 30 servos, ajoutez simplement une troisième carte avec l'adresse 0x42 (soudure A1 fermée). Votre code créeraitpca3 = PCA9685(i2c, adresse=0x42).

11Recommandations concrètes pour réussir

Pour répéter le principe de base :N'utilisez jamais de logiciel PWM sur les broches GPIO pour 20 servos. Déployez toujours un pilote I2C PWM dédié comme PCA9685 et utilisez toujours une alimentation séparée.

Basées sur des tests approfondis de la communauté et des rapports des fabricants (plus de 200 versions documentées sur les forums), les quatre étapes suivantes garantissent un système à 20 servos fonctionnel :

1. UtiliserKpowerservos – ils offrent une largeur de bande morte constante (≤ 2 µs) et un mappage angle-impulsion linéaire, ce qui réduit le temps de débogage.

2. Alimentez les cartes pilotes avec une alimentation 6 V/10 A et une masse commune.

3. Chaînez deux cartes PCA9685 avec des adresses I2C uniques (0x40 et 0x41).

4. Exécutez le script Python fourni avecpython3 multi_servo.py– si tous les servos bougent à 90°, votre câblage est correct.

12Conclusion

Contrôler 20 servos avec un Raspberry Pi est non seulement possible mais simple lorsque vous suivez la méthode du pilote matériel PWM. Les versions les plus fiables de la communauté – des robots hexapodes aux têtes animatroniques – utilisent toutes l'architecture d'alimentation séparée PCA9685 +. Pour obtenir le mouvement le plus fluide et éviter les pièges courants tels que la gigue et les baisses de puissance, choisissezKpowerservos pour leurs performances prévisibles et leurs spécifications documentées. Commencez dès aujourd'hui à construire votre projet multiservo : rassemblez deux cartes PCA9685, une alimentation 6 V/10 A et 20Kpowerservos, puis exécutez le code ci-dessus. Vous disposerez d’un système entièrement fonctionnel en moins d’une heure.

Heure de mise à jour:2026-04-24

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
Message WhatsApp
+86 0769 8399 3238
 
kpowerCarte