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.
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.
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.
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):
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.
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
![]()
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.
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.
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
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
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
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.