Domanda:
Interfacciamento con un ricevitore RC utilizzando PWM sui GPIO
Wyatt
2012-09-27 08:29:52 UTC
view on stackexchange narkive permalink

Faccio fatica da alcuni giorni e non sono riuscito a trovare molto su Internet. Sto cercando di LEGGERE dall'uscita PWM di un ricevitore RC attraverso uno dei GPIO sull'RPi. Ho letto altre domande in cui non è adatto per PWM "serio" ma non sto cercando di usarlo come output. Guardando la libreria WiringPi, ho trovato funzioni che mi consentono di scrivere PWM, ma ho difficoltà a ottenere qualcosa dai GPIO, anche con letture generiche. Mi sembra che dovrei essere in grado di fare qualcosa come questo tutorial qui, ma non ho avuto fortuna. Sto solo cercando di fare qualcosa che va oltre ciò che le librerie hanno fornito a questo punto o c'è qualcosa di stupido e semplice che mi manca prima di dover scavare nella scrittura del codice assembly per interfacciarmi con l'oggetto?

Cinque risposte:
#1
+3
Avio
2012-09-30 15:59:08 UTC
view on stackexchange narkive permalink

Non posso rispondere direttamente alla tua domanda, ma posso provare a rispondere alla risposta di Alex Chamberlain.

Ottenere dati reali sono possibili funzionalità temporali in Linux, fino a una risoluzione inferiore al millisecondo. Per fare ciò, è necessario applicare una patch o un set di patch ai sorgenti del kernel. Per citarne alcuni, è possibile utilizzare RT-Preempt Patch di Ingo Molnar, Xenomai, RTAI o ADEOS. Puoi trovare ulteriori informazioni qui, qui e qui.

#2
+1
Alex Chamberlain
2012-09-27 12:21:15 UTC
view on stackexchange narkive permalink

Non è possibile. Per fare ciò, è necessario un tempismo preciso, cosa che non è possibile su Linux.

La soluzione migliore è capire come farlo su un micro separato e comunicare con il Raspberry Pi tramite SPI o I2C. Potrebbe anche esserci un CI esistente per questo.

#3
+1
veroy
2015-08-18 16:58:29 UTC
view on stackexchange narkive permalink

Puoi seguire questo tutorial: https://www.sparkfun.com/tutorials/348 e l'unica cosa da fare è scrivere questi dati tramite usb sul tuo raspberry pi.

Benvenuto in Raspberry Pi! Sebbene questo possa teoricamente rispondere alla domanda, [sarebbe preferibile] (http://meta.stackoverflow.com/q/8259) includere qui le parti essenziali della risposta e fornire il collegamento per riferimento. Anche un tutorial rivolto ad arduino potrebbe lasciare l'OP con più domande che risposte.
#4
+1
WineSoaked
2015-08-18 20:54:33 UTC
view on stackexchange narkive permalink

La mia comprensione della lettura dei segnali PWM per sistemi non in tempo reale è stata quella di trattarli come tensioni analogiche (esatto, farlo passare attraverso un circuito RC e quindi leggere la tensione utilizzando un convertitore analogico-digitale / ADC).

A proposito: http://www.instructables.com/id/Arduino-RC-Circuit-PWM-to-analog-DC/?ALLSTEPS

Più lavoro di ingegneria, certo, ma più economico che imbullonare un Arduino per svolgere il compito in tempo reale di leggere gli impulsi PWM con un interrupt di cambio pin: http://www.benripley.com/diy/arduino/ tre-modi-per-leggere-un-segnale-pwm-con-arduino /

#5
+1
mapt
2019-12-09 15:26:55 UTC
view on stackexchange narkive permalink

Questo fa un lavoro abbastanza accurato di lettura di pwm fq e dutyCycle, purché il segnale sia < 50hz:

  #! / usr / bin / python2.7import RPi.GPIO come gpiofrom datetime import datetimefrom time import sleep, timegpio.setmode (gpio.BCM) gpio.setup (2, gpio.IN) global risingCountglobal pulseWidthglobal timeStartrisingCount = 0pulseWidth = 0timeStart = 0def edgeDetected (canale): global risingCount global pulseStart time (2): #rising edge risingCount + = 1 timeStart = time () else: #falling edge if (risingCount! = 0): timePassed = time () - timeStart #make pulseWidth an average pulseWidth = ((pulseWidth * (risingCount- 1)) + timePassed) /risingCountgpio.add_event_detect (2, gpio.BOTH, callback = edgeDetected) while True: sleep (1) print "PWM = {0} hz, dutyCycle = {1}%". Format (risingCount, round (pulseWidth * risingCount * 100,2)) risingCount = 0 pulseWidth = 0  

Credo È possibile aumentare la precisione aumentando il tempo di sonno (ricordarsi di moltiplicare hz per 1 / tempo di sonno) per medie maggiori.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...