Posso utilizzare GPIO come output di modulazione di larghezza di impulso ?

In tal caso, come dovrei farlo e quanti output PWM distinti e simultanei posso avere?

Commenti

  • Tu probabilmente è necessario specificare quale modello ‘ stai utilizzando. Sono tutti leggermente diversi.
  • @ user1147688 Questa domanda è stata posta quando cera un solo modello!

Risposta

Come suggerito da Alex Chamberlain , viene visualizzata la libreria WiringPi per supportare sia luscita 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 mediante DMA su qualsiasi pin GPIO. In effetti questa è una via di mezzo tra hardware e software PWM, fornendo una risoluzione di temporizzazione di 1   µs rispetto a 100   µs con WiringPi ” Software PWM [1] .

Quale di questi è adatto alle tue applicazioni dipende dal numero di uscite PWM di cui hai bisogno e dalle prestazioni che vuoi ottenere da quelle uscite.

Se la tua applicazione tollera una risoluzione a bassa temporizzazione e un elevato jitter , puoi utilizzare un software o un loop di temporizzazione assistito da DMA. Se desideri una maggiore precisione / PWM con jitter inferiore, potresti aver bisogno di assistenza hardware.

Quando potrebbe essere adatto il PWM software?

Se desideri far lampeggiare un gruppo di LED con cadenze diverse visibili dalluomo (10 “s di hertz) con soft real-time requisiti di risposta, il loop del software potrebbe gestire tanti PWM quanti sono i pin GPIO.

Quando potrebbe essere adatto il PWM hardware?

Se vuoi controllare un serv o motore con requisiti di risposta hard real-time , sarà necessario utilizzare PWM hardware. Anche in questo caso potresti avere problemi a garantire una risposta in tempo reale per il servo loop che lega lingresso dellencoder alluscita PWM.

Un servo loop è necessario leggere gli encoder a una velocità regolare (jitter basso), scrivere valori di uscita PWM modificati a una velocità regolare e la latenza tra questi dovrebbe essere corretta (jitter basso in generale). Se non è possibile eseguire questa operazione, sarà necessario eseguire la sintonizzazione parziale (regolazione graduale) del motore per evitare che diventi instabile sotto carico. Questo è difficile da fare con un sistema operativo multi-tasking senza supporto di basso livello.

E se avessi bisogno di più uscite PWM hardware?

Se hai bisogno di eseguire più loop servo di quanti ne hai uscite PWM hardware, allora probabilmente dovrai scaricarli su un altro dispositivo per assicurarti prestazioni in tempo reale, relegando il tuo Raspberry Pi ad essere un morbido supervisore in tempo reale.

Unopzione, sarebbe qualcosa come Adafruit 16 canali PWM / servoazionamento 12 bit – Interfaccia I²C – PCA9685 che ti consentirebbe di controllare 16 uscite PWM con pochi pin di GPIO per il bus I²C. Per un esempio del suo utilizzo, controlla il post I²C 16 Channel PWM / Servo Breakout – Working sui forum Raspberry Pi.

1. Grazie a dm76 per il suggerimento, tuttavia heather dice che RPIO.PWM potrebbe non funzionare più per i modelli pi più recenti.

Commenti

  • Posso utilizzare lapproccio PWM del software per eseguire motori DC?
  • @gideon – Sì, gli amplificatori di potenza del motore che ho utilizzato hanno tutti preso PWM come input.
  • Cordiali saluti, la libreria RPI ( pythonhosted.org/RPIO/pwm_py.html ) sembra avere una risoluzione molto migliore (1us) rispetto a WiringPi con Risoluzione 100us
  • @MarkBooth – Nessun problema. La libreria è davvero ben scritta e può essere usata come sostituto drop-in per RPi.GPIO, cosa molto utile se hai iniziato un progetto con questultimo e in seguito hai capito che erano necessari segnali PWM …
  • RPIO. Il PWM potrebbe non funzionare più con i modelli pi più recenti, credo.

Answer

Hardware PWM

Sì, cè unuscita PWM hardware sul Raspberry Pi, collegata a P1-12 (GPIO18). Inoltre, è possibile aggiungere output PWM utilizzando uninterfaccia I²C o SPI ; alcune persone hanno avuto successo con questo ( post del forum ).

Codice di esempio

Puoi utilizzare il libreria WiringPi per controllare il pin PWM; potresti guardare il codice per evitare di includere lintera libreria.

Software PWM

Il Raspberry Pi non è adatto a nessun software serio PWM in quanto Linux non è un sistema operativo in tempo reale .

Commenti

  • Domanda, qual è la definizione o un esempio di software PWM serio? E quali sono i ” sistemi operativi in tempo reale ” e cè mai la possibilità di averne uno su un Pi
  • @AnthonyBlake Beh, probabilmente puoi controllare la luminosità di una luce usando il software PWM, ma sospetto che un motore si fermerà. Tuttavia, ‘ non è necessario utilizzare il software PWM, lhardware è più semplice ed efficace. I sistemi operativi in tempo reale saranno meglio spiegati da Google; garantiscono determinate cose sulla durata e la frequenza di esecuzione del software.
  • @AnthonyBlake A ” Real-Time OS ” (RTOS) è un sistema operativo che ti dà una garanzia sul limite di tempo massimo di esecuzione. Come dire al programma ” Sì, avrai un po di tempo di esecuzione in 33 ms (dare o prendere 2 ms di tolleranza) per capovolgere quel bit del pin GPIO per dare al tuo motore passo-passo un segnale esattamente finestra temporale in cui ne ha bisogno. E puoi fare affidamento su questo! ” Cè ‘ un RT Linux là fuori. Non ‘ sapere se ‘ è stato trasferito (ancora) su RPi.
  • Scusa Alex, io non ‘ t rubato intenzionalmente unaltra parte della tua risposta, ma ‘ ho appena notato che siamo arrivati allo stesso post del forum tramite percorsi diversi .
  • I modelli più recenti con 40 pin hanno un secondo PWM hardware collegato a GPIO19 (pin 35).

Risposta

I Pis recenti hanno due canali PWM hardware. Inoltre gli impulsi PWM temporizzati hardware possono essere generati indipendentemente su tutti i GPIO collegati allheader 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 stile Arduino (800 Hz, 0 spento – 255 completamente acceso).

Ad es servoblaster e il mio pigpio e così via

Commenti

  • Bella risposta! Come posso utilizzare questi due HW PWM? Ho bisogno di controllare 2 servi, so che dici che servoblaster e pigpio vanno bene per quello, ma mi chiedo solo lHW PWM, perché non riesco a trovare nulla su di loro … ci sono alcuni documenti per questo là fuori? Ho un RPi 2 V1.1 per i test.
  • C , Python , pigs riga di comando .
  • Il carico pesante della CPU non dovrebbe ‘ creare un differenza. Un carico di rete pesante può fare la differenza per gpioServo, specialmente se campiona a 1MHz piuttosto che a 200kHz di default. La frequenza è 50 (Hz), la gamma dei cicli di lavoro sarà 0 – 1000000 (mappata al valore reale sottostante di 0 – 5000000). 1 ms è 1 ms in 20 ms, quindi un ciclo di carico del 5% quindi 50000, 1,5 ms- > 7,5% – > 75000, 2 ms – > 10% – > 100000.
  • Pagina 102 di Periferiche ARM BCM2835 mostra le varie modalità che possono essere assegnate al GPIO. Cerca on-line quali GPIO sono indirizzati alle varie intestazioni di espansione del modello Pi.
  • @ user1147688 PLLD (500MHz) viene utilizzato come clock PWM principale. A causa del modo in cui ” ” funziona, la frequenza di base PWM è 250 MHz. Per poter accendere e spegnere (abbastanza essenziale per PWM) il massimo è 125 MHz. Puoi raddoppiare le cifre utilizzando PLLC (1000 MHz), ma tale PLL varia con la velocità del core clock.

Answer

Non proprio un sistema operativo in tempo reale, ma RISC OS per Raspberry Pi è multitasking cooperativo, quindi puoi eseguire facilmente unapplicazione con CPU al 100% in modo puoi gestire i tuoi tempi molto meglio. Solo non aspettarti di fare nientaltro che il tuo codice.

Commenti

  • Ho letto da qualche parte che cè un limite hardware per quanto riguarda il cambio anche la frequenza di un pin di uscita. Penso che fosse di circa 20 MHz. Quindi non ‘ t aspettarti di essere in grado di tirare PWM a 300 MHz o qualcosa del genere, anche con 100 % Utilizzo CPU.
  • @Wallacoloo: quali applicazioni richiedono PWM a 300 MHz?
  • @PeterMortensen: Beh, ‘ non so come fare la radio trasmettitori e simili generano i loro segnali, ma alcuni potrebbero farlo con PWM. PiFM lo fa a 100 MHz. Ciò sembra contraddire il mio commento, quindi mi chiedo se forse il pin può ancora essere comandato a quella frequenza, ma ‘ è solo che la capacità del pin attenua tali segnali, in modo che unonda quadra da 100 MHz possa effettivamente oscillare da es. (1,0 V, 2,3 V) invece che da piena (0 V, 3,3 V) gamma.

Risposta

Ho trovato questa libreria ( pi -blaster ) che afferma di essere “estremamente efficiente: non usa la CPU e dà impulsi molto stabili”.

Non lho ancora testato, ma lo aggiornerò non appena lo farò (probabilmente oggi)

Commenti

  • ‘ lho provato ma finora senza fortuna. Per quanto ne so, ‘ non cambia davvero lhardware?
  • Voglio solo battere questo. Pi-blaster ha funzionato per me dove queste altre risposte no.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *