Como posso controlar um servo RC?


26

Gostaria de controlar um pequeno servo RC (5 V, 500 mA) a partir dos pinos GPIO via Python .

Hardware

  • Quais são as conexões elétricas necessárias?
  • Posso conectar vários servos ao Raspberry Pi?
  • Existem limitações atuais? Preciso armazenar em buffer o pino de saída com um transistor?
  • Posso ligar o servo diretamente do Raspberry Pi ou devo usar uma fonte de alimentação externa? Preciso de um capacitor para suavizar o consumo de energia irregular do servo?

Programas

  • De que código de software / Python eu preciso? Eu sei que preciso de pulsos de 20 ms, como posso conseguir isso?
  • Que tipo de carga de CPU posso esperar ao usar o Raspberry Pi dessa maneira?

Esta é uma pergunta semelhante que poderia ajudar você a começar: raspberrypi.stackexchange.com/questions/27/...
Andrew Larsson

Respostas:


9

As conexões elétricas necessárias dependem do servo que você possui. O GPIO fornece 3,3 V e até 16 mA , o que é insuficiente para o seu servo, portanto você precisará armazená-lo em buffer com um transistor.

Existem 8 pinos GPIO no cabeçalho de expansão , embora outros pinos possam ser reconfigurados para fornecer até 17 pinos GPIO no total. Se você precisar de mais, precisará adicionar algum tipo de multiplexador.

Obter sinais de tempo precisos será complicado no Raspberry Pi ou em qualquer sistema operacional não em tempo real, pois interrupções e alternâncias de tarefas podem ocorrer a qualquer momento. Você provavelmente precisará de componentes eletrônicos externos para fornecer sinais com precisão de tempo.

Andrew apontou você para algum software. A carga da CPU dependerá do que você está fazendo, mas o GPIO em si não adiciona nenhuma carga.


2
Por outro lado, 20 ms é muito tempo, mesmo para os termos de CPU do Raspberry Pi. Eu não me preocuparia muito com a precisão do tempo dos servos RC.

2
@Tibor: 20ms é o período de servo pulsos, não a largura en.wikipedia.org/wiki/Servo_control#Pulse_duration . E o requisito de resolução é muito pior do que isso - para obter 8 bits de resolução, você precisa de 256 etapas em 2 milissegundos, então ~ 8us.
Martin Thompson

8

Se você estiver executando um sistema operacional em tempo real no seu Raspberry Pi, isso é realmente possível. Como já foi dito, você precisará de uma fonte de energia externa para os servos, mas, exceto por isso, não precisa de nenhum outro hardware adicional.

Se você estiver executando o Xenomai (patch em tempo real para Linux), poderá executar um sistema Linux completamente familiar, mas com recursos adicionais em tempo real.

Eu escrevi uma pequena biblioteca C com o objetivo de controlar servos do Raspberry Pi. Eu tentei controlar 3 servos ao mesmo tempo, mas não há realmente nenhuma razão para que não funcione com mais.

Você pode encontrar minha pequena biblioteca aqui: https://github.com/simonfi/pi-servo Adicionar um wrapper Python para ele deve ser trivial. O Xenomai para Raspberry Pi pode ser encontrado aqui: http://powet.eu/2012/07/25/raspberry-pi-xenomai/

Gerar os sinais necessários para três servos está consumindo basicamente uma quantidade insignificante de CPU. Ainda não testei com mais de três.


5

Se você não se importa em usar um driver Linux Kernel, existe um servoblaster que expõe os servos como um dispositivo char.

https://github.com/richardghirst/PiBits

Garfoi uma nova versão que não consome todos os pinos gpio para uso de servos. Atualmente, estou usando um robô servo que eu criei e demonstrei para o nosso clube de robôs usando o IPGamePad para controlá-lo.

https://github.com/jronald/PiBits

Além disso, você realmente não deseja que esses servos sejam alimentados via RPI, mas use uma fonte de alimentação separada. Claro que você precisa unir esse fundamento. Como as saídas RPI do servo não são necessárias mudanças de voltagem, mas você deve ter muito cuidado para não conectar as coisas incorretamente.


fyi - o repo richartghrist parece ter sido mantido enquanto o garfo jronald parece desatualizado e quebrado. Além disso, eu recomendo a leitura como ignorar tudo, mas os dois primeiros comandos servo e Instalação Servoblaster
cwd

3

Servos são, geralmente, controlados usando sinais PWM; você deve consultar o GPIO como saída PWM .

Há suporte para PWM no chip, portanto, poderemos usá-lo no futuro. Basicamente, tudo o que o software faz é dizer ao hardware para produzir pulsos em uma determinada frequência. Algumas pessoas tiveram sucesso usando controladores PWM externos sobre o I2C.


3

Existe uma placa de extensão disponível para o raspberry pi chamada gertboard, usada para controlar servos e outras cargas que o Pi não pode conduzir por si só.


Devo também acrescentar que, devido à popularidade deste produto, acredito que ele esteja esgotado na maioria dos sites que oferecem o raspberry pi e acessórios.
Brandon Bailey

3

O conhecimento de como fazer as coisas no Pi melhorou bastante nos anos desde que essa pergunta foi feita.

Existem pelo menos quatro maneiras de gerar pulsos PWM / Servo cronometrados por hardware nos gpios do Pi sem usar hardware externo.

O uso de módulos do kernel para fazer isso é praticamente obsoleto. As seguintes soluções da terra do usuário estão disponíveis.

  • Meu próprio pigpio gerará pulsos PWM gerais e servo independentemente em qualquer um dos gpios 0-31 (C, Python, soquete, tubo).
  • O Servoblaster gerará pulsos Servo e PWM gerais independentemente em até 21 gpios (canal).
  • O RPIO gerará pulsos PWM gerais e servo independentemente em qualquer um dos gpios 0-31 (Python).
  • pi-blaster derivado de Servoblaster (pipe)

2

Eu ficaria surpreso se você puder cronometrar as saídas suficientemente bem enquanto executa o Linux para controlar com precisão um servo.

O pulso deve ser controlado em um intervalo de 2 milissegundos. Mesmo se o tick do agendador tiver uma resolução de 100us (o que está sendo feito - normalmente é 10ms), são apenas 20 etapas que você pode resolver. E isso sem considerar a instabilidade introduzida pela alternância de tarefas.

Se houver outro temporizador disponível, você poderá escrever um driver de nível muito baixo que pode antecipar até o sistema operacional para obter a precisão do tempo. Parece divertido!


2

Acho que tentar executar um servo diretamente da porta GPIO seria difícil e causaria muita sobrecarga de CPU, se possível. Eu uso um servo controlador USB e funciona muito bem e quase não usa CPU, embora seja um pouco complicado de configurar. O que eu tenho são 24 canais, mas eles fazem uma versão de 6 canais. Também vi controladores de 2 e 4 canais de outros fornecedores que usam serial, o que seria mais fácil e mais barato que o USB, se você não precisar controlar tantos servos.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.