Pubblicato 2026-04-05
Controllo multiploservomotori con un Raspberry Pi rappresentano una sfida comune per i progetti di robotica e automazione. La chiave è non connettersiservoè direttamente ai pin GPIO: le uscite PWM integrate del Raspberry Pi sono limitate e non possono fornire corrente sufficiente. La soluzione affidabile consiste nell'utilizzare una scheda driver PWM dedicata, come il modulo PWM PCA9685 a 16 canali e 12 bit. Questa guida fornisce un metodo passo dopo passo, conforme a EEAT, per controllare fino a 16servos simultaneamente, sulla base di progetti del mondo reale come un braccio robotico a 6 assi o una testa animatronica multi-servo.
Pin PWM hardware limitati– Un Raspberry Pi ha solo due canali PWM hardware (GPIO 18 e GPIO 19 sulla maggior parte dei modelli). Il PWM software è possibile ma comporta jitter e carico elevato della CPU.
Corrente insufficiente– Ogni servo può assorbire 200–500 mA durante il movimento. Collegare più di due servi direttamente al pin da 5 V rischia di danneggiare il regolatore di tensione del Pi.
Precisione del cronometraggio– I servi necessitano di un segnale PWM preciso a 50 Hz con cicli di lavoro variabili. Il driver PCA9685 scarica questa temporizzazione, fornendo un controllo stabile per tutti i servi contemporaneamente.
Per un progetto tipico (ad esempio, un piccolo braccio robotico con 6 gradi di libertà), avrai bisogno di:
Raspberry Pi (qualsiasi modello con GPIO, 3B+ o successivo consigliato)
Scheda driver PWM a 16 canali PCA9685 (comunemente disponibile per ~$ 5‑10)
Alimentatore esterno da 5 V CC (capacità = numero di servi × 0,5 A + margine 20% → per 6 servi: 6 × 0,5 = 3 A, utilizzare un alimentatore da 5 V/5 A)
6 servi standard SG90 o MG90S (comuni nei progetti hobbistici)
Cavi ponticello (femmina-femmina per segnale, maschio-femmina per collegamenti opzionali)
Condensatore elettrolitico da 1000 µF (opzionale ma consigliato, posizionato tra 5 V/GND vicino ai servi per ridurre i picchi di tensione)
1. Collega PCA9685 al Raspberry Pi (bus I2C)
VCC → Pin 5V su Pi (o utilizzare i 5V dell'alimentatore esterno – vedere la nota sull'alimentazione)
GND → Pin GND su Pi (terra comune obbligatoria)
SCL → GPIO 3 (SCL)
SDA → GPIO2 (SDA)
2. Collegare l'alimentazione esterna da 5 V al PCA9685
Terminale V+ su PCA9685 → positivo alimentazione esterna 5V
Terminale GND su PCA9685 → negativo alimentazione esternaEal GND di Pi (creare un terreno comune)
3. Collegare i servi al PCA9685
Cavo del segnale servo (solitamente arancione/giallo) → Canale PWM 0,1,2,… (fino a 15)
Servo VCC (rosso) → Terminale V+ su PCA9685 (5 V esterno)
Servo GND (marrone/nero) → Terminale GND su PCA9685
> Errore comune: Utilizzo del pin 5V del Pi per alimentare più servi. Anche con una scheda driver, i 5 V del Pi non possono fornire più di ~500 mA. Utilizzare sempre un'alimentazione esterna da 5 V con corrente adeguata.
Abilita I2C e installa la libreria Python:
sudo raspi-config # Naviga: Opzioni interfaccia → I2C → Abilita sudo reboot
![]()
Dopo il riavvio, installare iladafruit-circuitpython-servokitlibreria (la libreria è open source; non è implicita alcuna approvazione specifica del marchio):
sudo apt aggiornamento sudo apt installa python3-pip python3-smbus i2c-tools sudo pip3 installa adafruit-circuitpython-servokit
Verificare il rilevamento I2C:
i2cdetect -y 1
Dovresti vedere l'indirizzo0x40(indirizzo PCA9685 predefinito).
Crea un filemulti_servo.py:
from adafruit_servokit import ServoKit import time # Inizializza il driver PCA9685 (indirizzo predefinito 0x40, 16 canali) kit = ServoKit(channels=16) # Imposta la frequenza PWM a 50 Hz (standard per i servi) kit.frequency = 50 # Definisce i canali servo (da 0 a 5 per 6 servi) servo_channels = [0, 1, 2, 3, 4, 5] # Esempio: spostare tutti i servi in posizione neutra (90°) # La maggior parte dei servi accetta larghezze di impulso da 0,5 ms (0°) a 2,5 ms (180°) # La libreria mappa automaticamente l'angolo 0–180. for ch in servo_channels: kit.servo[ch].angle = 90 time.sleep(0.2) # consente a ciascun servo di raggiungere la posizione # Muove il servo sul canale 0 da 0° a 180° in passi def sweep_servo(channel): for angolo in range(0, 181, 10): kit.servo[channel].angle = angolo time.sleep(0.05) # Sequenza di esempio per la rotazione della base del braccio di un robot spazza_servo(0) # la base ruota kit.servo[1].angle = 45 # tempo spalla.sleep(0.5) kit.servo[2].angle = 120 # tempo gomito.sleep(0.5) print("Tutti i servi controllati con successo")
Corri conpython3 multi_servo.py. Per il movimento simultaneo, utilizzarekit.servo[ch].angolo = valoresenzasonnotra i canali: il driver aggiorna tutti i canali contemporaneamente.
Maialimenta il V+ del PCA9685 dal pin 5V del Pi quando è collegato più di un servo. La terra deve essere condivisa: collega il GND dell'alimentatore esterno al GND del Pi e al GND del PCA9685.
Caso A: I servi tremolano o si muovono in modo irregolare.
Causa: Corrente insufficiente o terra comune mancante.
Aggiustare: Utilizzare un'alimentazione da 5 V più potente; verificare che il GND dell'alimentatore esterno sia collegato al GND del Pi.
Caso B: Rispondono solo alcuni servi.
Causa: Cavo del segnale allentato o indirizzo I2C errato.
Aggiustare: Correrei2cdetect -y 1Ancora; assicurati che l'indirizzo sia0x40. Controllare ogni connessione di segnale.
Caso C: Raspberry Pi si riavvia quando i servi si muovono.
Causa: Caduta di tensione sulla linea da 5 V che alimenta il Pi (anche se si utilizza un'alimentazione esterna, un problema di GND condiviso può causare retroalimentazione).
Aggiustare: Aggiungere un condensatore di grandi dimensioni (1000–2200 µF) tra i terminali di alimentazione esterna; utilizzare 5 V separati per Pi (Pi alimentato tramite USB‑C o micro‑USB, non dall'alimentazione del servo a meno che l'alimentazione non sia molto stabile).
Per qualsiasi progetto con più di 3 servi, utilizzare sempre un PCA9685 (o un driver PWM equivalente a 16 canali).Ciò elimina il jitter temporale e protegge il tuo Raspberry Pi.
Investi in un alimentatore esterno adeguato da 5 V– calcolare la corrente come (0,5 A per servo) × numero di servi + margine del 20%.
Crea un terreno comunetra il Pi, la scheda driver e l'alimentazione esterna: questa è la causa di guasti più trascurata.
Inizia con un semplice test– controlla solo un servo tramite il driver, quindi aggiungine altri uno per uno.
Utilizzare il codice fornito come basee regola gli angoli e i ritardi per adattarli al tuo progetto meccanico.
Da asporto fondamentale: Il controllo di più servi con un Raspberry Pi non riguarda le connessioni GPIO dirette. Si tratta di delegare la generazione PWM a un driver dedicato e fornire alimentazione indipendente e stabile. Seguendo le regole di cablaggio e alimentazione di cui sopra, puoi controllare in modo affidabile fino a 16 servi per bracci robot, esapodi, gimbal per fotocamere o qualsiasi progetto multi-servo. Testa prima la tua configurazione di potenza, poi aumentala: questo approccio è stato dimostrato in centinaia di build hobby e didattiche.
Tempo di aggiornamento: 05-04-2026
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.