Pytanie:
Współpraca z odbiornikiem RC za pomocą PWM na GPIO
Wyatt
2012-09-27 08:29:52 UTC
view on stackexchange narkive permalink

Walczę przez kilka dni i nie udało mi się zbyt wiele pojawić w Internecie. Szukam CZYTAĆ z wyjścia PWM odbiornika RC przez jeden z GPIO na RPi. Czytałem inne pytania, w których nie nadaje się do "poważnego" PWM, ale nie zamierzam używać go jako wyjścia. Patrząc na bibliotekę WiringPi, znalazłem funkcje, które pozwalają mi pisać PWM, ale mam trudności z uzyskaniem czegokolwiek z GPIO, nawet przy ogólnych odczytach. Czuję , że powinienem móc zrobić tutaj coś takiego, jak ten samouczek, ale nie miałem szczęścia. Czy po prostu próbuję zrobić coś, co wykracza poza to, co dostarczyły jakiekolwiek biblioteki w tym momencie, czy jest coś głupiego prostego, którego mi brakuje, zanim będę musiał zagłębić się w pisanie kodu asemblera, aby połączyć się z rzeczą?

Pięć odpowiedzi:
#1
+3
Avio
2012-09-30 15:59:08 UTC
view on stackexchange narkive permalink

Nie mogę odpowiedzieć bezpośrednio na Twoje pytanie, ale mogę spróbować odpowiedzieć na odpowiedź Alexa Chamberlaina.

Uzyskanie prawdziwego możliwości czasowe w Linuksie, aż do rozdzielczości poniżej milisekundy, są możliwe. Aby to zrobić, do źródeł jądra należy nałożyć łatę lub zestaw łat. Aby zacytować kilka, można użyć Ingo Molnara RT-Preempt Patch, Xenomai, RTAI lub ADEOS. Więcej informacji można znaleźć tutaj, tutaj i tutaj.

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

To niemożliwe. Aby to zrobić, potrzebujesz dokładnego czasu, co nie jest możliwe w Linuksie.

Najlepszym rozwiązaniem jest wymyślenie, jak to zrobić na osobnym mikro i komunikowanie się z Raspberry Pi przez SPI lub I2C. Może nawet istnieć do tego istniejący układ scalony.

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

Możesz postępować zgodnie z tym poradnikiem: https://www.sparkfun.com/tutorials/348, a jedyną rzeczą do zrobienia jest zapisanie tych danych przez USB na twoim raspberry pi. Miłego kodowania :)

Witamy w Raspberry Pi! Chociaż może to teoretycznie odpowiedzieć na pytanie, [byłoby lepiej] (http://meta.stackoverflow.com/q/8259) zamieścić tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Również samouczek skierowany do arduino może opuścić PO z większą liczbą pytań niż odpowiedzi.
#4
+1
WineSoaked
2015-08-18 20:54:33 UTC
view on stackexchange narkive permalink

Moje rozumienie odczytu sygnałów PWM dla systemów innych niż rzeczywiste polegało na traktowaniu ich jako napięć analogowych (to prawda, przepuścić to przez obwód RC, a następnie odczytać napięcie za pomocą przetwornika analogowo-cyfrowego / ADC).

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

Więcej pracy inżynieryjnej, jasne, ale tańsze niż przykręcanie się do Arduino, aby wykonać w czasie rzeczywistym zadanie odczytu impulsów PWM z przerwaniem zmiany pinów: http://www.benripley.com/diy/arduino/ trzy-sposoby-odczytania-sygnału-pwm-z-arduino /

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

To dość dokładne zadanie odczytu pwm fq i dutyCycle, o ile sygnał jest < 50 Hz:

  #! / usr / bin / python2.7import RPi.GPIO jako gpiofrom import datetime datetimefrom czas importu sleep, timegpio.setmode (gpio.BCM) gpio.setup (2, gpio.IN) globalny wzrostCountglobal pulseWidthglobal timeStartrisingCount = 0pulseWidth = 0timeStart = 0def edgeDetected (kanał): globalny wzrostCount global pulseWidStart. (2): # narastające zbocze narastająceCount + = 1 czasStart = czas () else: # opadające zbocze if (riseCount! = 0): timePassed = time () - timeStart #make pulseWidth a pulseWidth = ((pulseWidth * (riseCount- 1)) + timePassed) /risingCountgpio.add_event_detect (2, gpio.BOTH, callback = edgeDetected) while True: sleep (1) print "PWM = {0} hz, dutyCycle = {1}%". Format (riseCount, round (pulseWidth * riseCount * 100,2)) riseCount = 0 pulseWidth = 0  

Nie zgadzam się ve możesz zwiększyć dokładność, wydłużając czas snu (pamiętaj, aby pomnożyć Hz przez 1 / czas snu) dla większych średnich.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...