Kan jeg bruge GPIO som et pulsbreddemodulation output?

Hvis ja, hvordan vil jeg gå ud på at gøre det, og hvor mange samtidige, forskellige PWM-udgange kan jeg have?

Kommentarer

  • Dig skal sandsynligvis angive, hvilken model du ‘ bruger. De er alle lidt forskellige.
  • @ user1147688 Dette spørgsmål blev stillet tilbage, da der kun var en model!

Svar

Som foreslået af Alex Chamberlain vises WiringPi -biblioteket til at understøtte begge hardware-PWM-output på en eller to GPIO-ben afhængigt af modellen og software PWM på en af de andre GPIO-ben. I mellemtiden gør RPIO.PWM-biblioteket PWM ved DMA på enhver GPIO-pin. Dette er effektivt et halvvejs hus mellem hardware og software PWM, der giver en 1   µs timingopløsning sammenlignet med 100   µs med WiringPi “s Software PWM [1] .

Hvilken af disse der passer til dine applikationer afhænger af, hvor mange PWM-output du har brug for, og hvilken ydelse du vil have ud af disse output.

Hvis din applikation er tolerant over for lavtidsopløsning og høj jitter , kan du bruge en software- eller DMA-assisteret timingsløjfe. Hvis du vil have højere præcision / lavere jitter PWM, så har du muligvis brug for hardwarehjælp.

Hvornår kan software PWM være egnet?

Hvis du vil blinke en masse lysdioder med forskellige menneskelige synlige kadenser (10 “s af hertz) med bløde realtids svarkrav, så kan softwareløkken håndtere så mange PWMer, som du har GPIO-ben.

Når kan hardware PWM være egnet?

Hvis du vil kontrollere en serv o motor med hårde realtids reaktionskrav, så skal du bruge hardware PWM. Selv da kan du have problemer med at sikre et realtidsrespons for servosløjfen, der binder kodeindgang til PWM-udgang.

En stabil servosløjfe har brug for at læse kodere med en regelmæssig hastighed (lav jitter), skrive reviderede PWM-outputværdier til en regelmæssig hastighed, og latensen mellem disse skal være fast (samlet set jitter). Hvis du ikke kan gøre dette, bliver du nødt til at afstemme (soft tune) din motor for at forhindre, at den bliver ustabil under belastning. Dette er svært at gøre med et multi-tasking-operativsystem uden support på lavt niveau.

Hvad hvis jeg har brug for flere hardware-PWM-udgange?

Hvis du har brug for at køre flere servoløjper, end du har hardware-PWM-udgange, bliver du sandsynligvis nødt til at aflæse dem til en anden enhed for at sikre hård realtidspræstation, der henviser din Raspberry Pi til at være en blød realtids supervisor .

En mulighed ville være noget som Adafruit 16-Channel 12-bit PWM / Servo Driver – I²C interface – PCA9685 , som giver dig mulighed for at styre 16 PWM-udgange med blot et par ben GPIO til I²C-bussen. For et eksempel på dens anvendelse, tjek I²C 16 Channel PWM / Servo Breakout – Working indlæg på Raspberry Pi fora.

1. Tak til dm76 til forslaget, dog lyng siger, at RPIO.PWM muligvis ikke længere fungerer for nyere pi-modeller.

Kommentarer

  • Kan jeg bruge softwaren PWM-tilgang til at køre jævnstrømsmotorer?
  • @gideon – Ja, de motoreffektforstærkere, som jeg har brugt, har alle taget PWM som deres input.
  • FYI, RPI-biblioteket ( pythonhosted.org/RPIO/pwm_py.html ) ser ud til at have en meget bedre opløsning (1us) sammenlignet med WiringPi med 100us opløsning
  • @MarkBooth – Ingen probs. Biblioteket er rigtig godt skrevet og kan bruges som drop-in-erstatning for RPi.GPIO, hvilket er meget praktisk, hvis du startede et projekt med sidstnævnte og senere indså, at PWM-signaler var nødvendige …
  • RPIO. PWM fungerer muligvis ikke længere for nyere pi-modeller, tror jeg.

Svar

Hardware PWM

Ja, der er en hardware-PWM-output på Raspberry Pi, tilsluttet P1-12 (GPIO18). Yderligere kunne PWM-udgange tilføjes ved hjælp af en I²C eller SPI interface; nogle mennesker har haft succes med dette ( forumindlæg ).

Eksempelkode

Du kan bruge WiringPi-bibliotek for at kontrollere PWM-stiften; du kunne se på koden for at undgå at inkludere hele biblioteket.

Software PWM

Raspberry Pi er ikke egnet til nogen seriøs software PWM, da Linux ikke er et realtidsoperativsystem .

Kommentarer

  • Spørgsmål, hvad er definitionen eller et eksempel på seriøs software-PWM? Og hvad er ” operativsystemer i realtid ” og er der nogensinde nogen chance for at få en på en Pi
  • @AnthonyBlake Nå, du kan sandsynligvis styre lysets lysstyrke ved hjælp af software PWM, men jeg formoder, at en motor går i stå. Der er ‘ ikke noget behov for at udføre software-PWM, men hardware er enklere og mere effektivt. Realtidsoperativsystemer vil blive bedre forklaret af Google; de garanterer bestemte ting om, hvor længe og ofte software køres.
  • @AnthonyBlake A ” Realtids OS ” (RTOS) er et operativsystem, der giver dig en garanti på den øverste frist for udførelse. Som at sige til programmet ” Ja, du vil have noget eksekveringstid i 33ms (give eller tage 2ms tolerance) til at vende den GPIO pin bit for at give din trinmotor et signal nøjagtigt tidsvindue, når han har brug for det. Og du kan stole på det! ” Der ‘ er en RT Linux derude. Ved ikke ‘ om det ‘ er blevet overført til RPi (endnu).
  • Undskyld Alex, jeg stjal ‘ ikke med vilje en anden del af dit svar, men jeg ‘ har lige bemærket, at vi kom til det samme forumindlæg via forskellige ruter .
  • Nyere modeller med 40 ben har en anden hardware-PWM tilsluttet GPIO19 (pin 35).

Svar

Seneste Pis har to hardware-PWM-kanaler. Derudover kan hardware-timede PWM-impulser genereres uafhængigt af alle GPIO, der er tilsluttet 40-pin udvidelsesoverskriften.

I praksis betyder det, at der er to meget nøjagtige PWM-kanaler, og alle de andre GPIOer kan have Arduino-stil PWM (800 Hz, 0 slukket – 255 fuldt tændt).

F.eks servoblaster og min pigpio osv.

Kommentarer

  • Dejligt svar! Hvordan kan jeg bruge disse to HW PWMer? Jeg har brug for at kontrollere 2 servoer, jeg ved, du siger, at servoblaster og pigpio er OK for det, men jeg spekulerer bare på HW PWM, for jeg kan ikke finde noget om dem … er der nogle dokumenter til det derude? Jeg har en RPi 2 V1.1 til test.
  • C , Python , svinekommandolinje .
  • Kraftig CPU-belastning skal ikke ‘ for at lave en forskel. Tung netværksbelastning kan gøre en forskel for gpioServo, især hvis der samples ved 1MHz snarere end standard 200kHz. Frekvensen er 50 (Hz), arbejdscyklusområdet vil være 0 – 1000000 (kortlagt til den reelle underliggende værdi på 0 – 5000000). 1 ms er 1 ms i 20 ms, så en belastningscyklus på 5%, så 50000, 1,5ms- > 7,5% – > 75000, 2ms – > 10% – > 100000.
  • Side 102 af BCM2835 ARM-periferiudstyr viser de forskellige tilstande, som GPIO kan tildeles. Se online, hvor GPIO bliver ført ud til de forskellige Pi-modeludvidelseshoveder.
  • @ user1147688 PLLD (500MHz) bruges som kernen i PWM-uret. På grund af den måde, ” fungerer “, er PWM-kernefrekvensen 250 MHz. For at kunne tænde og slukke (ret vigtigt for PWM) er maksimumet 125 MHz. Du kan fordoble tallene ved hjælp af PLLC (1000 MHz), men PLL varierer med kernehastigheden.

Svar

Ikke helt et realtids OS, men RISC OS til Raspberry Pi er samarbejdsvillig multitasking, så du kan nemt køre et program, der har 100% CPU så du kan styre dine timing meget bedre. Bare forvent ikke at gøre andet end din egen kode.

Kommentarer

  • Jeg læste et eller andet sted, at der er en hardwaregrænse for skiftet frekvens af en output pin også. Jeg tror, det var omkring 20 MHz. Så forvent ikke ‘ at være i stand til at trække på 300 MHz PWM eller noget af den slags, selv med 100 % CPU-forbrug.
  • @Wallacoloo: Hvilke applikationer kræver 300 MHz PWM?
  • @PeterMortensen: Nå, jeg ved ikke ‘ ved ikke, hvordan radio sendere og sådan genererer deres signaler, men nogle gør det muligvis med PWM. PiFM gør det ved 100 MHz. Det ser ud til at være i modstrid med min kommentar, så jeg spekulerer på, om stiften måske stadig kan kommanderes ved denne frekvens, men det ‘ er bare, at pin-kapacitansen dæmper sådanne signaler, således at en 100 MHz firkantbølge faktisk kan svinge fra f.eks (1,0 V, 2,3 V) i stedet for den fulde (0 V, 3,3 V) rækkevidde.

Svar

Jeg har fundet dette bibliotek ( pi -blaster ), der hævder at være “ekstremt effektiv: bruger ikke CPUen og giver meget stabile impulser.”

Jeg har ikke testet den endnu, men opdateres, så snart jeg gør (sandsynligvis i dag)

Kommentarer

  • Jeg ‘ har prøvet dette, men hidtil ikke held. Så vidt jeg kan fortælle det, skifter ‘ ikke faktisk hardware?
  • Vil bare støde på dette. Pi-blaster har fungeret for mig, hvor disse andre svar gjorde det ikke.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *