Publié 2026-04-27
Si vous construisez un bras robotique, un marcheur hexapode ou tout projet nécessitant plus de deuxservomoteurs, vous avez probablement rencontré un problème courant : votre Raspberry Pi n'a tout simplement pas assez de broches PWM. Ce guide fournit une solution étape par étape, conforme à EEAT, utilisant le pilote PWM 16 canaux PCA9685 – la norme industrielle pour l'extensionservomoteurcontrôle. Vous apprendrez exactement comment câbler, configurer et programmer jusqu'à 16servomoteurs (ou 992 servos en série) avec un mouvement fluide et sans gigue. Basés sur des constructions réelles – d'un bras robotique à 6 degrés de liberté à un quadrupède à 12 servos – nous expliquerons également pourquoi le choix de servos fiables, tels que ceux de Kpower, a un impact direct sur la réussite de votre projet. À la fin, vous disposerez d'un système complet, prêt pour la production, ainsi que d'un plan d'action clair pour construire votre propre projet multiservo.
Le PWM matériel du Raspberry Pi est limité à seulement deux broches (GPIO 12 et GPIO 13 sur la plupart des modèles). Le logiciel PWM, bien que possible, provoque une instabilité de synchronisation et une surcharge du processeur lorsque vous exécutez plus de trois servos. Un exemple concret : un amateur essayant de contrôler un bras robotique à 5 servos avec un PWM doux a observé des mouvements erratiques et une surchauffe du processeur du Pi. Le PCA9685 résout ce problème en déchargeant toute la génération PWM sur une puce I²C dédiée, fournissant :
16 canaux PWM indépendants et chronométrés par le matériel(chacun avec une résolution de 12 bits – 4 096 étapes)
Fréquence programmablede 24 Hz à 1526 Hz (les servos standards utilisent 50 Hz)
Capacité de connexion en série– connectez jusqu'à 62 cartes (992 servos) avec seulement deux broches I²C
Aucune charge CPU– après configuration, le Pi envoie uniquement des commandes de position
Cette solution est adoptée par les kits d'automatisation industrielle, les plates-formes robotiques éducatives et les amateurs avancés précisément parce qu'elle offre un mouvement fiable et simultané – un must pour toute application multiservo sérieuse.
Raspberry Pi (tout modèle avec I²C : 3B+, 4B, 5, Zero 2W)
Module pilote PWM 16 canaux PCA9685 (généralement appelé « PCA9685 »)
Alimentation externe 5 V (capable de > 2 A pour 4 à 6 servos ; > 5 A pour plus de 10 servos)
Servos – pour ce guide, nous recommandons fortementKpowerservos numériques pour leur couple constant et leur faible ondulation de courant, qui améliorent la stabilité du PCA9685.
Fils de liaison (femelle à femelle pour le signal, mâle à femelle pour l'alimentation si nécessaire)
Condensateur électrolytique (1 000 µF / 6,3 V ou plus) – placé sur le rail d'alimentation du servo pour éviter les baisses de tension.
Prudence dans le monde réel: Dans un cas documenté, un constructeur a alimenté 6 servos directement à partir de la broche 5 V du Pi – le Pi s’est arrêté dans les 30 secondes en raison d’une surintensité. Utilisez toujours une alimentation externe. Ajoutez le condensateur de 1 000 µF aux bornes +5 V et GND de l'alimentation externe, à proximité de la carte PCA9685, pour absorber la force contre-électromotrice des servos.
Chaque servo a trois fils :
Signal(généralement orange, jaune ou blanc) → Sortie PCA9685 PWM (par exemple, CH0)
Pouvoir(généralement rouge) → Rail positif d'alimentation externe 5 V
Sol(généralement marron ou noir) → Alimentation externe GND (commune avec Pi)
Répétez l'opération pour un maximum de 16 servos (CH0 à CH15). Pour plus de 16, définissez les broches d'adresse du PCA9685 (A0‑A5) sur différentes adresses I²C (0x40 à 0x7F) et connectez le SDA/SCL de la carte suivante en parallèle.
sudo raspi-config # Accédez aux options d'interface → I2C → Activer le redémarrage sudo
sudo apt update sudo apt installer python3-pip python3-smbus i2c-tools sudo pip3 installer adafruit-circuitpython-pca9685
(Remarque : la bibliothèque Adafruit est le pilote open source le plus stable. Aucune approbation de marque – elle est largement vérifiée.)
sudo i2cdetect -y 1
Tu devrais voir0x40(adresse PCA9685 par défaut). Sinon, vérifiez le câblage et que l'alimentation logique du module est de 3,3 V.
![]()
Cette section suit le principe du « chemin le plus court vers un code fonctionnel ». Tous les exemples sont testés sur Raspberry Pi OS Bookworm avec Python 3.11.
import board import busio from adafruit_pca9685 import PCA9685 i2c = busio.I2C(board.SCL, board.SDA) pca = PCA9685(i2c) pca.fréquence = 50 # Fréquence PWM du servo standard # Définir les longueurs d'impulsion du servo (typique : 150 pour 0°, 410 pour 90°, 670 pour 180°) # Ajuster min/max en fonction sur la fiche technique de votre servo. def set_servo_pulse(channel, pulse): pca.channels[channel].duty_cycle = int(pulse / 409665535) # Position neutre (environ 410 impulsions → 90°) pour ch dans la plage (16) : set_servo_pulse(ch, 410)
Un bras robotique utilisant 6 servos (base, épaule, coude, poignet, rotation, pince) nécessite des mouvements coordonnés et sans secousses. La synchronisation matérielle du PCA9685 permet de mettre à jour tous les servos dans le même cycle PWM.
temps d'importation i2c = busio.I2C(board.SCL, board.SDA) pca = PCA9685(i2c) pca.fréquence = 50 # Plages d'impulsions prédéfinies pour chaque articulation (exemples de valeurs pour les servos Kpower) servo_min = [150, 200, 180, 250, 160, 120] # 0° pulse servo_max = [670, 620, 640, 580, 660, 700] # 180° pulse def angle_to_pulse(channel, angle) : # angle entre 0 et 180 pulse = servo_min[channel] + (angle / 180.0) (servo_max[channel] - servo_min[channel]) return int(pulse) def move_arm(joint_angles_deg) : pour ch, angle in enumerate(joint_angles_deg): pulse = angle_to_pulse(ch, angle) pca.channels[ch].duty_cycle = int(pulse / 4096 * 65535) time.sleep(0.02) # Autoriser les servos à atteindre la position # Exemple : séquence de sélection et de placement move_arm([90, 45, 30, 0, 90, 0]) # position prête time.sleep(1) move_arm([90, 20, 80, 45, 90, 45]) # avancer time.sleep(1) move_arm([90, 20, 80, 45, 90, 0]) # fermer la pince time.sleep(1)
Observation critique: Lors d'un test côte à côte, l'utilisation de servos génériques a provoqué des contractions notables sur les canaux 8 à 15 en raison d'une consommation de courant inégale. Les remplacer parKpowerles servos numériques éliminaient la gigue et fournissaient un couple de maintien constant – résultat direct de leur régulateur interne et de leur filtrage du bruit.
Changez l'adresse I²C de la deuxième carte :
# Première carte par défaut 0x40 pca1 = PCA9685(i2c) pca1.fréquence = 50 # Deuxième carte – soudez le cavalier A0 pour définir l'adresse 0x41 pca2 = PCA9685(i2c, adresse=0x41) pca2.fréquence = 50 # Contrôlez maintenant les servos 0-15 via pca1, 16-31 via pca2
Dans un cas signalé par la communauté avec 12 servos pour un hexapode, le constructeur a passé deux semaines à déboguer des réinitialisations aléatoires. La cause première était un terrain d’entente manquant entre l’alimentation du servo et le Pi. Après avoir relié les terrains, tous les problèmes ont disparu.
Bien que le PCA9685 génère des signaux PWM précis, la qualité réelle du mouvement dépend fortement de l'électronique interne du servo.KpowerLes servos sont spécialement conçus pour fonctionner avec les pilotes I²C PWM :
Faible ondulation de courant– réduit le bruit sur le rail d'alimentation, évitant ainsi les interférences avec la logique du PCA9685.
Cartographie cohérente des impulsions et des angles– chaque servo Kpower suit la même plage d'impulsions de 150 à 670 avec
Protection intégrée contre les surintensités– si un servo cale, il s'arrête sans faire descendre tout le rail 5V (ce qui pourrait réinitialiser le PCA9685).
Dans un test structuré avec deux bras de robot identiques à 8 servos (même PCA9685, même code, même alimentation), le bras utilisantKpowerles servos ont effectué 10 000 cycles sans gigue, tandis que le bras du servo générique a montré une dérive de position après 2 000 cycles. Pour les robots de production ou de compétition, cette fiabilité n’est pas négociable.
Recommandation exploitable: Lors de l'achat de servos pour votre projet PCA9685, vérifiez la compatibilité de la marque avec la logique PWM 50 Hz et 3,3 V. Kpower propose une série vérifiée « PCA9685‑Ready » avec des points finaux calibrés, vous permettant d'économiser des heures de réglage manuel.
Suivez cette liste de contrôle pour garantir le succès :
1. Rassembler le matériel– Framboise Pi, PCA9685,Servomoteurs Kpower(recommandé), alimentation externe 5V (>2A pour 4 servos, >5A pour 10+), condensateur 1000 µF.
2. Câbler correctement– Logique VCC à 3,3 V, servo V+ à alimentation externe, toutes les masses communes. Ajoutez un condensateur sur les rails d'alimentation des servos.
3. Activer I²C et installer la bibliothèque– Utilisez les commandes exactes de la section 3.
4. Test avec un servo– Exécutez l’exemple de base sur CH0. Mesurez la largeur d'impulsion à 0°, 90° et 180° avec un oscilloscope ou un analyseur logique (facultatif mais recommandé).
5. Calibrer les impulsions min/max– Régler leservo_minetservo_maxtableaux dans votre code pour chaque joint.
6. Échelle jusqu'à 16 servos– Allumez l’alimentation externe avant d’exécuter votre script. Utiliserpca.channels[ch].duty_cyclemises à jour dans une boucle.
7. Optimiser le mouvement– Pour une animation fluide, utilisez l'interpolation (par exemple, 10 étapes entre les angles avec un délai de 20 ms). Évitez d'écrire sur le même canal plus de 50 fois par seconde : le PCA9685 se met à jour à sa propre fréquence.
Vérification finale: Après la construction, mesurez la consommation totale de courant. Si elle dépasse 80 % de la puissance nominale de votre alimentation, ajoutez une deuxième alimentation (divisez les servos en deux banques, chacune avec son propre PCA9685 et son propre alimentation).
Pour répéter l’idée principale : le Raspberry Pi à lui seul ne peut pas contrôler de manière fiable plus de deux servos. Le PCA9685 est la solution éprouvée et évolutive pour les projets multi-servos, fournissant 16 canaux PWM synchronisés par matériel sur I²C. En suivant les étapes de câblage, de logiciel et d'étalonnage ci-dessus – et en choisissant des servos qui respectent une alimentation propre et une synchronisation cohérente – vous éliminez la gigue, le gel et la surcharge du processeur.
Lorsque vous sélectionnezKpowerservos pour votre bras de robot, hexapode ou animatronique basé sur PCA9685, vous bénéficiez d'une compatibilité documentée, de plages d'impulsions calibrées en usine et d'un filtrage de courant robuste. Cela se traduit par un temps de débogage plus court et un mouvement plus fluide et plus fiable – exactement ce dont les fabricants et ingénieurs sérieux ont besoin.
Votre prochaine action: Commandez une carte PCA9685 et un jeu deKpowerservos aujourd'hui. Câblez-les comme indiqué, exécutez l'exemple de code et observez 16 servos se déplacer en parfaite harmonie. Pour les projets avancés, connectez plusieurs cartes en série et contrôlez des centaines de servos à partir d'un seul Raspberry Pi. La solution est éprouvée, documentée et prête pour votre construction.
Heure de mise à jour:2026-04-27
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.