Czy mogę używać GPIO jako wyjścia modulacji szerokości impulsu ?
Jeśli tak, jak bym to zrobił i ile mogę mieć równoległych, odrębnych wyjść PWM?
Czy mogę używać GPIO jako wyjścia modulacji szerokości impulsu ?
Jeśli tak, jak bym to zrobił i ile mogę mieć równoległych, odrębnych wyjść PWM?
Odpowiedzi:
Jak sugeruje Alex Chamberlain , biblioteka WiringPi wydaje się obsługiwać zarówno sprzętowe wyjście PWM na jednym lub dwóch pinach GPIO, w zależności od modelu, jak i oprogramowanie PWM na dowolnym z pozostałych pinów GPIO. Tymczasem biblioteka RPIO.PWM wykonuje PWM przez DMA na dowolnym pinie GPIO. W rzeczywistości jest to połowa drogi pomiędzy sprzętem a oprogramowaniem PWM, zapewniając rozdzielczość czasową 1 µs w porównaniu do 100 µs z oprogramowaniem PWM WiringPi [1] .
To, które z nich jest odpowiednie dla twoich aplikacji, zależy od tego, ile wyjść PWM potrzebujesz i jakiej wydajności chcesz z tych wyjść.
Jeśli Twoja aplikacja toleruje niską rozdzielczość i wysokie jitter, możesz użyć oprogramowania lub pętli synchronizacji DMA. Jeśli chcesz PWM o wyższej precyzji / niższych jitterach, możesz potrzebować pomocy sprzętowej.
Kiedy oprogramowanie PWM może być odpowiednie?
Jeśli chcesz sflashować wiązkę diod LED z różnymi ludzkimi kadencjami (10 herców) z miękkimi wymaganiami w czasie rzeczywistym, wówczas pętla programowa może obsłużyć tyle PWM, ile masz pinów GPIO.
Kiedy sprzętowy PWM może być odpowiedni?
Jeśli chcesz sterować serwosilnikiem wymagającym szybkiej reakcji w czasie rzeczywistym , musisz użyć sprzętowego PWM. Nawet wtedy możesz mieć problemy z zapewnieniem odpowiedzi w czasie rzeczywistym dla pętli serwomechanizmu, która łączy wejście enkodera z wyjściem PWM.
Stabilna pętla serwo musi odczytywać enkodery ze stałą szybkością (niski jitter), zapisywać zmienione wartości wyjściowe PWM z regularną szybkością, a opóźnienie między nimi powinno być ustalone (ogólnie niski jitter). Jeśli nie możesz tego zrobić, będziesz musiał dostroić (dostroić) silnik, aby zapobiec jego niestabilności pod obciążeniem. Trudno to zrobić z wielozadaniowym systemem operacyjnym bez obsługi niskiego poziomu.
Co jeśli potrzebuję więcej sprzętowych wyjść PWM?
Jeśli potrzebujesz uruchomić więcej pętli serwomechanizmu niż masz sprzętowe wyjścia PWM, prawdopodobnie będziesz musiał przenieść je na inne urządzenie, aby zapewnić wysoką wydajność w czasie rzeczywistym, co spowoduje, że Raspberry Pi będzie miękkim nadzorcą w czasie rzeczywistym .
Jedną opcją byłoby coś w rodzaju 16-kanałowego 12-bitowego sterownika PWM / serwomechanizmu Adafruit - interfejs I²C - PCA9685, który pozwalałby kontrolować 16 wyjść PWM za pomocą zaledwie kilku pinów GPIO dla magistrali I²C. Jako przykład jego zastosowania można znaleźć 16-kanałowy kanał PWM / Servo Breakout I²C - Kanał roboczy na forach Raspberry Pi.
1. Dzięki dm76 za sugestię, jednak heather mówi, że RPIO.PWM może już nie działać w nowszych modelach pi.
źródło
Sprzęt PWM
Tak, jest jedno wyjście sprzętowe PWM na Raspberry Pi, podłączone do P1-12 (GPIO18). Ponadto wyjścia PWM można dodawać przy użyciu interfejsu I²C lub SPI ; niektórym udało się to osiągnąć ( post na forum ).
Przykładowy kod
Możesz użyć biblioteki WiringPi do sterowania stykiem 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.
źródło
Najnowsze Pis mają dwa sprzętowe kanały PWM. Ponadto sprzętowo synchronizowane PWM impulsy mogą być generowane niezależnie na wszystkich GPIO podłączonych do 40-pinowego złącza rozszerzającego.
W praktyce oznacza to, że istnieją dwa bardzo dokładne kanały PWM, a wszystkie pozostałe GPIO mogą mieć PWM w stylu Arduino (800 Hz, 0 wyłączone - 255 całkowicie włączone).
Np. Servoblaster i mój pigpio itp.
źródło
Nie jest to system operacyjny działający w czasie rzeczywistym, ale system operacyjny RISC dla Raspberry Pi to wielozadaniowość kooperacyjna, dzięki czemu można łatwo uruchomić aplikację, która ma 100% procesora, dzięki czemu można znacznie lepiej zarządzać taktowaniem. Po prostu nie oczekuj, że zrobisz coś innego niż własny kod.
źródło
Znalazłem tę bibliotekę ( pi-blaster ), która twierdzi, że jest „wyjątkowo wydajna: nie używa procesora i daje bardzo stabilne impulsy”.
Jeszcze go nie testowałem, ale zaktualizuję go tak szybko, jak to zrobię (prawdopodobnie dzisiaj)
źródło