Come controllare un servomotore con Raspberry Pi: una guida passo passo_Custom Drive_Industry Insights_Kpower
Casa > Approfondimenti sul settore >Guida personalizzata
SUPPORTO TECNICO

Supporto al prodotto

Come controllare un servomotore con Raspberry Pi: una guida passo passo

Pubblicato 2026-04-18

Questa guida fornisce una guida completa e pratica per il controllo di uno standardservomotore utilizzando un computer a scheda singola Raspberry Pi. Imparerai il cablaggio esatto, il codice Python e le impostazioni PWM necessarie per ottenere un controllo angolare preciso, sulla base di test reali e documentazione hardware ufficiale.

01Ciò di cui hai bisogno: componenti comuni (nessuna marca richiesta)

Raspberry Pi (qualsiasi modello con pin GPIO, ad esempio 3B+, 4B o 5)

Scheda MicroSD con sistema operativo Raspberry Pi (Bookworm o successivo)

Standard 5 Vservomotore (comunemente usato nella robotica hobbistica)

Alimentatore esterno da 5 V (2 A o più) – la maggior parteservoAssorbono corrente elevata

Cavi ponticello (femmina-femmina)

Piccolo potenziometro (opzionale, per esempio di controllo manuale)

> Nota del mondo reale: In una tipica configurazione di classe o hobbistica, gli utenti spesso danneggiano il loro Raspberry Pi alimentando il servo direttamente dal pin 5V. Questa guida mostra il metodo corretto di isolamento dell'alimentazione.

02Principio fondamentale: come viene controllata la posizione del servo

Un servomotore standard non ruota continuamente. Si sposta invece verso un angolo specifico (solitamente da 0° a 180°) in base a un segnale PWM (Pulse Larghezza Modulazione). Il Raspberry Pi genera questo segnale su un pin GPIO.

Parametri critici (dalle schede tecniche dei servo e dalla documentazione ufficiale Raspberry Pi):

Frequenza del segnale: 50 Hz (periodo = 20 ms)

Ampiezza dell'impulso per 0°: 0,5 ms (ciclo di lavoro = 2,5%)

Ampiezza dell'impulso per 90°: 1,5 ms (ciclo di lavoro = 7,5%)

Ampiezza dell'impulso per 180°: 2,5 ms (ciclo di lavoro = 12,5%)

Questi valori sono standard di settore per la maggior parte dei servi analogici e digitali. Verifica sempre con la scheda tecnica del tuo servo: esistono piccole variazioni.

03Passaggio 1: cablaggio: connessione sicura e corretta

Non alimentare mai il servo direttamente dal pin 5V del Raspberry Pi.Un tipico servo può assorbire 200–800 mA durante il movimento e le correnti di picco superano 1 A. Il pin da 5 V del Raspberry Pi è collegato direttamente all'ingresso USB e può fornire in modo affidabile solo circa 500 mA (meno sui modelli precedenti). L'assorbimento di una quantità maggiore di corrente può causare una caduta di tensione, il blocco del sistema o danni permanenti.

Cablaggio corretto (testato con configurazioni comuni):

Filo del servo Connessione
Marrone (terra) Terra comune: collegarsi a Raspberry Pi GNDEGND dell'alimentatore esterno
Rosso (alimentazione, 5 V) Terminale positivo dell'alimentazione esterna da 5 V
Arancione/Giallo (Segnale) Pin GPIO Raspberry Pi (ad esempio, GPIO18 – pin fisico 12)

Perché un terreno comune è obbligatorio:Il segnale di controllo del servo (0–3,3 V dal Pi) e l'alimentazione del servo (5 V dall'alimentazione esterna) devono condividere una tensione di riferimento. Senza una massa comune, il segnale diventa indefinito e il servo tremola o non si muove.

04Passaggio 2: abilita PWM sul Raspberry Pi

Il sistema operativo Raspberry Pi viene fornito con Python preinstallato. Esistono due metodi affidabili per generare segnali PWM precisi. Il metodo consigliato per i principianti è l'utilizzoRPi.GPIOcon PWM hardware su pin specifici.

Pin GPIO hardware con funzionalità PWM sull'intestazione a 40 pin Raspberry Pi:

GPIO12 (pin 32) – Canale PWM 0

GPIO13 (pin 33) – Canale PWM 1

GPIO18 (pin 12) – Canale PWM 0 (più comunemente usato)

GPIO19 (pin 35) – Canale PWM 1

树莓派pca9685多路舵机_树莓派控制舵机_树莓派控制360度舵机转动

Abilita l'interfaccia PWM (se si utilizza PWM hardware):Non sono necessari passaggi aggiuntivi: il PWM hardware è sempre disponibile. Per il PWM software (qualsiasi pin), non è richiesta alcuna configurazione ma i tempi potrebbero essere meno stabili.

05Passaggio 3: codice Python: controllo esatto della posizione

Di seguito è riportato uno script Python completo e testato che sposta il servo su tre angoli (0°, 90°, 180°) con una pausa di 2 secondi tra ciascuno. Questo codice segue la documentazione ufficiale RPi.GPIO.

import RPi.GPIO come ora di importazione GPIO # Usa la numerazione pin BCM GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Imposta GPIO18 come uscita PWM servo_pin = 18 GPIO.setup(servo_pin, GPIO.OUT) # Crea un'istanza PWM a 50 Hz pwm = GPIO.PWM(servo_pin, 50) pwm.start(0) # Inizia con Ciclo di lavoro 0% def set_servo_angle(angle): """ Converti l'angolo (0-180) nel ciclo di lavoro (da 2,5 a 12,5) Formula: duty = (angolo / 180)10 + 2,5 Verificato con più schede tecniche servo """ se angolo 180: angolo = 180 servizio = (angolo / 180,0)10.0 + 2.5 pwm.ChangeDutyCycle(duty) # Permette al servo di raggiungere la posizione time.sleep(0.5) # Interrompe l'invio del segnale per ridurre il jitter (opzionale) pwm.ChangeDutyCycle(0) time.sleep(0.1) try: while True: print("Spostamento a 0°") set_servo_angle(0) time.sleep(2) print("Spostamento a 90°") set_servo_angle(90) time.sleep(2) print("Spostamento a 180°") set_servo_angle(180) time.sleep(2) tranne KeyboardInterrupt: print("Interrotto dall'utente") pwm.stop() GPIO.cleanup()

Dettagli chiave:Dopo ogni posizione, il codice imposta il ciclo di lavoro sullo 0% e attende 0,1 secondi. Ciò impedisce l'assorbimento continuo di potenza e riduce il jitter del servo. Molti esempi online lo omettono, causando un inutile consumo di corrente.

06Passaggio 4: esegui e testa

Salva lo script con nomeservo_controllo.py. Nel terminale esegui:

python3 servo_controllo.py

Comportamento previsto:L'albero del servo ruota a 0°, fa una pausa di 2 secondi, si sposta a 90°, fa una pausa, si sposta a 180°, quindi ripete.

Se il servo non si muove:

Controllare i punti in comune: l’errore più frequente

Verificare che l'alimentatore esterno sia acceso e fornisca almeno 5 V

Conferma il numero pin GPIO (BCM 18 = pin fisico 12)

Ridurre il tempo di sonno dopoCambiaDutyCycle? No, il servo necessita di circa 300-500 ms per raggiungere la posizione

07Problemi e soluzioni comuni del mondo reale

Problema Causa più probabile Correzione verificata
Il servo si contrae ma non ruota Corrente insufficiente dall'alimentatore Utilizzare un'alimentazione da 5 V/2 A o superiore; aggiungere un condensatore da 1000μF sui binari di alimentazione
Il servo si muove solo fino agli estremi (0° o 180°) Intervallo del ciclo di lavoro errato Misurare la larghezza effettiva dell'impulso con un oscilloscopio; regolare la formula
Raspberry Pi si riavvia quando il servo si muove Servo alimentato dal pin 5V di Pi Trasferire immediatamente l'alimentazione del servo all'alimentazione esterna
Jitter a determinati angoli Rumore sulla linea del segnale o temporizzazione PWM del software Utilizzare pin PWM hardware (GPIO12/18); aggiungere un resistore da 1kΩ in serie con la linea del segnale
Il servo diventa molto caldo Il ciclo di lavoro non ritorna mai allo 0% dopo il posizionamento Aggiungerepwm.ChangeDutyCycle(0)come mostrato nell'esempio

08Avanzato: controllo manuale con un potenziometro

Per i progetti interattivi, puoi leggere un potenziometro analogico utilizzando un ADC MCP3008 (poiché Raspberry Pi non ha ingressi analogici). Tuttavia, un metodo più semplice per eseguire i test è utilizzare l'input da tastiera:

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 50) pwm.start(0) def angolo_to_duty(angolo): return (angolo / 180.0) * 10.0 + 2.5 try: while True: cmd = input("Inserisci angolo (0-180) o 'q' per uscire: ") if cmd == 'q': break prova: angolo = float(cmd) if 0

09Conclusione e raccomandazioni attuabili

Punto centrale ripetuto:Per controllare in modo sicuro e accurato un servo con un Raspberry Pi, è necessario (1) utilizzare un alimentatore esterno da 5 V per il servo, (2) collegare la terra comune tra Pi, servo e alimentatore, (3) generare un segnale PWM a 50 Hz con cicli di lavoro corrispondenti a impulsi da 0,5–2,5 ms e (4) arrestare il segnale PWM (lavoro 0%) dopo ogni movimento per ridurre il jitter e il consumo energetico.

Passaggi per applicare questa guida:

1. Raccogli i componenti sopra elencati: non sono richieste marche specifiche, funziona qualsiasi servo standard da 5 V.

2. Cablare esattamente come mostrato, ricontrollando il collegamento di terra comune.

3. Copia lo script Python ed eseguilo. Osservare il servo muoversi a 0°, 90° e 180°.

4. Modifica i valori dell'angolo nello script per soddisfare le esigenze del tuo progetto.

5. Per qualsiasi produzione o progetto di lunga durata, utilizzare sempre l'hardware PWM e aggiungere un condensatore elettrolitico da 100–470 µF attraverso le linee di alimentazione del servo per attenuare i picchi di tensione.

Fonti attendibili per ulteriori verifiche:Documentazione ufficiale Raspberry Pi (/documentation/computers/os.html#gpio-and-the-40-pin-header) e scheda tecnica del servomotore (solitamente disponibile sul sito Web del produttore). Fai sempre riferimento all'intervallo di larghezza dell'impulso del tuo servo specifico: mentre 0,5–2,5 ms è lo standard, alcuni servi utilizzano 0,7–2,3 ms. Un semplice script di calibrazione che analizza il servo e registra i limiti effettivi ti garantirà una precisione perfetta.

Tempo di aggiornamento: 2026-04-18

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
Messaggio WhatsApp
+86 0769 8399 3238
 
kpowerMap