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.
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.
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).
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.
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.
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).
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()
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.
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.
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.
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.
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
Comuníquese con el especialista en productos de Kpower para recomendarle un motor o caja de cambios adecuado para su producto.