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?
Respostas:
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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ó.
fonte
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.
fonte
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!
fonte
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.
fonte
Existe um serviço da Web GPIO completo para o qual você pode escrever seus próprios plug-ins. Parece já ter suporte para controlar qualquer número de servos. Veja o diretório "Conteúdo" para obter várias imagens e também o layout do quadro.
https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb
Parece estar em C # executando o Mono no Pi.
fonte