Posso usar o GPIO como uma saída de modulação por largura de pulso ?
Nesse caso, como eu faria isso e quantas saídas PWM distintas e simultâneas posso ter?
Posso usar o GPIO como uma saída de modulação por largura de pulso ?
Nesse caso, como eu faria isso e quantas saídas PWM distintas e simultâneas posso ter?
Respostas:
Conforme sugerido por Alex Chamberlain , a biblioteca WiringPi parece oferecer suporte à saída PWM de hardware em um ou dois pinos GPIO, dependendo do modelo, e PWM de software em qualquer um dos outros pinos GPIO. Enquanto isso, a biblioteca RPIO.PWM executa PWM por DMA em qualquer pino GPIO. Efetivamente, essa é uma solução intermediária entre o PWM de hardware e software, fornecendo uma resolução de tempo de 1 µs em comparação com 100 µs com o Software PWM da WiringPi [1] .
Qual dessas opções é adequada para seus aplicativos depende de quantas saídas PWM você precisa e de qual desempenho deseja dessas saídas.
Se o seu aplicativo tolerar baixa resolução e instabilidade alta , você poderá usar um software ou um loop de sincronização assistido por DMA. Se você deseja maior precisão / menor instabilidade PWM, pode precisar de assistência com o hardware.
Se você quiser piscar vários LEDs com diferentes cadências visíveis humanas (10 'de hertz) com requisitos de resposta em tempo real , então o loop do software pode lidar com tantos PWMs quanto os pinos GPIO.
Se você deseja controlar um servo motor com requisitos de resposta em tempo real , precisará usar o PWM de hardware. Mesmo assim, você pode ter problemas para garantir uma resposta em tempo real para o loop servo que liga a entrada do codificador à saída PWM.
Um loop servo estável precisa ler os codificadores a uma taxa regular (jitter baixo), escrever os valores de saída PWM revisados a uma taxa regular e a latência entre eles deve ser fixa (jitter baixo geral). Se você não puder fazer isso, terá que subestimar (afinar) seu motor para evitar que ele se torne instável sob carga. É difícil fazer isso com um sistema operacional multitarefa sem suporte de baixo nível.
Se você precisar executar mais servo-loops do que as saídas PWM de hardware, provavelmente precisará transferi-los para outro dispositivo para garantir um desempenho em tempo real, relegando o seu Raspberry Pi a ser um supervisor em tempo real .
Uma opção seria algo como o driver PWM / Servo Adafruit de 16 canais e 12 bits - interface I²C - PCA9685, que permitiria controlar 16 saídas PWM com apenas alguns pinos de GPIO para o barramento I²C. Para um exemplo de seu uso, consulte a publicação I²C 16 Channel PWM / Servo Breakout - Working nos fóruns do Raspberry Pi.
1. Graças a dm76 pela sugestão, no entanto, heather diz que o RPIO.PWM pode não funcionar mais nos modelos pi mais recentes.
Sim, há uma saída PWM de hardware no Raspberry Pi, conectada à P1-12 (GPIO18). Além disso, as saídas PWM podem ser adicionadas usando uma interface I²C ou SPI ; algumas pessoas tiveram sucesso com isso ( postagem no fórum ).
Você pode usar a biblioteca WiringPi para controlar o pino PWM; você pode olhar o código para evitar a inclusão de toda a biblioteca.
O Raspberry Pi não é adequado para nenhum software sério de PWM, pois o Linux não é um sistema operacional em tempo real.
Os Pis recentes têm dois canais PWM de hardware. Além disso, os pulsos PWM cronometrados por hardware podem ser gerados independentemente em todo o GPIO conectado ao cabeçalho de expansão de 40 pinos.
Na prática, isso significa que existem dois canais PWM altamente precisos e todos os outros GPIOs podem ter PWM estilo Arduino (800 Hz, 0 desligado - 255 totalmente ligado).
Por exemplo, servoblaster e meu pigpio , etc.
Não é um sistema operacional em tempo real, mas o RISC OS para Raspberry Pi é multitarefa cooperativa, para que você possa executar facilmente um aplicativo que tenha 100% da CPU, para gerenciar melhor seus tempos. Só não espere fazer mais nada além do seu próprio código.
Eu encontrei esta biblioteca ( pi-blaster ) que afirma ser "extremamente eficiente: não usa a CPU e fornece pulsos muito estáveis".
Ainda não testei, mas atualizarei assim que o fizer (provavelmente hoje)