Posso usare GPIO come uscita di modulazione della larghezza di impulso ?
In tal caso, come farei per farlo e quante uscite PWM simultanee e distinte posso avere?
Posso usare GPIO come uscita di modulazione della larghezza di impulso ?
In tal caso, come farei per farlo e quante uscite PWM simultanee e distinte posso avere?
Risposte:
Come suggerito da Alex Chamberlain , la libreria WiringPi sembra supportare sia l'output PWM hardware su uno o due pin GPIO a seconda del modello, sia il PWM software su uno qualsiasi degli altri pin GPIO. Nel frattempo la libreria RPIO.PWM esegue PWM tramite DMA su qualsiasi pin GPIO. In effetti questa è una casa a metà strada tra hardware e software PWM, fornendo una risoluzione di temporizzazione di 1 µs rispetto a 100 µs con il software PWM [1] di WiringPi .
Quale di questi è adatto per le tue applicazioni dipende da quante uscite PWM ti servono e quali prestazioni desideri da quelle uscite.
Se l'applicazione è tollerante alla risoluzione a basso timing e al jitter elevato, è possibile utilizzare un software o un loop di timing assistito DMA. Se si desidera una PWM di precisione superiore / jitter inferiore, potrebbe essere necessaria assistenza hardware.
Se vuoi far lampeggiare un sacco di LED con diverse cadenze visibili umane (10 di Hertz) con requisiti di risposta in tempo reale, il loop del software potrebbe gestire tutti i PWM quanti sono i pin GPIO.
Se si desidera controllare un servomotore con requisiti di risposta in tempo reale difficili, sarà necessario utilizzare PWM hardware. Anche in questo caso potresti avere problemi a garantire una risposta in tempo reale per il servo loop che collega l'ingresso dell'encoder all'uscita PWM.
Un servo loop stabile deve leggere gli encoder a una frequenza regolare (jitter basso), scrivere i valori di uscita PWM revisionati a una velocità regolare e la latenza tra questi dovrebbe essere fissa (jitter basso complessivo). Se non riesci a farlo, dovrai sottotonare (accordare delicatamente) il tuo motore per evitare che diventi instabile sotto carico. Questo è difficile da fare con un sistema operativo multi-tasking senza supporto di basso livello.
Se hai bisogno di eseguire più servo loop di quelli che hai output PWM hardware, probabilmente dovrai scaricarli su un altro dispositivo per garantire prestazioni in tempo reale difficili, relegando il tuo Raspberry Pi a un supervisore soft in tempo reale .
Un'opzione, potrebbe essere qualcosa come il driver PWM / servo 12 bit Adafruit a 16 canali - interfaccia I²C - PCA9685 che ti permetterebbe di controllare 16 uscite PWM con pochi pin di GPIO per il bus I²C. Per un esempio del suo utilizzo, dai un'occhiata al post I²C 16 canali PWM / Servo Breakout - Post di lavoro sui forum Raspberry Pi.
1. Grazie a dm76 per il suggerimento, tuttavia heather afferma che RPIO.PWM potrebbe non funzionare più per i nuovi modelli pi.
Sì, c'è un output PWM hardware su Raspberry Pi, collegato a P1-12 (GPIO18). Inoltre, è possibile aggiungere uscite PWM utilizzando un'interfaccia I²C o SPI ; alcune persone hanno avuto successo con questo ( post sul forum ).
È possibile utilizzare la libreria WiringPi per controllare il pin PWM; potresti guardare il codice per evitare di includere l'intera libreria.
Raspberry Pi non è adatto a nessun software PWM serio poiché Linux non è un sistema operativo in tempo reale.
I Pis recenti hanno due canali PWM hardware. Inoltre, gli impulsi PWM con temporizzazione hardware possono essere generati in modo indipendente su tutti i GPIO collegati all'intestazione di espansione a 40 pin.
In pratica questo significa che ci sono due canali PWM altamente precisi e tutti gli altri GPIO possono avere PWM in stile Arduino (800 Hz, 0 spento - 255 completamente acceso).
Ad esempio servoblaster e il mio pigpio , ecc.
Non proprio un sistema operativo in tempo reale, ma RISC OS per Raspberry Pi è un multitasking cooperativo, quindi puoi facilmente eseguire un'applicazione con CPU al 100% in modo da poter gestire i tuoi tempi molto meglio. Non aspettarti di fare altro che il tuo codice.
Ho trovato questa libreria ( pi-blaster ) che afferma di essere "estremamente efficiente: non usa la CPU e dà impulsi molto stabili".
Non l'ho ancora testato, ma aggiornerò non appena lo faccio (probabilmente oggi)