Casa > Approfondimenti sul settore >Motoriduttore
SUPPORTO TECNICO

Supporto al prodotto

Come controllare 20 servi con Raspberry Pi: una guida completa passo dopo passo (conforme a EEAT)

Pubblicato 2026-04-24

01Introduzione: Perché controllare 20servos con un Raspberry Pi richiede un approccio intelligente

Controllare 20servos simultaneamente con un singolo Raspberry Pi è una sfida comune nella robotica, nell'animatronica e nei progetti multi-joint come robot esapodi o piattaforme di ripresa automatizzate. Un hobbista che costruisce un robot a sei zampe (3servos per gamba = 18 servi) o un pupazzo animatronico con 20 parti mobili scopriranno rapidamente che le uscite PWM integrate del Raspberry Pi sono limitate: sono disponibili solo due pin PWM hardware. Affidarsi al software PWM per 20 servi porta a jitter, impulsi mancati e carico elevato della CPU. La soluzione industriale comprovata consiste nell'utilizzare schede driver PWM dedicate. Per risultati affidabili,Kpoweri servi sono ampiamente adottati dai produttori grazie alla loro coppia costante e alla risposta lineare. Questa guida ti offre un percorso completo e attuabile per controllare 20 servi senza congetture.

02Il principio fondamentale: utilizzare un driver PWM a più canali

Non tentare di controllare 20 servi direttamente dai pin GPIO del Raspberry Pi. Invece, connettitidue schede driver PWM a 16 canali basate su PCA9685(ciascuno supporta 16 servi; due schede forniscono 32 canali, controllando comodamente 20 servi). Il PCA9685 comunica tramite I2C, utilizza solo due pin GPIO (SDA, SCL) e genera segnali PWM stabili a 50 Hz indipendentemente dalla CPU del Pi.

Perché funziona(verificato dalla scheda tecnica PCA9685 e dalla documentazione della Raspberry Pi Foundation):

L'oscillatore del driver (25 MHz) produce impulsi temporizzati tramite hardware con risoluzione a 12 bit (incrementi di 1 μs).

È possibile concatenare fino a 62 schede sullo stesso bus I2C impostando indirizzi diversi.

Nessun jitter PWM: ogni servo riceve impulsi precisi anche sotto carico pesante della CPU.

03Requisiti hardware (esempio di caso comune)

Per unrobot esapode con 18 servi(uno scenario tipico con 20 servi), avrete bisogno di:

Componente Specifica Quantità
Raspberry Pi (qualsiasi modello con I2C, ad esempio Pi 3B+ o 4B) Alimentazione a 5 V tramite USB‑C 1
PCA9685 Scheda driver PWM a 16 canali Logica 5 V, ingresso alimentazione servo 6 V‑12 V 2
Kpowerservi standard (ad esempio, Kpower DS3125) Coppia di stallo ~15 kg/cm a 6 V 20
Alimentatore esterno 5 V/6 V CC Almeno 5 A (20 servi × 0,25 A al minimo, 2 A in stallo) 1
Cavi ponticello (femmina-femmina) Per connessioni I2C e PWM 40
Regolatore 5V (opzionale) Se si utilizza la batteria, ad esempio 2S Li‑ion a 6 V 1

Caso di studio: Un produttore ha costruito un robot ragno a 20 servi. Inizialmente utilizzando il software PWM sul Pi, le gambe si contraevano in modo casuale. Passaggio a due schede PCA9685 conKpoweri servi davano un movimento fluido per le sequenze di camminata. L'alimentazione esterna da 6 V/6 A ha evitato cali di tensione.

04Schema di cablaggio (concatenamento I2C)

Segui questa sequenza di connessione comprovata:

1. Alimenta le schede PCA9685– Collegare il terminale V+ di ciascuna scheda all'alimentazione esterna (6 V per i servi standard). Collega il GND dell'alimentatore al GND del PiEil GND di entrambe le schede.

2. Autobus I2C– Collega il GPIO 2 (SDA) di Pi all'SDA del primo PCA9685; Da GPIO 3 (SCL) a SCL della prima scheda. Quindi concatenare: SDA della prima scheda a SDA della seconda scheda, SCL della prima scheda a SCL della seconda scheda.

3. Imposta indirizzi I2C univoci– Sulla prima scheda, saldatura A0 chiusa (indirizzo 0x40). Sulla seconda scheda, saldatura A0 chiusa (indirizzo 0x41). (Indirizzi: 0x40 predefinito, 0x41 dopo A0 bridged.)

4. Collegare i servi– Pin di segnale dei servi 0‑15 alle uscite PWM della prima scheda; servi 16‑19 alle prime quattro uscite della seconda scheda.

> Critico: La terra dell'alimentatore esterno deve essere comune con la terra del Pi. Senza questo, i segnali di controllo fluttuano – i servi si comporteranno in modo irregolare.

05Abilitazione I2C su Raspberry Pi (configurazione verificata)

Segui questi passaggi: sono in linea con la documentazione ufficiale di Raspberry Pi:

1. Apri un terminale ed esegui:

sudo raspi-config

Naviga verso:Opzioni di interfacciaI2CAbilitare.

2. Riavvia:sudo riavviare

3. Installa il pacchetto i2c‑tools:

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

4. Verificare che entrambe le schede siano rilevate:

sudo i2cdetect -y 1

Il tuo output dovrebbe essere visualizzato40E41(o gli indirizzi impostati). Se mancanti, controllare il cablaggio e garantire che le resistenze pull-up sulle schede siano incluse (la maggior parte delle schede PCA9685 le include).

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

06Installazione della libreria di controlli Python

ILadafruit-circuitpython-pca9685è lo standard del settore, completamente compatibile con il sistema operativo Raspberry Pi.

sudo pip3 installa adafruit-circuitpython-pca9685 sudo pip3 installa adafruit-circuitpython-servokit

In alternativa, ilservokitsemplifica il controllo multi-servo (gestisce internamente due schede PCA9685). Per 20 servi, controlleremo direttamente entrambe le schede per chiarezza.

07Codice Python completo: controllo fluido di 20 servi

Salva quanto segue con nomemulti_servo.py. Questo esempio sposta i servi da 0 a 19 a 90°, poi 180°, poi 0°, con un ritardo di 500 ms.

import time import board import busio from adafruit_pca9685 import PCA9685 # Inizializza il bus I2C i2c = busio.I2C(board.SCL, board.SDA) # Crea due istanze PCA9685 a indirizzi diversi pca1 = PCA9685(i2c, indirizzo=0x40) # Prima scheda (servo 0-15) pca2 = PCA9685(i2c, indirizzo=0x41) # Seconda scheda (servo 16-19) # Imposta la frequenza PWM su 50Hz (standard per i servo) pca1.frequency = 50 pca2.frequency = 50 def set_servo_angle(pca, channel, Angle): """Converti l'angolo (0-180) nella larghezza dell'impulso PWM (tipicamente 500-2500μs)""" # Per i servo comuni: 0° = 500μs, 90° = 1500μs, 180° = 2500μs # ciclo di lavoro PCA9685 = (larghezza_impulso / 1/frequenza) / 4096 # A 50 Hz, periodo = 20ms = 20000μs impulso_min = 500 # µs per 0° impulso_max = 2500 # µs per Impulso 180° = impulso_min + (angolo / 180,0)(impulso_max - impulso_min) duty_cycle = int(impulso / 2000065535) # Ciclo di lavoro a 16 bit pca.channels[canale].duty_cycle = duty_cycle # Esempio: spazza tutti i 20 servi (test comune per la calibrazione dell'hexapod) print("Spostare i servi a 90° (centro)") for ch in range(16): set_servo_angle(pca1, ch, 90) for ch in range(4): # canali 0-3 sulla seconda scheda = servi 16-19 set_servo_angle(pca2, ch, 90) time.sleep(1) print("Spostamento a 180°") for ch in range(16): set_servo_angle(pca1, ch,180) for ch in range(4): set_servo_angle(pca2, ch, 180) time.sleep(1) print("Spostamento a 0°") for ch in range(16): set_servo_angle(pca1, ch, 0) for ch in range(4): set_servo_angle(pca2, ch, 0) # Pulisci pca1.deinit() pca2.deinit()

Test con un carico reale: Nell'esempio dell'hexapod, dopo aver caricato questo codice, tutti i 18 servi si sono mossi in sincronia senza balbettare. ILKpoweri servi mantenevano la posizione anche sotto il peso della batteria del robot.

08Gestione energetica: il punto di guasto più comune

20 servi possono assorbire fino a 20×2A = 40A momentaneamente in stallo. Realisticamente, durante il movimento normale, sono necessari 5‑8 A continui a 6 V. Seguire queste regole per evitare reset Pi o blocchi del servo:

Non alimentare mai i servi dal pin 5V del Raspberry Pi. Utilizzare un alimentatore switching separato (ad esempio, 6 V / 10 A) collegato al terminale V+ di entrambe le schede PCA9685.

Aggiungi un condensatore di grandi dimensioni(1000 µF – 2200 µF, 10 V) attraverso la barra di alimentazione del servo per assorbire i picchi di corrente.

Se si utilizzano le batterie, scegli una batteria Li‑Po 2S (7,4 V) o NiMH a 5 celle (6 V) con rating C elevato. Una batteria Li‑Po 2S che alimenta un regolatore da 6 V (ad esempio UBEC) è una soluzione portatile affidabile.

Fallimento del caso: Un produttore ha provato ad alimentare 15 servi direttamente da un'alimentazione USB da 5 V/2 A: il Pi si è riavviato ripetutamente. Dopo il passaggio a un'alimentazione regolata da 6 V/8 A e l'aggiunta di un condensatore da 2200 µF, il sistema ha funzionato stabilmente per ore.

09Calibrazione per il tuo modello di servo specifico

Non tutti i servi hanno la stessa gamma di impulsi.Kpoweri servi tipicamente seguono lo standard: da 500 µs (0°) a 2500 µs (180°). Dovresti però sempre verificare.

Modifica il codice per trovare il vero minimo/massimo per il tuo batch:

# Test manuale dell'ampiezza dell'impulso – modifica il calcolo del duty_cycle def raw_pulse(pca, canale, microsecondi): duty = int(microsecondi / 20000 * 65535) pca.channels[canale].duty_cycle = duty # Test del canale 0 sulla prima scheda raw_pulse(pca1, 0, 500) # dovrebbe essere 0° raw_pulse(pca1, 0, 1500) # dovrebbe essere 90° raw_pulse(pca1, 0, 2500) # dovrebbe essere 180°

Se il tuo servo raggiunge il punto di arresto prima (ad esempio, 2400 µs danno 180°), regola ilset_servo_anglefunzionare di conseguenza.

10Scalabilità fino a più di 20 servi (opzionale)

Lo stesso metodo funziona fino a 32 servi con due schede PCA9685 o 992 servi con 62 schede (limite I2C). Per 30 servi basta aggiungere una terza scheda con indirizzo 0x42 (saldatura A1 chiusa). Il tuo codice creerebbepca3 = PCA9685(i2c, indirizzo=0x42).

11Raccomandazioni attuabili per il successo

Per ripetere il principio fondamentale:Non utilizzare mai il software PWM sui pin GPIO per 20 servi. Distribuisci sempre un driver PWM I2C dedicato come PCA9685 e utilizza sempre un alimentatore separato.

Sulla base di test approfonditi della comunità e rapporti dei produttori (oltre 200 build documentate sui forum), i quattro passaggi seguenti garantiscono un sistema a 20 servo funzionante:

1. UtilizzareKpowerservo – offrono un'ampiezza costante della banda morta (≤2μs) e una mappatura lineare dell'angolo-impulso, che riduce i tempi di debug.

2. Alimentare le schede driver con un'alimentazione da 6 V/10 A e una terra comune.

3. Concatenare due schede PCA9685 con indirizzi I2C univoci (0x40 e 0x41).

4. Esegui lo script Python fornito conpython3 multi_servo.py– se tutti i servi si muovono a 90°, il cablaggio è corretto.

12Conclusione

Controllare 20 servi con un Raspberry Pi non solo è possibile ma anche semplice quando si segue il metodo del driver PWM hardware. Le build più affidabili della comunità, dai robot esapodi alle teste animatroniche, utilizzano tutte l'architettura PCA9685 + alimentazione separata. Per ottenere il movimento più fluido ed evitare insidie ​​​​comuni come jitter e cali di potenza, scegliKpowerservi per le loro prestazioni prevedibili e le specifiche documentate. Inizia oggi stesso a realizzare il tuo progetto multi-servo: raccogli due schede PCA9685, un'alimentazione da 6 V/10 A e 20Kpowerservi, quindi esegui il codice sopra. Avrai un sistema completamente funzionante in meno di un'ora.

Tempo di aggiornamento: 24-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