Publié 2026-04-05
Contrôler plusieursservomoteurLes moteurs avec un Raspberry Pi constituent un défi courant pour les projets de robotique et d'automatisation. La clé est de ne pas se connecterservomoteurdirectement aux broches GPIO – les sorties PWM intégrées du Raspberry Pi sont limitées et ne peuvent pas fournir suffisamment de courant. La solution fiable consiste à utiliser une carte de pilote PWM dédiée, telle que le module PWM 12 bits 16 canaux PCA9685. Ce guide fournit une méthode étape par étape, conforme à l'EEAT, pour contrôler jusqu'à 16servomoteurs simultanément, basés sur des projets du monde réel comme un bras robotique à 6 axes ou une tête animatronique multiservo.
Broches PWM matérielles limitées– Un Raspberry Pi ne dispose que de deux canaux PWM matériels (GPIO 18 et GPIO 19 sur la plupart des modèles). Le logiciel PWM est possible mais entraîne une instabilité et une charge CPU élevée.
Courant insuffisant– Chaque servo peut consommer 200 à 500 mA pendant le mouvement. Connecter plus de deux servos directement à la broche 5V risque d’endommager le régulateur de tension du Pi.
Précision du timing– Les servos ont besoin d’un signal PWM précis de 50 Hz avec des cycles de service variables. Le pilote PCA9685 décharge ce timing, offrant un contrôle stable pour tous les servos simultanément.
Pour un projet type (ex. : un petit bras robotique à 6 degrés de liberté), vous aurez besoin de :
Raspberry Pi (tout modèle avec GPIO, 3B+ ou plus récent recommandé)
Carte pilote PWM 16 canaux PCA9685 (généralement disponible pour environ 5 à 10 $)
Alimentation externe 5V DC (capacité = nombre de servos × 0,5 A + 20% de marge → pour 6 servos : 6 × 0,5 = 3A, utiliser une alimentation 5V/5A)
6 servos standards SG90 ou MG90S (courants dans les projets de loisirs)
Fils de liaison (femelle à femelle pour le signal, mâle à femelle pour les connexions optionnelles)
Condensateur électrolytique de 1 000 µF (facultatif mais recommandé, placé sur le 5 V/GND près des servos pour réduire les pics de tension)
1. Connectez le PCA9685 au Raspberry Pi (bus I2C)
VCC → broche 5V sur Pi (ou utilisez le 5V de l'alimentation externe – voir note d'alimentation)
GND → broche GND sur Pi (terre commune obligatoire)
SCL → GPIO3 (SCL)
SDA → GPIO2 (SDA)
2. Connectez l'alimentation externe 5 V au PCA9685
Borne V+ sur PCA9685 → alimentation externe 5V positive
Borne GND sur PCA9685 → négatif alimentation externeETau GND de Pi (créer un terrain d’entente)
3. Connectez les servos au PCA9685
Fil de signal servo (généralement orange/jaune) → canal PWM 0,1,2,… (jusqu'à 15)
Servo VCC (rouge) → borne V+ sur PCA9685 (5V externe)
Servo GND (marron/noir) → borne GND sur PCA9685
> Erreur courante: Utilisation de la broche 5V du Pi pour alimenter plusieurs servos. Même avec une carte pilote, le 5 V du Pi ne peut pas fournir plus de ~500 mA. Utilisez toujours une alimentation externe de 5 V avec un courant adéquat.
Activez I2C et installez la bibliothèque Python :
sudo raspi-config # Naviguer : Options d'interface → I2C → Activer sudo reboot
![]()
Après le redémarrage, installez leadafruit-circuitpython-servokitbibliothèque (la bibliothèque est open source ; aucune approbation spécifique de la marque n'est implicite) :
sudo apt update sudo apt install python3-pip python3-smbus i2c-tools sudo pip3 install adafruit-circuitpython-servokit
Vérifiez la détection I2C :
i2cdetect -y 1
Vous devriez voir l'adresse0x40(adresse PCA9685 par défaut).
Créer un fichiermulti_servo.py:
from adafruit_servokit import ServoKit import time # Initialiser le pilote PCA9685 (adresse par défaut 0x40, 16 canaux) kit = ServoKit(channels=16) # Régler la fréquence PWM à 50 Hz (standard pour les servos) kit.fréquence = 50 # Définir les canaux de servo (0 à 5 pour 6 servos) servo_channels = [0, 1, 2, 3, 4, 5] # Exemple : move tous les servos en position neutre (90°) # La plupart des servos acceptent des largeurs d'impulsion de 0,5 ms (0°) à 2,5 ms (180°) # La bibliothèque mappe automatiquement l'angle 0 à 180. pour ch dans servo_channels : kit.servo[ch].angle = 90 time.sleep(0.2) # permettre à chaque servo d'atteindre la position # Déplacer le servo sur le canal 0 de 0° à 180° par étapes def swawy_servo(channel) : pour l'angle dans la plage (0, 181, 10) : kit.servo[channel].angle = angle time.sleep(0.05) # Exemple de séquence pour une rotation de la base d'un bras de robot scanning_servo(0) # la base tourne kit.servo[1].angle = 45 # épaule time.sleep(0.5) kit.servo[2].angle = 120 # elbow time.sleep(0.5) print("Tous les servos contrôlés avec succès")
Courir avecpython3 multi_servo.py. Pour un mouvement simultané, utilisezkit.servo[ch].angle = valeursansdormirentre les canaux – le pilote met à jour tous les canaux en même temps.
Jamaisalimentez le V+ du PCA9685 à partir de la broche 5 V du Pi lorsque plusieurs servos sont connectés. La masse doit être partagée : connectez le GND de l’alimentation externe au GND du Pi et au GND du PCA9685.
Cas A: Les servos tremblent ou se déplacent de manière erratique.
Cause: Courant insuffisant ou masse commune manquante.
Réparer: Utilisez une alimentation 5 V plus puissante ; vérifiez que le GND de l’alimentation externe est connecté au GND du Pi.
Cas B: Seuls certains servos répondent.
Cause: Fil de signal desserré ou mauvaise adresse I2C.
Réparer: Couriri2cdetect -y 1encore; assurez-vous que l'adresse est0x40. Vérifiez chaque connexion de signal.
Cas C: Raspberry Pi redémarre lorsque les servos bougent.
Cause: Chute de tension sur la ligne 5V alimentant le Pi (même si vous utilisez une alimentation externe, un problème GND partagé peut provoquer un back-feeding).
Réparer: ajoutez un grand condensateur (1 000 à 2 200 µF) aux bornes d'alimentation externe ; utilisez un 5 V séparé pour Pi (Pi alimenté via USB‑C ou micro‑USB, pas à partir de l'alimentation du servo, sauf si l'alimentation est très stable).
Pour tout projet comportant plus de 3 servos, utilisez toujours un PCA9685 (ou un pilote PWM 16 canaux équivalent).Cela élimine la gigue de synchronisation et protège votre Raspberry Pi.
Investissez dans une alimentation externe 5V appropriée– calculez le courant comme (0,5 A par servo) × nombre de servos + 20 % de marge.
Créer un terrain d'ententeentre le Pi, la carte pilote et l’alimentation externe – c’est la cause de panne la plus négligée.
Commencez par un test simple– contrôlez un seul servo via le driver, puis ajoutez-en d'autres un par un.
Utilisez le code fourni comme référenceet ajustez les angles et les retards en fonction de votre conception mécanique.
À retenir: Contrôler plusieurs servos avec un Raspberry Pi ne concerne pas les connexions GPIO directes. Il s'agit de déléguer la génération PWM à un pilote dédié et de fournir une alimentation indépendante et stable. En suivant les règles de câblage et d'alimentation ci-dessus, vous pouvez contrôler de manière fiable jusqu'à 16 servos pour bras de robot, hexapodes, cardans de caméra ou tout projet multi-servo. Testez d’abord votre configuration électrique, puis augmentez-la : cette approche a été éprouvée dans des centaines de versions de loisirs et éducatives.
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.