Czy mogę używać GPIO jako wyjścia modulacji szerokości impulsu ?
Jeśli tak, jak mam się do tego zabrać i ile równoległych, odrębnych wyjść PWM mogę mieć?
Komentarze
- Ty prawdopodobnie musisz określić, którego modelu ' używasz. Wszystkie są nieco inne.
- @ user1147688 To pytanie zostało zadane, gdy istniał tylko jeden model!
Odpowiedź
Zgodnie z sugestią Alex Chamberlain pojawia się biblioteka WiringPi do obsługi zarówno sprzętowego wyjścia PWM na jednym lub dwóch pinach GPIO, w zależności od modelu, oraz programowego PWM na którymkolwiek z pozostałych pinów GPIO. W międzyczasie biblioteka RPIO.PWM wykonuje PWM przez DMA na dowolnym pinie GPIO. W rzeczywistości jest to półmetek między sprzętowym a programowym PWM, zapewniający rozdzielczość taktowania 1 µs w porównaniu do 100 µs z WiringPi „s Oprogramowanie PWM [1] .
To, które z nich jest odpowiednie dla twoich aplikacji, zależy od tego, ile wyjść PWM potrzebujesz i jakiej wydajności oczekujesz od tych wyjść.
Jeśli Twoja aplikacja toleruje niską rozdzielczość taktowania i wysokie jitter , możesz użyć programowej lub wspomaganej pętli czasowej DMA. Jeśli potrzebujesz większej precyzji / niższy jitter PWM, wtedy możesz potrzebować pomocy sprzętowej.
Kiedy programowy PWM może być odpowiedni?
Jeśli chcesz błyskać kilka diod LED z różnymi widzialnymi dla człowieka kadencjami (10 cali hertz) z wymaganiami łagodnego czasu rzeczywistego , wtedy pętla oprogramowania może obsłużyć tyle PWM, ile masz pinów GPIO.
Kiedy czy sprzętowe PWM może być odpowiednie?
Jeśli chcesz sterować serwem o silnik z twardymi wymaganiami w czasie rzeczywistym , wtedy będziesz musiał użyć sprzętowego PWM. Nawet wtedy możesz mieć problemy z zapewnieniem odpowiedzi w czasie rzeczywistym dla pętli serwomechanizmu, która wiąże wejście kodera z wyjściem PWM.
Stabilna pętla serwa trzeba czytać enkodery z regularną częstotliwością (niski jitter), zapisywać poprawione wartości wyjściowe PWM z regularną szybkością, a opóźnienie między nimi powinno być stałe (ogólnie niski jitter). Jeśli nie możesz tego zrobić, będziesz musiał dostroić (miękko dostroić) swój silnik, aby zapobiec jego niestabilności pod obciążeniem. Jest to trudne do wykonania w wielozadaniowym systemie operacyjnym bez wsparcia niskiego poziomu.
A jeśli potrzebuję więcej sprzętowych wyjść PWM?
Jeśli potrzebujesz uruchomić więcej pętli serwomechanizmów niż masz sprzętowe wyjścia PWM, prawdopodobnie będziesz musiał przeładować je na inne urządzenie, aby zapewnić wydajność w czasie rzeczywistym, obniżając pozycję Raspberry Pi do roli łagodnego nadzorcy w czasie rzeczywistym.
Jedną z opcji byłoby coś w rodzaju Adafruit 16-kanałowy 12-bitowy sterownik PWM / Servo Driver – interfejs I²C – PCA9685 , który umożliwia sterowanie 16 wyjściami PWM za pomocą zaledwie kilku pinów GPIO dla magistrali I²C. sprawdź I²C 16 Channel PWM / Servo Breakout – Working na forach Raspberry Pi.
1. Dzięki dm76 dla sugestii, jednak heather mówi, że RPIO.PWM może już nie działać dla nowszych modeli pi.
Komentarze
- Czy mogę używać podejścia programowego PWM do uruchamiania silników prądu stałego?
- @gideon – Tak, wszystkie wzmacniacze mocy silników, których używałem, miały PWM jako dane wejściowe.
- FYI, biblioteka RPI ( pythonhosted.org/RPIO/pwm_py.html ) wydaje się mieć znacznie lepszą rozdzielczość (1us) w porównaniu do WiringPi z Rozdzielczość 100us
- @MarkBooth – Brak problemów. Biblioteka jest naprawdę dobrze napisana i może być używana jako zamiennik RPi.GPIO, co jest bardzo przydatne, jeśli zacząłeś projekt z tym drugim, a później okazało się, że potrzebne są sygnały PWM …
- RPIO. Myślę, że PWM może już nie działać w nowszych modelach pi.
Odpowiedź
Sprzętowe PWM
Tak, jest jedno wyjście sprzętowe PWM na Raspberry Pi, podłączone do P1-12 (GPIO18). Ponadto wyjścia PWM można dodać za pomocą interfejsu I²C lub SPI ; niektórym osobom się to udało ( post na forum ).
Przykładowy kod
Możesz użyć Biblioteka WiringPi do sterowania pinem PWM; możesz spojrzeć na kod, aby uniknąć włączenia całej biblioteki.
Oprogramowanie PWM
Raspberry Pi nie nadaje się do żadnego poważnego oprogramowania PWM, ponieważ Linux nie jest systemem operacyjnym czasu rzeczywistego .
Komentarze
- Pytanie, jaka jest definicja lub przykład poważnego oprogramowania PWM? A czym są ” systemy operacyjne czasu rzeczywistego ” i czy jest jakakolwiek szansa na uzyskanie takiego na Pi
- @AnthonyBlake No cóż, pewnie można sterować jasnością światła za pomocą programowego PWM, ale podejrzewam, że silnik się zgaśnie. Jednak ' nie ma potrzeby wykonywania programowego PWM, sprzęt jest prostszy i wydajniejszy. Systemy operacyjne czasu rzeczywistego zostaną lepiej wyjaśnione przez Google; gwarantują pewne rzeczy dotyczące czasu i częstotliwości działania oprogramowania.
- @AnthonyBlake A ” System operacyjny czasu rzeczywistego ” (RTOS) to system operacyjny, który daje gwarancję górnego limitu czasu wykonania. Tak jak mówienie do programu ” Tak, będziesz mieć trochę czasu wykonania w 33 ms (z tolerancją 2 ms), aby odwrócić ten bit pinu GPIO, aby dać silnikowi krokowemu sygnał dokładnie okno czasowe, kiedy tego potrzebuje. Możesz na tym polegać! ” Istnieje ' RT Linux. Nie ' nie wiem, czy ' zostało (jeszcze) przeniesione do RPi.
- Przepraszam Alex, ja nie ' celowo nie ukradłem innej części Twojej odpowiedzi, ale ' właśnie zauważyłem, że dotarliśmy do tego samego posta na forum różnymi drogami .
- Nowsze modele z 40 pinami mają drugi sprzętowy PWM podłączony do GPIO19 (pin 35).
Odpowiedź
Ostatnio Pis ma dwa sprzętowe kanały PWM. Dodatkowo, taktowane sprzętowo impulsy PWM mogą być niezależnie generowane na wszystkich GPIO podłączonych do 40-pinowego nagłówka rozszerzającego.
W praktyce oznacza to, że istnieją dwa bardzo dokładne kanały PWM, a wszystkie inne GPIO mogą mieć PWM w stylu Arduino. (800 Hz, 0 wyłączone – 255 całkowicie włączone).
Np servoblaster i mój pigpio itp.
Komentarze
- Dobra odpowiedź! Jak mogę korzystać z tych dwóch HW PWM? Muszę sterować 2 serwami, wiem, że mówisz, że servoblaster i pigpio są w porządku, ale zastanawiam się tylko nad HW PWM, bo nie mogę nic o nich znaleźć … czy są tam jakieś dokumenty? Mam RPi 2 V1.1 do testów.
- C , Python , wiersz poleceń świń .
- Duże obciążenie procesora nie powinno ' t różnica. Duże obciążenie sieci może mieć wpływ na gpioServo, zwłaszcza jeśli próbkowanie odbywa się z częstotliwością 1 MHz, a nie domyślnym 200 kHz. Częstotliwość wynosi 50 (Hz), zakres cykli pracy będzie wynosił 0 – 1000000 (odwzorowany na rzeczywistą wartość bazową 0 – 5000000). 1 ms to 1 ms na 20 ms, więc cykl roboczy wynosi 5%, czyli 50000, 1,5 ms- > 7,5% – > 75000, 2 ms – > 10% – > 100000.
- Strona 102 z BCM2835 ARM Peripherals pokazuje różne tryby, które można przypisać do GPIO. Poszukaj w trybie online, dla których GPIO są wyprowadzone do różnych nagłówków rozszerzeń modelu Pi.
- @ user1147688 PLLD (500 MHz) jest używany jako rdzeń zegara PWM. Ze względu na sposób działania ” ” rdzenia PWM częstotliwość wynosi 250 MHz. Aby móc włączać i wyłączać (bardzo istotne dla PWM), maksymalna częstotliwość to 125 MHz. Liczby można podwoić, używając PLLC (1000 MHz), ale PLL zmienia się wraz z taktowaniem rdzenia.
Odpowiedź
System operacyjny niezupełnie działający w czasie rzeczywistym, ale RISC OS dla Raspberry Pi to wielozadaniowość oparta na współpracy, więc możesz łatwo uruchomić aplikację, która ma 100% CPU, możesz znacznie lepiej zarządzać swoim czasem. Po prostu nie spodziewaj się robić niczego innego niż własny kod.
Komentarze
- Gdzieś czytałem, że istnieje ograniczenie sprzętowe co do przełączania częstotliwość styku wyjściowego również. Myślę, że było to około 20 MHz. Więc nie ' nie spodziewaj się, że będzie w stanie wyciągnąć 300 MHz PWM lub cokolwiek podobnego, nawet przy 100 % Wykorzystania procesora.
- @Wallacoloo: Jakie aplikacje wymagają 300 MHz PWM?
- @PeterMortensen: Cóż, nie ' nie wiem jak radio nadajniki i takie generują swoje sygnały, ale niektórzy mogą to zrobić z PWM. PiFM robi to przy 100 MHz. Wydaje się to jednak sprzeczne z moim komentarzem, więc zastanawiam się, czy może nadal można sterować pinem na tej częstotliwości, ale to ' polega tylko na tym, że pojemność styku tłumi takie sygnały, tak że fala prostokątna 100 MHz może w rzeczywistości oscylować z np. (1,0 V, 2,3 V) zamiast pełnego (0 V, 3,3 V) zasięg.
Odpowiedź
Udało mi się znaleźć tę bibliotekę ( pi -blaster ), który twierdzi, że jest „niezwykle wydajny: nie używa procesora i daje bardzo stabilne impulsy”.
Jeszcze go nie testowałem, ale zaktualizuję, gdy tylko to zrobię (prawdopodobnie dzisiaj)
Komentarze
- ' Próbowałem tego, ale jak dotąd bez powodzenia. O ile wiem, nie ' tak naprawdę nie przełączasz sprzętu?
- Po prostu chcę to zmienić. Pi-blaster zadziałał dla mnie tam, gdzie te inne odpowiedzi nie.