Casa > Approfondimenti sul settore >BLDC
SUPPORTO TECNICO

Supporto al prodotto

Controllare 20 servi con un Raspberry Pi: una guida completa passo dopo passo

Pubblicato 2026-04-08

Questa guida fornisce una soluzione pratica e testata sul campo per controllare fino a 20 dispositiviservoSta utilizzando contemporaneamente un computer a scheda singola come il Raspberry Pi. Collegamento diretto di più di dueservos ai pin GPIO provoca cadute di tensione, conflitti di temporizzazione PWM e danni alla scheda. Il metodo affidabile utilizza un modulo driver PWM dedicato (ad esempio PCA9685). Di seguito troverai l'esatta configurazione dell'hardware, gli schemi elettrici, i calcoli della potenza, il codice Python e i passaggi per la risoluzione dei problemi, tutti basati su comuni progetti di robotica e animatronica del mondo reale.

01Perché non riesci a connetterti 20servos Direttamente al GPIO

Limite attuale: Ciascun pin GPIO fornisce un massimo di 16 mA, mentre un servo standard assorbe 150–500 mA durante lo spostamento. 20 servi richiederebbero oltre 10 A, ben oltre la capacità del rail di 3,3 V/5 V della scheda.

Limite hardware PWM: Raspberry Pi ha solo due canali PWM hardware (GPIO 18 e 19). Il software PWM su altri pin introduce jitter e sovraccarico della CPU per 20 servi.

Crollo della tensione: Il funzionamento di 20 servi dal pin da 5 V della scheda causerà un immediato calo di tensione, ripristinando il sistema.

02Panoramica della soluzione principale

Usa unModulo driver PWM basato su I²C(PCA9685 a 16 canali è lo standard del settore). Collega due di questi moduli (ciascuno gestisce fino a 16 servi) o un modulo più un multiplexer. Questa guida utilizza due schede PCA9685 (totale 32 canali, utilizzandone solo 20).

03Componenti richiesti (nessun marchio)

1 computer a scheda singola (Raspberry Pi 3B+ o successivo)

2 schede driver PWM PCA9685 a 16 canali e 12 bit

20 servi standard da 5 V (ad esempio SG90, MG90S o MG996R – scegli in base alle esigenze di coppia)

1 alimentatore esterno da 5 V CC – calcolare la corrente: 20 servi × 0,5 A = 10 A minimo. Utilizzare unAlimentazione regolata da 5 V da 10 A a 15 A.

Condensatori: 2 elettrolitici da 1000 µF (≥10 V) per il livellamento della potenza

Cavi ponticello (femmina-femmina per I²C, maschio-femmina per collegamenti servo)

Breadboard o morsettiere per la distribuzione dell'energia

04Schema elettrico (passo dopo passo)

Passaggio 1: connessione I²C tra Raspberry Pi e il primo PCA9685

Pi 3,3 V → VCC di PCA9685 (Nota: alcuni moduli accettano logica a 5 V; controlla il tuo modulo. Per i moduli con logica a 5 V, utilizza i 3,3 V di Pi solo se il modulo tollera 3,3 V. Più sicuro: collega VCC al pin 5 V di Pi solo se la scheda tecnica del modulo conferma la tolleranza a 5 V. La maggior parte delle schede PCA9685 funziona con logica I²C a 3,3 V ma necessita di 5 V per il servo V+ – vedere prossimo passo.)

Cablaggio standard corretto (per il 99% delle schede PCA9685):

Pi 5 V (pin 2 o 4) → PCA9685 VCC (alimentazione per la logica del chip – sì, molti funzionano con logica a 5 V)

Pi GND → PCA9685 GND

Pi SDA (GPIO 2) → PCA9685 SDA

Pi SCL (GPIO 3) → PCA9685 SCL

Passaggio 2: alimentazione esterna per i servi

Alimentazione esterna da 5 V (10 A+) positivo (+) → Terminale PCA9685 V+ (spesso etichettato come "V+" o "alimentazione servo")

Alimentazione esterna GND → PCA9685 GND (deve condividere la terra comune con Pi – collegare Pi GND a PCA9685 GND come già fatto sopra)

Posiziona un condensatore da 1000 µF tra V+ e GND vicino al PCA9685 per assorbire i picchi di back‑EMF.

Passaggio 3: collegamento dei servi

Guida rossa (alimentazione) di ogni servo → PCA9685 V+ (utilizzare una guida di alimentazione breadboard)

Servo marrone/nero (GND) → Guida GND PCA9685

Servo arancione/giallo (segnale) → Pin di uscita PWM PCA9685 (da 0 a 15 sulla prima scheda, da 0 a 3 sulla seconda scheda)

Passaggio 4: secondo PCA9685

Imposta l'indirizzo I²C della seconda scheda: saldare i ponticelli dell'indirizzo. L'indirizzo predefinito di PCA9685 è 0x40. Per la seconda scheda: saldare il ponticello A0 → l'indirizzo diventa 0x41.

Collega SDA/SCL/GND/VCC della seconda scheda in parallelo alla prima scheda (stesso bus I²C).

Collega il suo V+ alla stessa alimentazione esterna da 5 V.

05Configurazione del software (sistema operativo Raspberry Pi, comandi del terminale)

Abilita I²C sul Pi:

sudo raspi-config # Opzioni interfaccia → I2C → Sì sudo reboot

Installa le librerie richieste:

sudo apt aggiornamento sudo apt installa python3-pip python3-smbus i2c-tools sudo pip3 installa adafruit-circuitpython-pca9685

Verifica i dispositivi I²C:

sudo i2cdetect -y 1

Dovresti vedere 0x40 e 0x41 (se la seconda scheda è indirizzata correttamente).

06Codice Python per controllare 20 servi in ​​modo indipendente

Crea un fileservo_controllo.py:

import time import board import busio from adafruit_pca9685 import PCA9685 # Inizializza bus I2C i2c = busio.I2C(board.SCL, board.SDA) # Primo PCA9685 all'indirizzo 0x40 pca1 = PCA9685(i2c, indirizzo=0x40) pca1.frequency = 50 # 50Hz per servi standard # Secondo PCA9685 all'indirizzo 0x41 pca2 = PCA9685(i2c, indirizzo=0x41) pca2.frequency = 50 # Intervallo di larghezza dell'impulso del servo (tipico da 500 a 2500 microsecondi) # Converti in duty cycle: duty = Pulse_us / 2000065535 def angolo_to_duty(angolo, min_us=500, max_us=2500): impulso = min_us + (angolo / 180.0)(max_us - min_us) return int((pulse / 20000.0) * 65535) # Controlla qualsiasi servo tramite scheda e canale def set_servo(board, channel, angolo): if angolo 180: angolo = 180 board.channels[canale].duty_cycle = angolo_to_duty(angolo) # Esempio: sposta tutti i 20 servi a 90° servos = [(pca1, i) for i in range(16)] + [(pca2, i) for i in range(4)] # totale 20 per board, ch in servos: set_servo(board, ch, 90) time.sleep(0.01) # sfasamento per ridurre il picco di corrente # Sweep servo su board1 channel0 da 0 a 180 print("Sweep servo on board1 ch0") for angolo in range(0, 181, 10): set_servo(pca1, 0, angolo) time.sleep(0.05) # Rilascia tutti i servi (interrompe l'invio di PWM) - importante per prevenire il jitter pca1.deinit() pca2.deinit()

07Gestione energetica: la parte più critica

Un caso reale: un hobbista una volta ha collegato 10 servi direttamente a un alimentatore da 5 V/3 A. Durante il movimento simultaneo, la tensione è scesa a 3,8 V, i servi si sono bloccati e il Raspberry Pi si è riavviato. Soluzione:Utilizzare un'alimentazione regolata da 5 V/15 A(ad esempio, un alimentatore LED o il binario da 5 V dell'alimentatore ATX del computer). Aggiungerecondensatori di grandi dimensioni(1000μF per 5-8 servi) vicino a ciascuna scheda driver.

Regola attuabile: Calcola la corrente massima simultanea. Se tutti e 20 i servi si muovono contemporaneamente, supponiamo 10A. Per sicurezza, aggiungi un margine del 30% →13A minimo. Utilizzare cavi da 14 AWG o più spessi per la distribuzione dell'alimentazione.

08Calibrazione delle larghezze degli impulsi del servo

Non tutti i servi hanno lo stesso impulso minimo/massimo. Valori comuni:

500 µs (0°) – 2500 µs (180°) per servi analogici

600 µs (0°) – 2400 µs (180°) per molti servi digitali

Per calibrare: scrivere uno script di test che spazia da 300 a 2700 µs, trovare i limiti meccanici, quindi aggiornaremenoEmax_usnella funzione sopra.

09Problemi comuni e soluzioni

Problema Causa più probabile Aggiustare
I servi si contraggono o non si muovono Corrente di alimentazione insufficiente Passa all'alimentazione da 15 A, utilizza cavi più corti e spessi
Raspberry Pi si riavvia all'avvio dei servi Caduta di tensione sulla linea 5V Utilizzare l'alimentazione esterna solo per i servi, mantenere il Pi alimentato separatamente (tramite USB-C)
Funzionano solo 16 servi, non 20 Seconda scheda non rilevata Controllare l'indirizzo I²C (usarei2cdetect -y 1), garantire le connessioni SDA/SCL
I servi si muovono ma tremolano Manca un terreno comune Collegare insieme il Pi GND al PCA9685 GND e l'alimentazione esterna GND
Un servo non risponde Cavo o canale del segnale difettoso Scambiare con un servo funzionante noto sullo stesso canale per isolare

10Ottimizzazione delle prestazioni per 20 servi

Movimento sfalsato: Non comandare a tutti i servi di cambiare angolo esattamente allo stesso microsecondo. Aggiungeretempo.sonno(0,005)tra ciascunoset_servochiamata. Ciò riduce la corrente di picco distribuendo il carico.

Tasso di aggiornamento: 50 Hz (periodo di 20 ms) è standard. Non aumentare la frequenza oltre i 100 Hz: la maggior parte dei servi si surriscalderà.

Utilizzo della CPU: L'hardware PCA9685 genera PWM in modo indipendente. Il tuo script Python invia solo comandi I²C ogni volta che cambi angolo. Per le posizioni statiche, lo script può uscire: i servi mantengono l'ultima posizione finché viene applicata l'alimentazione.

11Piano d'azione completo per implementarlo oggi

1. Ordinare i componenti– Due schede PCA9685, 20 servi, alimentazione 5V/15A, condensatori da 1000μF.

2. Prova con un servo– Collegare un singolo servo al primo PCA9685, eseguire il codice di scansione.

3. Aggiungi l'alimentatore– Collegare 5 V/15 A esterni alla guida V+, verificare che il servo si muova con forza.

4. Scala fino a 5 servi– Aggiungere gradualmente più servi, monitorando la temperatura dei cavi di alimentazione.

5. Aggiungi il secondo PCA9685– Impostare l'indirizzo su 0x41, collegare 4 servi, testare.

6. Test completo di 20 servi– Esegui il codice fornito spostando tutti i servi a 90°, quindi una scansione lenta di tutti i canali.

12Chiave da asporto

Non puoi controllare 20 servi direttamente dal GPIO di un Raspberry Pi: utilizza le schede driver PWM PCA9685 con un alimentatore dedicato da 5 V ad alta corrente.Questo metodo viene utilizzato in migliaia di veri animatronici, robot esapodi e progetti di automazione. È affidabile, scalabile e ben documentato. Inizia con un piccolo test, verifica la stabilità della potenza, quindi aumenta la potenza. Il tuo successo dipende da una corretta messa a terra e da un amperaggio sufficiente: entrambi non sono negoziabili.

Ora agisci: collega un PCA9685 con un singolo servo e un'alimentazione esterna da 5 V. Una volta che funziona, aggiungi il resto. Avrai un sistema stabile a 20 servo entro due ore dall'assemblaggio.

Tempo di aggiornamento: 08-04-2026

Alimentare il futuro

Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.

Invia una e-mail a Kpower
Invia richiesta
+86 0769 8399 3238
 
kpowerMap