Lar > Informações do setor >BLDC
SUPORTE TÉCNICO

Suporte ao produto

Controlando 20 servos com um Raspberry Pi: um guia passo a passo completo

Publicado 2026-04-08

Este guia fornece uma solução prática e testada em campo para controlar até 20servoEstá usando simultaneamente um computador de placa única como o Raspberry Pi. Conectando diretamente mais de doisservos nos pinos GPIO causam quedas de tensão, conflitos de temporização PWM e danos à placa. O método confiável é usar um módulo driver PWM dedicado (por exemplo, PCA9685). Abaixo você encontrará a configuração exata do hardware, diagramas de fiação, cálculos de potência, código Python e etapas de solução de problemas - tudo baseado em projetos comuns de robótica e animatrônica do mundo real.

01Por que você não consegue se conectar 20servoDiretamente para GPIO

Limite atual: Cada pino GPIO fornece no máximo 16mA, enquanto um servo padrão consome 150–500mA quando em movimento. 20 servos exigiriam mais de 10A – muito além da capacidade do trilho de 3,3V/5V da placa.

Limite de hardware PWM: Raspberry Pi possui apenas dois canais PWM de hardware (GPIO 18 e 19). O software PWM em outros pinos introduz jitter e sobrecarga de CPU para 20 servos.

Colapso de tensão: Operar 20 servos do pino 5V da placa causará queda imediata de tensão, reiniciando o sistema.

02Visão geral da solução principal

Use umMódulo driver PWM baseado em I²C(PCA9685 de 16 canais é o padrão da indústria). Conecte dois desses módulos (cada um lida com até 16 servos) ou um módulo mais um multiplexador. Este guia usa duas placas PCA9685 (total de 32 canais, usando apenas 20).

03Componentes necessários (sem nomes de marcas)

1 computador de placa única (Raspberry Pi 3B+ ou mais recente)

2 placas de driver PWM de 12 bits e 16 canais PCA9685

20 servos padrão de 5 V (por exemplo, SG90, MG90S ou MG996R – escolha com base nas necessidades de torque)

1 fonte de alimentação externa de 5V DC – corrente calculada: 20 servos × 0,5A = 10A mínimo. Use umAlimentação regulada de 5V 10A–15A.

Capacitores: 2x 1000µF eletrolíticos (≥10V) para suavização de energia

Fios jumper (fêmea para fêmea para I²C, macho para fêmea para conexões servo)

Placas de ensaio ou blocos terminais para distribuição de energia

04Diagrama de fiação (passo a passo)

Passo 1 – Conexão I²C entre Raspberry Pi e primeiro PCA9685

Pi 3,3 V → VCC de PCA9685 (Nota: alguns módulos aceitam lógica de 5 V; verifique seu módulo. Para módulos lógicos de 5 V, use 3,3 V do Pi somente se o módulo for tolerante a 3,3 V. Mais seguro: conecte o VCC ao pino de 5 V do Pi somente se a folha de dados do módulo confirmar a tolerância de 5 V. A maioria das placas PCA9685 funcionam com lógica I²C de 3,3 V, mas precisam de 5 V para servo V + - consulte próximo passo.)

Fiação padrão correta (para 99% das placas PCA9685):

Pi 5V (pino 2 ou 4) → PCA9685 VCC (alimentação para a lógica do chip – sim, muitos funcionam com lógica de 5V)

Pi GND → PCA9685 GND

Pi SDA (GPIO 2) → PCA9685 SDA

Pi SCL (GPIO 3) → PCA9685 SCL

Passo 2 – Alimentação externa para servos

Fonte externa de 5V (10A+) positiva (+) → Terminal PCA9685 V+ (geralmente rotulado como “V+” ou “servo power”)

Alimentação externa GND → PCA9685 GND (deve compartilhar terreno comum com Pi – conecte Pi GND ao PCA9685 GND como já feito acima)

Coloque o capacitor de 1000 µF em V+ e GND próximo ao PCA9685 para absorver picos de EMF traseiro.

Passo 3 – Conectando servos

Vermelho de cada servo (alimentação) → trilho PCA9685 V+ (use um barramento de alimentação da placa de ensaio)

Servo marrom/preto (GND) → trilho GND PCA9685

Servo laranja/amarelo (sinal) → Pino de saída PWM PCA9685 (0 a 15 na primeira placa, 0 a 3 na segunda placa)

Passo 4 – Segundo PCA9685

Defina o endereço I²C da segunda placa: solde os jumpers de endereço. O endereço padrão do PCA9685 é 0x40. Para a segunda placa: jumper A0 de solda → o endereço passa a ser 0x41.

Conecte o SDA/SCL/GND/VCC da segunda placa em paralelo com a primeira placa (mesmo barramento I²C).

Conecte seu V+ à mesma fonte externa de 5V.

05Configuração de software (Raspberry Pi OS, comandos de terminal)

Habilite I²C no Pi:

sudo raspi-config # Opções de interface → I2C → Sim sudo reboot

Instale as bibliotecas necessárias:

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

Verifique os dispositivos I²C:

sudo i2cdetect -y 1

Você deverá ver 0x40 e 0x41 (se a segunda placa estiver endereçada corretamente).

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

Crie um arquivoservo_control.py:

tempo de importação placa de importação importar busio de adafruit_pca9685 importar PCA9685 # Inicializar barramento I2C i2c = busio.I2C(board.SCL, board.SDA) # Primeiro PCA9685 no endereço 0x40 pca1 = PCA9685(i2c, endereço=0x40) pca1.frequency = 50 # 50Hz para servos padrão # Segundo PCA9685 no endereço 0x41 pca2 = PCA9685(i2c, address=0x41) pca2.frequency = 50 # Faixa de largura de pulso servo (típico de 500 a 2500 microssegundos) # Converter para ciclo de trabalho: duty = pulse_us / 2000065535 def angle_to_duty(ângulo, min_us=500, max_us=2500): pulso = min_us + (ângulo / 180,0)(max_us - min_us) return int((pulse / 20000.0) * 65535) # Controla qualquer servo por placa e canal def set_servo(board, channel, angle): if angle 180: angle = 180 board.channels[channel].duty_cycle = angle_to_duty(angle) # Exemplo: Mova todos os 20 servos para 90° servos = [(pca1, i) for i in range(16)] + [(pca2, i) for i in range(4)] # total 20 para placa, ch em servos: set_servo(board, ch, 90) time.sleep(0.01) # escalonar para reduzir o surto de corrente # Varre o servo na placa1 canal0 de 0 a 180 print("Varrendo servo na placa1 ch0") para ângulo na faixa(0, 181, 10): set_servo(pca1, 0, angle) time.sleep(0.05) # Libera todos os servos (para de enviar PWM) - importante para evitar jitter pca1.deinit() pca2.deinit()

07Gerenciamento de energia – parte mais crítica

Um caso real: Certa vez, um hobby conectou 10 servos diretamente a uma fonte de alimentação de 5V/3A. Durante o movimento simultâneo, a tensão caiu para 3,8 V, os servos pararam e o Raspberry Pi foi reinicializado. Solução:Use uma fonte regulada de 5V/15A(por exemplo, uma fonte de alimentação LED ou barramento de 5V da fonte de alimentação ATX do computador). Adicionargrandes capacitores(1000µF por 5-8 servos) perto de cada placa de driver.

Regra acionável: Calcule sua corrente simultânea máxima. Se todos os 20 servos se moverem ao mesmo tempo, assuma 10A. Por segurança, adicione margem de 30% →13A mínimo. Use fios 14AWG ou mais grossos para distribuição de energia.

08Calibrando larguras de pulso servo

Nem todos os servos têm o mesmo pulso mínimo/máximo. Valores comuns:

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

600 µs (0°) – 2400 µs (180°) para muitos servos digitais

Para calibrar: Escreva um script de teste que varra de 300 a 2700 µs, encontre os limites mecânicos e atualizemenosemax_usna função acima.

09Problemas e soluções comuns

Problema Causa mais provável Consertar
Servos se contorcem ou não se movem Corrente de alimentação insuficiente Atualize para alimentação de 15A, use fios mais curtos e grossos
Raspberry Pi reinicia quando os servos iniciam Queda de tensão na linha 5V Use fonte externa apenas para servos, mantenha o Pi alimentado separadamente (via USB-C)
Apenas 16 servos funcionam, não 20 Segunda placa não detectada Verifique o endereço I²C (usei2cdetect -y 1), garanta conexões SDA/SCL
Servos se movem, mas tremem Falta de terreno comum Conecte Pi GND ao PCA9685 GND e fonte externa GND juntos
Um servo não responde Fio ou canal de sinal ruim Troque por um servo funcional conhecido no mesmo canal para isolar

10Otimização de desempenho para 20 servos

Movimento escalonado: Não comande todos os servos para mudarem o ângulo exatamente no mesmo microssegundo. Adicionartempo.sono(0,005)entre cadaset_servochamar. Isso reduz a corrente de pico ao distribuir a carga.

Taxa de atualização: 50 Hz (período de 20 ms) é padrão. Não aumente a frequência acima de 100 Hz – a maioria dos servos superaquecerá.

Uso da CPU: O hardware PCA9685 gera PWM de forma independente. Seu script Python envia apenas comandos I²C sempre que você altera os ângulos. Para posições estáticas, o script pode sair – os servos mantêm a última posição enquanto a energia for aplicada.

11Plano de ação completo para implementar isso hoje

1. Encomendar componentes– Duas placas PCA9685, 20 servos, fonte de alimentação 5V/15A, capacitores 1000µF.

2. Teste com um servo– Conecte um único servo ao primeiro PCA9685, execute o código de varredura.

3. Adicionar fonte de alimentação– Conecte 5V/15A externo ao trilho V+, verifique se o servo se move fortemente.

4. Escala para 5 servos– Adicione mais servos gradativamente, monitorando a temperatura dos fios da fonte de alimentação.

5. Adicionar segundo PCA9685– Defina o endereço para 0x41, conecte 4 servos, teste.

6. Teste completo de 20 servos– Execute o código fornecido movendo todos os servos para 90° e, em seguida, faça uma varredura lenta em todos os canais.

12Principal vantagem

Você não pode controlar 20 servos diretamente de um GPIO do Raspberry Pi – use placas de driver PCA9685 PWM com uma fonte de alimentação dedicada de alta corrente de 5V.Este método é usado em milhares de animatrônicos reais, robôs hexápodes e projetos de automação. É confiável, escalável e bem documentado. Comece com um pequeno teste, verifique a estabilidade da energia e depois aumente. Seu sucesso depende de um aterramento adequado e de amperagem suficiente – ambos não são negociáveis.

Agora tome uma atitude: conecte um PCA9685 com um único servo e alimentação externa de 5V. Quando isso funcionar, adicione o resto. Você terá um sistema estável de 20 servos dentro de duas horas após a montagem.

Hora de atualização: 08/04/2026

Impulsionando o Futuro

Entre em contato com o especialista de produtos da Kpower para recomendar um motor ou caixa de engrenagens adequado para o seu produto.

Correio para Kpower
Enviar consulta
+86 0769 8399 3238
 
kpowerMap