Használhatom a GPIO-t impulzusszélesség moduláció kimenetként?

Ha igen, hogyan folytatnám és hány egyidejű, különálló PWM kimenetem lehet?

Megjegyzések

  • Ön valószínűleg meg kell határoznia, melyik modellt használja ‘. Mindannyian kissé különböznek egymástól.
  • @ user1147688 Ezt a kérdést akkor tettük fel, amikor csak egy modell volt!

Válasz

Ahogy Alex Chamberlain javasolja, megjelenik a WiringPi könyvtár hogy a modelltől függően támogassa mind a hardveres PWM kimenetet egy vagy két GPIO tűn, és a szoftver PWM bármelyik másik GPIO csapon. Eközben az RPIO.PWM könyvtár PWM-et DMA segítségével végez bármely GPIO-tűn. Ez tulajdonképpen egy félúton van a hardver és a szoftver PWM között, amely 1   µs időzítési felbontást biztosít, szemben a WiringPi “100   µs felbontással Szoftveres PWM [1] .

Ezek közül melyik alkalmas az alkalmazásaihoz, attól függ, hogy hány PWM kimenetre van szüksége, és milyen teljesítményt szeretne ezekből a kimenetekből.

Ha az alkalmazás tolerálja az alacsony időzítési felbontást és a magas jittert , akkor használhat szoftver vagy DMA által támogatott időzítési ciklust. Ha nagyobb pontosságot szeretne / alacsonyabb a jitter PWM, akkor hardver segítségre lehet szüksége.

Mikor lehet megfelelő a szoftveres PWM?

Ha egy csomó LED-et szeretne villogni, különböző emberi látható kadenciákkal (10 ” hertz) puha valós idejű válaszkövetelményekkel, akkor a szoftverhurok annyi PWM-et képes kezelni, ahány GPIO-csap van.

Amikor alkalmas lehet a hardveres PWM?

Ha egy szervert akar vezérelni o motor kemény valós idejű válaszkövetelményekkel, akkor hardveres PWM-et kell használnia. Akkor is problémái lehetnek a valós idejű válasz biztosításával a szervohurok számára, amely a kódoló bemenetét a PWM kimenethez köti.

Stabil szervohurok a kódolókat szabályos sebességgel kell olvasni (alacsony jitter), a felülvizsgált PWM kimeneti értékeket szabályos sebességgel kell kiírni, és az ezek közötti késést rögzíteni kell (összességében alacsony a jitter). Ha ezt nem tudja megtenni, akkor alá kell hangolnia (lágy dallamát) a motorjára, hogy megakadályozza a terhelés alatt instabillá válását. Ezt nehéz megtenni egy sokfeladatos operációs rendszerrel, alacsony szintű támogatás nélkül.

Mi van, ha több hardveres PWM kimenetre van szükségem?

Ha több szervohurkot kell futtatnia, mint amennyit hardveres PWM kimenettel rendelkezik, akkor valószínűleg a hardver biztosítása érdekében át kell töltenie őket egy másik eszközre valós idejű teljesítmény, ha Raspberry Pi-jét puha, valós idejű felügyelővé t állítja.

Az egyik lehetőség a Adafruit 16 csatornás, 12 bites PWM / szervo illesztőprogram – I²C interfész – PCA9685 , amely lehetővé tenné, hogy 16 PWM kimenetet vezéreljen, csak néhány csap GPIO-val az I²C buszhoz. nézd meg a I²C 16 csatornás PWM / Servo Breakout – Munka bejegyzést a Raspberry Pi fórumokon.

1. Köszönet dm76 a javaslathoz, azonban heather szerint az RPIO.PWM lehet, hogy már nem működik újabb pi modelleknél.

Megjegyzések

  • Használhatom a szoftveres PWM megközelítést az egyenáramú motorok futtatásához?
  • @gideon – Igen, az általam használt motoros erősítők mind a PWM-et vették alapul.
  • Úgy tűnik, hogy az FYI, az RPI könyvtár ( pythonhosted.org/RPIO/pwm_py.html ) sokkal jobb felbontású (1us), mint a WiringPi esetében 100-as felbontás
  • @MarkBooth – Nincsenek probák. A könyvtár nagyon jól meg van írva, és felhasználható az RPi.GPIO helyettesítőjeként, ami nagyon hasznos, ha az utóbbival indítottál projektet, és később rájöttek, hogy PWM jelekre volt szükség …
  • RPIO. Úgy gondolom, hogy a PWM már nem működik az újabb pi modelleknél.

Válasz

Hardveres PWM

Igen, a Raspberry Pi-n van egy hardveres PWM kimenet, amely a P1-12-hez csatlakozik (GPIO18). Ezenkívül a PWM kimenetek hozzáadhatók egy I²C vagy SPI interfész segítségével; néhány embernek sikerült ezzel ( fórumbejegyzés ).

Példakód

Használhatja a WiringPi könyvtár a PWM pin vezérléséhez; megnézheti a kódot, hogy elkerülje a teljes könyvtár beillesztését.

Szoftver PWM

A Raspberry Pi nem alkalmas egyetlen komoly szoftveres PWM-re sem, mivel a Linux nem valós idejű operációs rendszer .

Megjegyzések

  • Kérdés, mi a meghatározása vagy példája a komoly szoftveres PWM-nek? És melyek a ” valós idejű operációs rendszerek “, és van-e valaha esély arra, hogy egy Pi-re kerüljön
  • @AnthonyBlake Nos, valószínűleg a PWM szoftver segítségével szabályozhatja a fény fényerejét, de gyanítom, hogy egy motor leáll. ‘ nem kell azonban szoftveres PWM-et csinálni, a hardver egyszerűbb és hatékonyabb. A valós idejű operációs rendszereket a Google jobban meg fogja magyarázni; bizonyos dolgokat garantálnak arról, hogy mennyi ideig és gyakran fut a szoftver.
  • @AnthonyBlake A ” Valós idejű operációs rendszer ” (RTOS) egy olyan operációs rendszer, amely garanciát nyújt Önnek a végrehajtás felső határidejére. Mint például mondani a programnak ” Igen, 33 ms-ban lesz egy kis végrehajtási ideje (2ms tűrés megadása vagy elfogadása), hogy megfordítsa azt a GPIO csapot, hogy a lépés motorjának pontosan jelet adjon időablak, amikor szüksége van rá. És erre támaszkodhat! ” Van ott ‘ egy RT Linux. Don ‘ nem tudja, hogy ‘ e (még) portolták-e az RPi-re.
  • Sajnálom Alex, én didn ‘ nem szándékosan lopta el a válasz másik részét, de én ‘ csak észrevettem, hogy ugyanarra a fórumbejegyzésre érkeztünk különböző útvonalakon .
  • Az újabb, 40 érintkezős modelleknél egy második hardveres PWM van csatlakoztatva a GPIO19-hez (35-ös tű).

Válasz

A legújabb PIS-ek két hardveres PWM csatornával rendelkeznek. Ezen túlmenően hardveres időzítésű PWM impulzusok generálhatók függetlenül az összes GPIO-n, amely a 40 tűs bővítőfejhez csatlakozik.

A gyakorlatban ez azt jelenti, hogy két nagyon pontos PWM csatorna van, és az összes többi GPIO Arduino stílusú PWM lehet (800 Hz, 0 off – 255 teljesen be).

Pl szervoblaster és a Pigpio stb.

Megjegyzések

  • Kedves válasz! Hogyan használhatom ezt a két HW PWM-et? 2 szervót kell irányítanom, tudom, hogy te azt mondod, hogy a servoblaster és a pigpio rendben van, de kíváncsi vagyok a HW PWM-re, mert nem találok róluk semmit … van valami doki hozzá? Van egy RPi 2 V1.1 tesztekhez.
  • C , Python , disznók parancssora .
  • Nagy CPU-terhelés nem ‘ különbség. A nagy hálózati terhelés változást hozhat a gpioServo számára, különösen, ha az alapértelmezett 200 kHz helyett 1 MHz-es mintavételezést végez. A frekvencia 50 (Hz), a munkaciklusok tartománya 0 – 1000000 lesz (a valós mögöttes értékhez 0 – 5000000 hozzárendelve). 1 ms 1 ms 20 ms alatt, tehát egy 5% -os dutycycle tehát 50000, 1,5ms- > 7,5% – > 75000, 2ms – > 10% – > 100000.
  • BCM2835 ARM perifériák a GPIO-hoz rendelhető különféle módokat mutatja. On-line módon keresse meg, melyik GPIO-t vezetik a különböző Pi modell bővítő fejlécekhez.
  • @ user1147688 A PLW (500MHz) az alap PWM órajel. A ” működésének ” működése miatt a PWM mag frekvenciája 250 MHz. A be- és kikapcsoláshoz (nagyon fontos a PWM számára) a maximum 125 MHz. A PLLC (1000 MHz) használatával megduplázhatja az ábrákat, de ez a PLL az alapsebességtől függően változik.

Válasz

Nem egészen valós idejű operációs rendszer, de a Raspberry Pi RISC OS kooperatív multitasking, így könnyen futtathat olyan alkalmazást, amelynek 100% -os CPU-ja van. sokkal jobban kezelheti az időzítését. Csak ne várjon mást, csak a saját kódját.

Megjegyzések

  • Valahol olvastam, hogy hardverkorlátozás van érvényben a váltásra vonatkozóan egy kimeneti tű frekvenciája is. Azt hiszem, 20 MHz körüli volt. Tehát ne ‘ ne számítson arra, hogy 300 MHz-es PWM-t vagy bármi hasonlót képes meghúzni, akár 100 % CPU-használat.
  • @Wallacoloo: Milyen alkalmazásokhoz van szükség 300 MHz-es PWM-re?
  • @PeterMortensen: Nos, nem tudom, hogy ádió rádió ‘ az adók és hasonlók generálják a jeleiket, de néhányan megtehetik PWM-mel is. A PiFM ezt 100 MHz-en teszi. Úgy tűnik, hogy ez ellentmond a megjegyzésemnek, ezért kíváncsi lennék, hogy talán a csapot még mindig meg lehet-e parancsolni ezen a frekvencián, de ez ‘ s csak annyit, hogy a tűkapacitása csillapítja az ilyen jeleket, így egy 100 MHz-es négyzethullám valóban a teljes (0 V, 3,3 V) helyett ingadozhat pl. (1,0 V, 2,3 V). hatótávolság.

Válasz

Megtaláltam ezt a könyvtárat ( pi -blaster ), amely “rendkívül hatékony: nem használja a CPU-t és nagyon stabil impulzusokat ad”.

Még nem teszteltem, de frissíteni fogok, amint megteszem (valószínűleg ma)

Hozzászólások

  • Én ‘ próbálkoztam ezzel, de eddig nem volt szerencsém. Amennyire meg tudom mondani, hogy nem valójában ‘ kapcsolja a hardvert?
  • Csak össze akarja dobni ezt. A Pi-blaster nálam működött, ahol ezek a többi válasz nem.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük