Kan ik de GPIO gebruiken als een pulsbreedtemodulatie -uitgang?

Zo ja, hoe zou ik het doen en hoeveel gelijktijdige, verschillende PWM-uitgangen kan ik hebben?

Reacties

  • Jij waarschijnlijk moet u aangeven welk model u ‘ gebruikt. Ze zijn allemaal een beetje anders.
  • @ user1147688 Deze vraag werd gesteld toen er maar één model was!

Antwoord

Zoals voorgesteld door Alex Chamberlain , verschijnt de WiringPi -bibliotheek ter ondersteuning van zowel hardware PWM-uitvoer op een of twee GPIO-pinnen, afhankelijk van het model, en software PWM op een van de andere GPIO-pinnen. Ondertussen doet de RPIO.PWM-bibliotheek PWM door DMA op elke GPIO-pin. In feite is dit een tussenweg tussen hardware en software PWM, met een timingresolutie van 1   µs vergeleken met 100   µs met WiringPi “s Software PWM [1] .

Welke van deze geschikt is voor uw toepassingen hangt af van hoeveel PWM-uitgangen u nodig heeft en welke prestaties u van die uitgangen wilt.

Als uw toepassing tolerant is voor een lage timingresolutie en hoge jitter , dan kunt u een door software of DMA ondersteunde timinglus gebruiken. Als u een hogere precisie / lagere jitter PWM, dan heb je misschien hardware-assistentie nodig.

Wanneer is software PWM geschikt?

Als je een aantal LEDs wilt laten knipperen met verschillende menselijke zichtbare cadans (10 “s van hertz) met zachte real-time responsvereisten, dan kan de softwareloop net zoveel PWMs aan als je GPIO-pinnen hebt.

Wanneer is hardware PWM geschikt?

Als je een serv o motor met harde real-time responsvereisten, dan moet u hardware PWM gebruiken. Zelfs dan kunt u problemen hebben met het verzekeren van een real-time respons voor de servolus die de encoderinvoer aan de PWM-uitvoer koppelt.

Een stabiele servolus moeten encoders met een regelmatige snelheid lezen (lage jitter), herziene PWM-uitvoerwaarden met een regelmatige snelheid schrijven en de latentie tussen deze moet worden vastgesteld (lage jitter in het algemeen). Als je dit niet kunt, dan moet je je motor zacht afstemmen (zacht afstemmen) om te voorkomen dat deze onder belasting instabiel wordt. Dit is moeilijk te doen met een multi-tasking besturingssysteem zonder low-level ondersteuning.

Wat als ik meer hardware PWM-uitgangen nodig heb?

Als je meer servolussen moet draaien dan hardware PWM-uitgangen, dan zul je ze waarschijnlijk naar een ander apparaat moeten overzetten om te zorgen dat realtime prestaties, waardoor uw Raspberry Pi wordt gedegradeerd tot een zachte realtime supervisor .

Een optie zou zoiets zijn als de Adafruit 16-kanaals 12-bits PWM / Servo-stuurprogramma – I²C-interface – PCA9685 waarmee u 16 PWM-uitgangen kunt besturen met slechts een paar pinnen GPIO voor de I²C-bus. Als voorbeeld van het gebruik, bekijk de I²C 16-kanaals PWM / Servo Breakout – Working post op de Raspberry Pi-forums.

1. Met dank aan dm76 voor de suggestie, echter heather zegt dat RPIO.PWM mogelijk niet langer werkt voor nieuwere pi-modellen.

Reacties

  • Kan ik de software PWM-benadering gebruiken om DC-motoren te laten draaien?
  • @gideon – Ja, de motorvermogensversterkers die ik heb gebruikt, hebben allemaal PWM als input genomen.
  • Ter info: de RPI-bibliotheek ( pythonhosted.org/RPIO/pwm_py.html ) lijkt een veel betere resolutie (1us) te hebben in vergelijking met WiringPi met 100us resolutie
  • @MarkBooth – Geen problemen. De bibliotheek is echt goed geschreven en kan worden gebruikt als drop-in vervanging voor RPi.GPIO, wat erg handig is als je een project startte met de laatste en later realiseerde dat PWM-signalen nodig waren …
  • RPIO. PWM werkt misschien niet meer voor nieuwere pi-modellen, denk ik.

Answer

Hardware PWM

Ja, er is één hardware PWM-uitgang op de Raspberry Pi, aangesloten op P1-12 (GPIO18). Verder kunnen PWM-uitgangen worden toegevoegd met behulp van een I²C of SPI -interface; sommige mensen hebben hier succes mee gehad ( forumbericht ).

Voorbeeldcode

Je kunt de WiringPi-bibliotheek om de PWM-pin te besturen; je zou naar de code kunnen kijken om te voorkomen dat je de hele bibliotheek opneemt.

Software PWM

De Raspberry Pi is niet geschikt voor serieuze software PWM aangezien Linux geen real-time besturingssysteem is .

Reacties

  • Vraag, wat is de definitie of een voorbeeld van serieuze software PWM? En wat zijn ” realtime besturingssystemen ” en is er ooit een kans om er een te krijgen op een Pi
  • @AnthonyBlake Nou, je kunt de helderheid van een lamp waarschijnlijk regelen met software PWM, maar ik vermoed dat een motor afslaat. Er is ‘ echter geen behoefte aan software PWM, hardware is eenvoudiger en effectiever. Real-time besturingssystemen worden beter uitgelegd door Google; ze garanderen bepaalde dingen over hoe lang en vaak software wordt uitgevoerd.
  • @AnthonyBlake A ” Real-time OS ” (RTOS) is een besturingssysteem dat u een garantie geeft op de maximale uitvoeringstermijn. Zoals tegen het programma zeggen ” Ja, je zult wat uitvoeringstijd hebben in 33 ms (geef of neem 2 ms tolerantie) om die GPIO-pinbit om te draaien om je stappenmotor een signaal te geven in de exacte tijdvenster wanneer hij het nodig heeft. En daar kunt u op vertrouwen! ” Er is ‘ een RT Linux die er is. ‘ weet niet of het ‘ is geporteerd naar de RPi (nog).
  • Sorry Alex, ik heb ‘ t niet opzettelijk een ander deel van je antwoord gestolen, maar ik ‘ heb net gemerkt dat we via verschillende routes bij hetzelfde forumbericht kwamen .
  • Nieuwere modellen met 40 pinnen hebben een tweede hardware-PWM die is aangesloten op GPIO19 (pin 35).

Antwoord

Recente Pis hebben twee hardware PWM-kanalen. Bovendien kunnen hardwarematige PWM-pulsen onafhankelijk worden gegenereerd op alle GPIOs die zijn aangesloten op de 40-pins uitbreidingskop.

In de praktijk betekent dit dat er twee zeer nauwkeurige PWM-kanalen zijn en dat alle andere GPIOs mogelijk een Arduino-stijl PWM hebben (800 Hz, 0 uit – 255 volledig aan).

Bijv servoblaster en mijn pigpio , enz.

Reacties

  • Leuk antwoord! Hoe kan ik die twee HW PWMs gebruiken? Ik moet 2 servos besturen, ik weet dat je zegt dat servoblaster en pigpio daar goed voor zijn, maar ik vraag me gewoon af wat de HW PWM is, omdat ik er niets over kan vinden … zijn er daar een paar documenten voor? Ik heb een RPi 2 V1.1 voor tests.
  • C , Python , pigs-opdrachtregel .
  • Zware CPU-belasting mag ‘ geen verschil. Een zware netwerkbelasting kan een verschil maken voor gpioServo, vooral als bemonstering op 1 MHz in plaats van de standaard 200 kHz. De frequentie is 50 (Hz), het bereik van de werkcycli is 0 – 1000000 (toegewezen aan de werkelijke onderliggende waarde van 0 – 5000000). 1 ms is 1 ms in 20 ms, dus een dutycycle van 5% dus 50000, 1,5 ms- > 7,5% – > 75000, 2 ms – > 10% – > 100000.
  • Pagina 102 van BCM2835 ARM-randapparatuur toont de verschillende modi die de GPIO kan worden toegewezen. Kijk online voor welke GPIO naar de verschillende uitbreidingsheaders van het Pi-model wordt geleid.
  • @ user1147688 PLLD (500MHz) wordt gebruikt als de kern-PWM-klok. Vanwege de manier waarop ” het ” werkt, is de PWM-kernfrequentie 250 MHz. Om aan en uit te kunnen schakelen (vrij essentieel voor PWM) is het maximum 125 MHz. Je zou de cijfers kunnen verdubbelen door PLLC (1000 MHz) te gebruiken, maar die PLL varieert met de kloksnelheid van de kern.

Antwoord

Niet echt een real-time besturingssysteem, maar RISC OS voor Raspberry Pi is coöperatieve multitasking, dus je kunt gemakkelijk een applicatie draaien die 100% CPU heeft, dus u kunt uw timings veel beter beheren. Verwacht gewoon niets anders te doen dan je eigen code.

Opmerkingen

  • Ik heb ergens gelezen dat er een hardwarelimiet is voor het overschakelen frequentie van een outputpin ook. Ik denk dat het rond de 20 MHz lag. Dus ‘ verwacht niet dat je 300 MHz PWM of iets dergelijks kunt trekken, zelfs met 100 % CPU-gebruik.
  • @Wallacoloo: welke applicaties hebben 300 MHz PWM nodig?
  • @PeterMortensen: Nou, ik weet niet ‘ hoe radio zenders en dergelijke genereren hun signalen, maar sommigen doen het misschien met PWM. PiFM doet dat op 100 MHz. Dat lijkt echter in tegenspraak met mijn opmerking, dus ik vraag me af of de pin misschien nog steeds op die frequentie kan worden bediend, maar het ‘ s alleen dat de pincapaciteit dergelijke signalen verzwakt, zodat een 100 MHz blokgolf daadwerkelijk zou kunnen oscilleren van bijv. (1,0 V, 2,3 V) in plaats van de volledige (0 V, 3,3 V) bereik.

Antwoord

Ik heb deze bibliotheek gevonden ( pi -blaster ) die beweert “extreem efficiënt te zijn: gebruikt de CPU niet en geeft zeer stabiele pulsen”.

Ik heb het nog niet getest, maar zal zo snel mogelijk updaten (waarschijnlijk vandaag)

Reacties

  • Ik ‘ heb dit geprobeerd, maar tot nu toe heb ik geen geluk gehad. Voor zover ik kan nagaan, verandert ‘ de hardware niet echt?
  • Wil je dit gewoon tegenwerken. Pi-blaster heeft voor mij gewerkt waar deze andere antwoorden niet.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *