Frage:
Schnittstelle mit einem RC-Empfänger über PWM auf den GPIOs
Wyatt
2012-09-27 08:29:52 UTC
view on stackexchange narkive permalink

Ich habe seit ein paar Tagen Probleme und habe es nicht geschafft, im Internet viel aufzutauchen. Ich möchte vom PWM-Ausgang eines RC-Empfängers über einen der GPIOs auf dem RPi LESEN. Ich habe andere Fragen gelesen, bei denen es nicht für "ernsthafte" PWM geeignet ist, aber ich möchte es nicht als Ausgabe verwenden. In der WiringPi-Bibliothek habe ich Funktionen gefunden, mit denen ich PWM ausschreiben kann, aber es fällt mir schwer, irgendetwas von den GPIOs zu bekommen, selbst bei generischen Lesevorgängen. Es fühlt sich an, als ob ich in der Lage sein sollte, so etwas wie dieses Tutorial hier zu machen, aber ich hatte kein Glück. Versuche ich nur etwas zu tun, das über das hinausgeht, was Bibliotheken zu diesem Zeitpunkt bereitgestellt haben, oder fehlt mir etwas Dummes, bevor ich mich mit dem Schreiben von Assembler-Code befassen muss, um eine Schnittstelle mit dem Ding herzustellen?

Fünf antworten:
#1
+3
Avio
2012-09-30 15:59:08 UTC
view on stackexchange narkive permalink

Ich kann Ihre Frage nicht direkt beantworten, aber ich kann versuchen, auf die Antwort von Alex Chamberlain zu antworten.

Erhalten Sie hart real Zeitfunktionen unter Linux bis zu einer Auflösung von weniger als einer Millisekunde sind möglich. Dazu muss ein Patch oder eine Reihe von Patches auf die Kernelquellen angewendet werden. Um nur einige zu nennen, kann man Ingo Molnars RT-Preempt Patch, Xenomai, RTAI oder ADEOS verwenden. Weitere Informationen finden Sie hier, hier und hier.

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

Es ist nicht möglich. Dazu benötigen Sie ein genaues Timing, das unter Linux nicht möglich ist.

Am besten erarbeiten Sie dies auf einem separaten Mikro und kommunizieren mit dem Raspberry Pi über SPI oder I2C. Möglicherweise ist sogar ein IC dafür vorhanden.

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

Sie können diesem Tutorial folgen: https://www.sparkfun.com/tutorials/348 und dann müssen Sie diese Daten nur über USB in Ihre Himbeer-Pi schreiben. Glückliche Codierung :)

Willkommen bei Raspberry Pi! Während dies theoretisch die Frage beantworten kann, [wäre es vorzuziehen] (http://meta.stackoverflow.com/q/8259), die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Auch ein Tutorial, das sich an das Arduino richtet, kann das OP mit mehr Fragen als Antworten verlassen.
#4
+1
WineSoaked
2015-08-18 20:54:33 UTC
view on stackexchange narkive permalink

Mein Verständnis des Lesens von PWM-Signalen für Nicht-Echtzeitsysteme bestand darin, sie als analoge Spannungen zu behandeln (das ist richtig, führen Sie sie durch eine RC-Schaltung und lesen Sie dann die Spannung mit einem Analog-Digital-Wandler / ADC).

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

Sicherlich mehr technische Arbeit, aber billiger als das Anschrauben eines Arduino, um die Echtzeit-Arbeit des Lesens von PWM-Impulsen mit einem Pin-Wechsel-Interrupt zu erledigen: http://www.benripley.com/diy/arduino/ Drei-Wege-zum-Lesen-eines-PWM-Signals mit Arduino /

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

Dies macht eine ziemlich genaue Arbeit beim Lesen von pwm fq undutyCycle, solange das Signal < 50hz ist:

  #! / usr / bin / python2.7import RPi.GPIO als gpiofrom datetime import datetimefrom time import sleep, timegpio.setmode (gpio.BCM) gpio.setup (2, gpio.IN) global aufsteigend (2): # steigende Flanke aufsteigende Anzahl + = 1 timeStart = time () sonst: # fallende Flanke if (steigende Anzahl! = 0): timePassed = Zeit () - timeStart #puls machenBreite eine durchschnittliche Impulsbreite = ((Impulsbreite * (steigende Anzahl-) 1)) + timePassed) /risingCountgpio.add_event_detect (2, gpio.BOTH, callback = edgeDetected) während True: sleep (1) drucke "PWM = {0} hz ,utyCycle = {1}%". Format (aufsteigende Anzahl, rund (pulsbreite * steigende Anzahl * 100,2)) steigende Anzahl = 0 pulsbreite = 0  

Ich glaube Sie können die Genauigkeit erhöhen, indem Sie die Schlafzeit für größere Durchschnittswerte erhöhen (denken Sie daran, Hz mit 1 / Schlafzeit zu multiplizieren).



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...