Pubblicato 2026-04-16
Questo articolo fornisce una guida pratica e testata sul campo per il controllo di più dispositiviservomotori con scheda Arduino. Imparerai l'esatta configurazione dell'hardware, il cablaggio, la codifica e le tecniche di gestione dell'alimentazione necessarie per spostarne diversiservoFunziona allo stesso tempo senza jitter, stallo o reset della scheda. Tutti i consigli si basano su progetti reali come bracci robotici multi-articoli, deambulatori esapodi e gimbal per fotocamere.
Controllo simultaneo di piùservos ènonsull'aggiunta di altroscrivere()righe nel codice. Innanzitutto è necessario affrontare due limitazioni fisiche:
1. Alimentazione elettrica– Ciascun micro servo standard può assorbire 200–500 mA in movimento e fino a 1 A in stallo. Tre servi che si muovono insieme possono richiedere più corrente di quella che una porta USB (500 mA) o il pin 5V di Arduino (≈800 mA max) possono fornire. Il risultato: reset improvvisi della scheda, movimenti irregolari o servi che si rifiutano di girare.
2. Pin e timer PWM– L'incassoServola libreria utilizza gli interrupt del timer. Su un tipico Arduino Uno, puoi controllarefino a 12 servi(pin 2–13) utilizzando la libreria, ma solo se non si utilizzano anche altre funzioni dipendenti dal timer (ad es.tono()). Sulle schede con meno timer (ad esempio Arduino Nano), il limite pratico può essere di 8-10 servi. Il superamento del limite del timer provoca un comportamento imprevedibile.
> Esempio del mondo reale: Un hobbista che sta costruendo un braccio robotico da 6 gradi di libertà (sei servi) ha collegato tutti i servi al pin 5V di Arduino. Il braccio si contrasse e la porta USB si chiuse ripetutamente. La soluzione era un alimentatore esterno da 5 V 5 A.
Se il tuo progetto ha bisogno12 servi o menoe hai una fonte di alimentazione separata, ilServola biblioteca funziona in modo affidabile.
Collega ilfilo di segnale(di solito arancione, giallo o bianco) di ciascun servo a un diverso pin digitale compatibile con PWM di Arduino (3,5,6,9,10,11 su Uno; funzionano anche i pin 2–13 ma alcuni utilizzano il software PWM).
Connetti tuttofili di terra(marrone o nero) a una guida di terra comune –questo deve anche collegarsi al GND di Arduino.
Connetti tuttocavi di alimentazione(rosso) alterminale positivo di un alimentatore esterno da 5 V(mai al pin 5V di Arduino per più di 2 piccoli servi). L'Arduino stesso è alimentato separatamente (tramite USB o il proprio jack di alimentazione).
#includereServoservo1; Servoservo2; Servoservo3; void setup() { servo1.attach(9); servo2.attach(10); servo3.attach(11); } void loop() { // Muovi tutti e tre i servi da 0° a 180° contemporaneamente for (int pos = 0; pos = 0; pos--) { servo1.write(pos); servo2.write(pos); servo3.write(pos); ritardo(10); } ritardo(1000); }
Nota: ILritardo(10)è essenziale. Senza di esso, ilperil loop scrive nuovi angoli più velocemente di quanto i servi possano rispondere, causando movimenti a scatti.
Più di 12 servi– La libreria non verrà compilata o causerà conflitti di timer.
Servi a coppia elevata o rotazione continua– I loro picchi di corrente sono troppo grandi per il regolatore interno di Arduino anche con alimentazione esterna? (No, l'alimentazione esterna risolve il problema, ma l'integrità del segnale potrebbe risentirne con cavi lunghi.)
Necessità di controllo indipendente della velocità o sincronizzazione precisa- ILServola libreria imposta solo gli angoli target; non ti consente di controllare la velocità di ciascun servo individualmente.
Perpiù di 12 servio progetti che richiedono movimenti fluidi e indipendenti (ad esempio, animatronici, robot umanoidi a 16 servo), utilizzare unModulo driver PWM a 16 canalicomunicare su I²C. Questa è la soluzione professionale.
Il driver genera fino a 16 segnali PWM separati senza utilizzare alcun timer Arduino.
Sono necessari solo due pin analogici (SDA, SCL) per controllare tutti i 16 servi.
La maggior parte dei driver dispone di una morsettiera integrata per un alimentatore esterno da 5–6 V in grado di fornire 5–10 A.
1. Collegare il driverVCCad Arduino 5V (per alimentare il lato logico).
2. Collegare il driverGNDalla massa di Arduino.
3. Collegare il driverSDAad Arduino A4 (o pin SDA dedicato).
4. Collegare il driverSCLad Arduino A5 (o pin SCL dedicato).
5. Connettitialimentatore esterno 5V 5A+al terminale di alimentazione del conducente.
6. Collegare fino a 16 servi alla scheda driver (segnale, alimentazione, terra).
#includere#includere// Libreria di driver generici – nessuna approvazione del marchio // L'indirizzo 0x40 è predefinito per la maggior parte dei driver a 16 canali Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); // Limiti di larghezza dell'impulso del servo (tipicamente da 150 a 600 per da 0° a 180°) #define SERVOMIN 150 #define SERVOMAX 600 void setup() { pwm.begin(); pwm.setFrequenzaoscillatore(27000000); pwm.setPWMFreq(50); // Frequenza del servo analogico standard } // Funzione per spostare un servo specifico (0‑15) su un angolo (0‑180°) void setServoAngle(uint8_t canale, int angolo) { int impulso = map(angolo, 0, 180, SERVOMIN, SERVOMAX); pwm.setPWM(canale, 0, impulso); } void loop() { // Muovi tutti i 16 servi in modo fluido da 0° a 180° e indietro for (int angolo = 0; angolo = 0; angolo--) { for (int ch = 0; ch
Vantaggio chiave: NOritardo()all'interno del loop per servo? In realtà il codice sopra sposta tutti i servi di un passo ogni 8 ms, producendo un movimento perfettamente sincrono.
Un robot esapode a 12 servi che utilizzava la libreria standard ha sperimentato contrazioni casuali delle gambe mentre camminava. Il passaggio a un driver PWM a 16 canali ha eliminato tutti i conflitti di temporizzazione e ha consentito al robot di trasportare un carico utile di 1 kg perché l'alimentatore esterno forniva 5 V 8 A stabili.
1. Inizia con il potere– Per 3+ servi standard, utilizzare sempre un'alimentazione esterna da 5 V (minimo 2 A per 3 servi, 5 A per 8–10 servi). Collega la terra dell'alimentazione alla terra di Arduino.
2. Conta i tuoi servi– ≤10 servi → lo standardServola biblioteca va bene. ≥12 servi o qualsiasi jitter → acquista un modulo driver PWM a 16 canali (costa meno di due servi).
3. Non alimentare mai i servi dal pin 5V di Arduino– Questo pin è riservato solo a sensori e dispositivi a bassa corrente.
4. Usa un terreno comune– Tutti i servi, Arduino e l'alimentatore esterno devono condividere una connessione di terra. Senza di esso, i segnali PWM non hanno significato.
5. Scrivi codice non bloccante– Per progetti in cui Arduino deve anche leggere sensori o comunicare, sostituireritardo()con un timer basato su millis() che aggiorna le posizioni dei servi ogni 10–20 ms.
6. Testare in modo incrementale– Iniziare con un servo sull'alimentazione esterna. Aggiungere i servi uno per uno monitorando le cadute di tensione (utilizzare un multimetro). Se la tensione scende sotto i 4,8 V durante il movimento, aggiornare l'alimentazione.
Il controllo multiservo simultaneo è costituito per l'80% dalla gestione della potenza e per il 20% dal codice.Puoi usare la normaServolibreria per un massimo di 12 servi, ma solo con un alimentatore dedicato che non viene mai prelevato dalla scheda Arduino. Per progetti più grandi o prestazioni senza problemi, un modulo driver PWM su I²C è la soluzione professionale e comprovata. Mettere sempre a terra tutto insieme, dimensionare sempre l'alimentatore per la corrente di picco di stallo e testare sempre ciascun servo individualmente prima del movimento di gruppo.
La tua azione immediata: Conta i servi nel tuo progetto. Se più di 10, ordina oggi stesso un driver PWM a 16 canali e un alimentatore da 5 V 5 A. Quindi utilizza il secondo esempio di codice riportato sopra: funzionerà al tuo primo caricamento.
Tempo di aggiornamento: 2026-04-16
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.