Control de 20 servos con una Raspberry Pi: una guía completa paso a paso_BLDC_Industry Insights_Kpower
Hogar > Perspectivas de la industria >BLDC
APOYO TÉCNICO

Soporte de producto

Controlar 20 servos con una Raspberry Pi: una guía completa paso a paso

Publicado 2026-04-08

Esta guía proporciona una solución práctica y probada en campo para controlar hasta 20servos utilizando simultáneamente una computadora de placa única como la Raspberry Pi. Conectando directamente más de dosservoLos contactos con los pines GPIO provocan caídas de voltaje, conflictos de temporización PWM y daños en la placa. El método confiable es utilizar un módulo controlador PWM dedicado (por ejemplo, PCA9685). A continuación encontrará la configuración exacta del hardware, los diagramas de cableado, los cálculos de energía, el código Python y los pasos para la solución de problemas, todo ello basado en proyectos comunes de robótica y animatrónica del mundo real.

01Por qué no puedes conectarte 20servoDirectamente a GPIO

Límite actual: Cada pin GPIO suministra un máximo de 16 mA, mientras que un servo estándar consume entre 150 y 500 mA cuando se mueve. 20 servicios requerirían más de 10 A, mucho más que la capacidad del riel de 3,3 V/5 V de la placa.

Límite de hardware PWM: Raspberry Pi tiene solo dos canales PWM de hardware (GPIO 18 y 19). El software PWM en otros pines introduce jitter y sobrecarga de CPU para 20 servos.

Colapso de voltaje: Operar 20 servos desde el pin de 5V de la placa provocará una caída de voltaje inmediata, reiniciando el sistema.

02Descripción general de la solución principal

Utilice unMódulo controlador PWM basado en I²C(PCA9685 de 16 canales es el estándar de la industria). Conecte dos de estos módulos (cada uno maneja hasta 16 servos) o un módulo más un multiplexor. Esta guía utiliza dos placas PCA9685 (un total de 32 canales, utilizando solo 20).

03Componentes necesarios (sin marcas)

1 computadora de placa única (Raspberry Pi 3B+ o posterior)

2 placas de controlador PWM PCA9685 de 16 canales y 12 bits

20 servos estándar de 5 V (por ejemplo, SG90, MG90S o MG996R; elija según las necesidades de torsión)

1 fuente de alimentación externa de 5 V CC: calcule la corriente: 20 servos × 0,5 A = 10 A mínimo. Utilice unSuministro de 5 V regulado de 10 A a 15 A.

Condensadores: 2x 1000 µF electrolíticos (≥10 V) para suavizar la potencia

Cables de puente (hembra a hembra para I²C, macho a hembra para conexiones de servo)

Protoboards o bloques de terminales para distribución de energía.

04Diagrama de cableado (paso a paso)

Paso 1: conexión I²C entre Raspberry Pi y el primer PCA9685

Pi 3.3V → VCC de PCA9685 (Nota: Algunos módulos aceptan lógica de 5V; verifique su módulo. Para módulos lógicos de 5V, use 3.3V de Pi solo si el módulo es tolerante a 3.3V. Más seguro: conecte VCC al pin de 5V de Pi solo si la hoja de datos del módulo confirma la tolerancia de 5V. La mayoría de las placas PCA9685 funcionan con lógica I²C de 3.3V pero necesitan 5V para el servo V+ – ver el siguiente paso.)

Cableado estándar correcto (para el 99% de las placas PCA9685):

Pi 5V (pin 2 o 4) → PCA9685 VCC (alimentación para la lógica del chip; sí, muchos funcionan con lógica de 5V)

Pi GND → PCA9685 GND

Pi SDA (GPIO 2) → PCA9685 SDA

Pi SCL (GPIO 3) → PCA9685 SCL

Paso 2 – Alimentación externa para servos

Suministro externo de 5 V (10 A+) positivo (+) → terminal PCA9685 V+ (a menudo etiquetado como “V+” o “servo power”)

Suministro externo GND → PCA9685 GND (debe compartir tierra común con Pi; conecte Pi GND a PCA9685 GND como ya se hizo anteriormente)

Coloque un capacitor de 1000 µF entre V+ y GND cerca del PCA9685 para absorber los picos de contraEMF.

Paso 3 – Conexión de servos

El rojo de cada servo (alimentación) → riel PCA9685 V+ (use un riel de alimentación de placa de pruebas)

Servo marrón/negro (GND) → Riel PCA9685 GND

Servo naranja/amarillo (señal) → pin de salida PCA9685 PWM (0 a 15 en la primera placa, 0 a 3 en la segunda placa)

Paso 4 – Segundo PCA9685

Establezca la dirección I²C de la segunda placa: suelde los puentes de dirección. La dirección predeterminada de PCA9685 es 0x40. Para la segunda placa: suelde el puente A0 → la dirección se convierte en 0x41.

Conecte el SDA/SCL/GND/VCC de la segunda placa en paralelo con la primera placa (mismo bus I²C).

Conecte su V+ al mismo suministro externo de 5V.

05Configuración del software (sistema operativo Raspberry Pi, comandos de terminal)

Habilite I²C en el Pi:

sudo raspi-config # Opciones de interfaz → I2C → Sí sudo reboot

Instale las bibliotecas necesarias:

sudo apt actualizar sudo apt instalar python3-pip python3-smbus i2c-tools sudo pip3 instalar adafruit-circuitpython-pca9685

Verificar dispositivos I²C:

sudo i2cdetect -y 1

Debería ver 0x40 y 0x41 (si la segunda placa se dirigió correctamente).

06Código Python para controlar 20 servos de forma independiente

Crear un archivoservo_control.py:

importar tiempo importar placa importar busio desde adafruit_pca9685 importar PCA9685 # Inicializar bus I2C i2c = busio.I2C(board.SCL, board.SDA) # Primer PCA9685 en la dirección 0x40 pca1 = PCA9685(i2c, dirección=0x40) pca1.frequency = 50 # 50Hz para servos estándar # Segundo PCA9685 en la dirección 0x41 pca2 = PCA9685(i2c, dirección=0x41) pca2.frequency = 50 # Rango de ancho de pulso del servo (típico de 500 a 2500 microsegundos) # Convertir al ciclo de trabajo: duty = pulse_us / 2000065535 def ángulo_a_deber(ángulo, min_us=500, max_us=2500): pulso = min_us + (ángulo / 180.0)(max_us - min_us) return int((pulse / 20000.0) * 65535) # Controla cualquier servo por placa y canal def set_servo(tablero, canal, ángulo): if ángulo 180: ángulo = 180 board.channels[channel].duty_cycle = angle_to_duty(angle) # Ejemplo: Mueve los 20 servos a 90° servos = [(pca1, i) para i in range(16)] + [(pca2, i) for i in range(4)] # total 20 para placa, ch en servos: set_servo(board, ch, 90) time.sleep(0.01) # escalonar para reducir el aumento de corriente # Barrer servo en board1 canal0 de 0 a 180 print("Servo de barrido en board1 ch0") para ángulo en rango(0, 181, 10): set_servo(pca1, 0, ángulo) time.sleep(0.05) # Libera todos los servos (deja de enviar PWM) - importante para evitar fluctuaciones pca1.deinit() pca2.deinit()

07Gestión de energía: parte más crítica

Un caso real: un aficionado conectó una vez 10 servos directamente a una fuente de alimentación de 5V/3A. Durante el movimiento simultáneo, el voltaje cayó a 3,8 V, los servos se detuvieron y la Raspberry Pi se reinició. Solución:Utilice un suministro regulado de 5 V/15 A.(por ejemplo, una fuente de alimentación LED o un riel de 5 V para una fuente de alimentación ATX de computadora). Agregarcondensadores grandes(1000 µF por 5-8 servos) cerca de cada placa controladora.

Regla procesable: Calcule su corriente máxima simultánea. Si los 20 servos se mueven a la vez, suponga 10A. Por seguridad, agregue un margen del 30% →13A mínimo. Utilice cables de 14 AWG o más gruesos para la distribución de energía.

08Calibración de anchos de pulso de servo

No todos los servos tienen el mismo pulso mínimo/máximo. Valores comunes:

500 µs (0°) – 2500 µs (180°) para servos analógicos

600 µs (0°) – 2400 µs (180°) para muchos servos digitales

Para calibrar: escriba un script de prueba que barre de 300 a 2700 µs, encuentre los límites mecánicos y luego actualicemenosymax_usen la función anterior.

09Problemas comunes y soluciones

Problema Causa más probable Arreglar
Los servos se contraen o no se mueven Corriente de alimentación insuficiente Actualice a un suministro de 15 A, use cables más cortos y gruesos
Raspberry Pi se reinicia cuando se inician los servos Caída de voltaje en la línea de 5V Utilice fuente externa solo para servos, mantenga Pi alimentado por separado (a través de USB-C)
Sólo funcionan 16 servos, no 20 Segunda placa no detectada Verifique la dirección I²C (usei2cdetect -y 1), asegúrese de que las conexiones SDA/SCL
Los servos se mueven pero tiemblan Falta un terreno común Conecte Pi GND a PCA9685 GND y al suministro externo GND juntos
Un servo no responde Cable o canal de mala señal Cambie con un servo que funcione en el mismo canal para aislar

10Optimización del rendimiento para 20 servos

movimiento escalonado: No ordene a todos los servos que cambien de ángulo exactamente en el mismo microsegundo. Agregartiempo.dormir(0.005)entre cada unoconjunto_servollamar. Esto reduce la corriente máxima al distribuir la carga.

Tasa de actualización: 50 Hz (período de 20 ms) es estándar. No aumente la frecuencia por encima de 100 Hz; la mayoría de los servos se sobrecalentarán.

uso de CPU: El hardware PCA9685 genera PWM de forma independiente. Su secuencia de comandos Python solo envía comandos I²C cada vez que cambia de ángulo. Para posiciones estáticas, el script puede salir: los servos mantienen la última posición mientras se aplica energía.

11Plan de acción completo para implementar esto hoy

1. Componentes del pedido– Dos placas PCA9685, 20 servos, fuente de alimentación de 5V/15A, condensadores de 1000μF.

2. Prueba con un servo– Conecte un solo servo al primer PCA9685 y ejecute el código de barrido.

3. Agregar fuente de alimentación– Conecte 5V/15A externos al riel V+, verifique que el servo se mueva con fuerza.

4. Escalar a 5 servos– Agregue más servos gradualmente, monitoreando la temperatura de los cables de alimentación.

5. Agregar segundo PCA9685– Establezca la dirección en 0x41, conecte 4 servos, pruebe.

6. Prueba completa de 20 servos– Ejecute el código proporcionado moviendo todos los servos a 90°, luego un barrido lento de todos los canales.

12Conclusión clave

No puede controlar 20 servos directamente desde el GPIO de una Raspberry Pi; utilice placas de controlador PWM PCA9685 con una fuente de alimentación dedicada de alta corriente de 5 V.Este método se utiliza en miles de animatronics reales, robots hexápodos y proyectos de automatización. Es confiable, escalable y está bien documentado. Comience con una pequeña prueba, verifique la estabilidad de la energía y luego amplíe. Su éxito depende de una conexión a tierra adecuada y de un amperaje suficiente; ambos no son negociables.

Ahora tome medidas: conecte un PCA9685 con un solo servo y una fuente externa de 5 V. Una vez que eso funcione, agrega el resto. Tendrá un sistema estable de 20 servos dentro de las dos horas posteriores al montaje.

Hora de actualización: 2026-04-08

Impulsando el futuro

Comuníquese con el especialista en productos de Kpower para recomendarle un motor o caja de cambios adecuado para su producto.

Correo a Kpower
Enviar consulta
Mensaje de WhatsApp
+86 0769 8399 3238
 
kpowerMapa