Mohu použít GPIO jako pulsně šířkovou modulaci na výstupu?

Pokud ano, jak bych to udělal a kolik souběžných a odlišných výstupů PWM mohu mít?

Komentáře

  • Vy pravděpodobně musíte určit, který model ‚ znovu používáte. Všechny se mírně liší.
  • @ user1147688 Tato otázka byla položena zpět, když existoval pouze jeden model!

Odpovědět

Jak navrhuje Alex Chamberlain , zobrazí se knihovna WiringPi podporovat oba hardwarové výstupy PWM na jednom nebo dvou pinech GPIO v závislosti na modelu a softwarový PWM na kterémkoli z ostatních pinů GPIO. Mezitím knihovna RPIO.PWM provádí PWM pomocí DMA na jakémkoli pinu GPIO. Ve skutečnosti je to na půli cesty mezi hardwarovým a softwarovým PWM a poskytuje časovací rozlišení 1   µs ve srovnání s 100   µs s WiringPi Softwarový PWM [1] .

Který z nich je vhodný pro vaše aplikace, závisí na tom, kolik výstupů PWM potřebujete a jaký výkon z těchto výstupů chcete.

Pokud vaše aplikace toleruje rozlišení s nízkým načasováním a vysoký jitter , můžete použít softwarovou nebo DMA asistovanou časovací smyčku. Pokud chcete vyšší přesnost / nižší jitter PWM, pak možná budete potřebovat hardwarovou pomoc.

Kdy může být vhodný softwarový PWM?

Pokud chcete blikat spoustou LED diod s různými lidskými viditelnými kadencemi (10 hertz) s měkkými požadavky na odezvu v reálném čase , pak softwarová smyčka zvládne tolik PWM, kolik máte GPIO pinů.

Když může být vhodný hardware PWM?

Pokud chcete ovládat serv o motor s tvrdými požadavky na odezvu v reálném čase , pak budete muset použít hardwarové PWM. I tehdy můžete mít problémy se zajištěním odezvy servo smyčky v reálném čase, která spojuje vstup kodéru s výstupem PWM.

Stabilní servo smyčka je třeba číst kodéry pravidelnou rychlostí (nízké chvění), psát revidované výstupní hodnoty PWM pravidelnou rychlostí a latence mezi nimi by měla být pevná (celkové nízké chvění). Pokud to nemůžete udělat, budete muset motor podladit (soft tune), abyste zabránili jeho nestabilitě při zatížení. To je u multitaskingového operačního systému bez podpory na nízké úrovni těžké.

Co když potřebuji více hardwarových PWM výstupů?

Pokud potřebujete spustit více servo smyček, než máte hardwarové PWM výstupy, pak je pravděpodobně budete muset vyložit na jiné zařízení, abyste zajistili tvrdé výkon v reálném čase, čímž se vaše Raspberry Pi stává měkkým supervizorem .

Jednou z možností by bylo něco jako Adafruit 16-Channel 12-bit PWM / Servo Driver – I²C interface – PCA9685 which which allow you to control 16 PWM output with just a few pins of GPIO for the I²C bus. For example of its use, podívejte se na příspěvek I²C 16kanálový PWM / Servo Breakout – pracovní na fórech Raspberry Pi.

1. Díky dm76 pro návrh, nicméně heather říká, že RPIO.PWM již nemusí fungovat u novějších modelů pi.

Komentáře

  • Mohu ke spuštění stejnosměrných motorů použít softwarový přístup PWM?
  • @gideon – Ano, výkonové zesilovače motoru, které jsem použil, všechny považovaly za vstup PWM.
  • FYI, zdá se, že knihovna RPI ( pythonhosted.org/RPIO/pwm_py.html ) má mnohem lepší rozlišení (1us) ve srovnání s WiringPi s Rozlišení 100us
  • @MarkBooth – žádné problémy. Knihovna je opravdu dobře napsaná a může být použita jako náhrada za RPi.GPIO, což je velmi užitečné, pokud jste zahájili projekt s druhým a později si uvědomili, že jsou potřeba signály PWM …
  • RPIO. Myslím, že PWM již nemusí fungovat pro novější modely pí.

Odpověď

Hardware PWM

Ano, na Raspberry Pi je jeden hardwarový PWM výstup připojený k P1-12 (GPIO18). Dále lze výstupy PWM přidávat pomocí I²C nebo SPI rozhraní; někteří lidé s tím měli úspěch ( příspěvek na fóru ).

Příklad kódu

Můžete použít knihovna WiringPi k ovládání pinu PWM; můžete se podívat na kód, abyste se vyhnuli zahrnutí celé knihovny.

Softwarový PWM

Raspberry Pi není vhodný pro žádný seriózní softwarový PWM, protože Linux není operační systém v reálném čase .

Komentáře

  • Otázka, jaká je definice nebo příklad vážného softwarového PWM? A jaké jsou “ operační systémy v reálném čase “ a existuje vůbec nějaká šance získat jeden na Pi
  • @AnthonyBlake No, pravděpodobně můžete ovládat jas světla pomocí softwaru PWM, ale mám podezření, že se motor zastaví. Není třeba ‚ dělat softwarové PWM, hardware je jednodušší a efektivnější. Operační systémy v reálném čase lépe vysvětlí Google; zaručují určité věci ohledně toho, jak často a často je software spuštěn.
  • @AnthonyBlake A “ Real-Time OS “ (RTOS) je operační systém, který vám poskytuje záruku na horní časový limit provedení. Stejně jako říkáte programu “ Ano, za 33 ms (s tolerancí 2ms nebo 2ms) budete mít nějaký čas na provedení, abyste otočili tento pinový bit GPIO, aby váš krokový motor dostal přesný signál časové okno, když to potřebuje. A na to se můžete spolehnout! “ Existuje ‚ RT Linux. ‚ Nevím, zda to ‚ bylo přeneseno do RPi (zatím).
  • Omlouvám se Alex, já ‚ t záměrně neukradl další část vaší odpovědi, ale všiml jsem si ‚, že jsme ke stejnému příspěvku na fóru přišli různými cestami .
  • Novější modely se 40 vývody mají druhý hardware PWM připojený k GPIO19 (vývod 35).

Odpovědět

Nedávné Pis mají dva hardwarové kanály PWM. Kromě toho mohou být hardwarově načasované PWM impulsy nezávisle generovány na všech GPIO připojených k 40pinové rozšiřující hlavičce.

V praxi to znamená, že existují dva vysoce přesné kanály PWM a všechny ostatní GPIO mohou mít PWM ve stylu Arduino (800 Hz, 0 vypnuto – 255 plně zapnuto).

Např servoblaster a můj pigpio atd.

Komentáře

  • Pěkná odpověď! Jak mohu použít tyto dva HW PWM? Potřebuji ovládat 2 serva, vím, že říkáš, že servoblaster a pigpio jsou v pořádku, ale zajímalo by mě jen to HW PWM, protože o nich nic nenajdu … jsou tam nějaké dokumenty? Mám RPi 2 V1.1 pro testy.
  • C , Python , příkazový řádek prasat .
  • Velké zatížení procesoru by nemělo ‚ vytvořit rozdíl. Velké zatížení sítě může změnit gpioServo, zvláště pokud vzorkování na 1MHz spíše než na výchozích 200kHz. Frekvence je 50 (Hz), rozsah pracovních cyklů bude 0 – 1000000 (mapováno na skutečnou základní hodnotu 0 – 5000000). 1 ms je 1 ms za 20 ms, takže pracovní cyklus 5%, takže 50 000, 1,5 ms – > 7,5% – > 75000, 2 ms – > 10% – > 100000.
  • Stránka 102 z BCM2835 ARM Peripherals zobrazuje různé režimy, které lze přiřadit GPIO. Podívejte se on-line, pro které jsou GPIO vyvedeny do různých rozšiřujících hlaviček modelu Pi.
  • @ user1147688 PLLD (500MHz) is used as the core PWM clock. Kvůli tomu, jak “ funguje, “ funguje, je frekvence jádra PWM 250 MHz. Aby bylo možné zapínat a vypínat (pro PWM velmi důležité), maximum je 125 MHz. Hodnoty můžete zdvojnásobit pomocí PLLC (1 000 MHz), ale tento PLL se liší podle rychlosti hodin jádra.

Odpověď

Ne tak docela v reálném čase, ale RISC OS pro Raspberry Pi je kooperativní multitasking, takže můžete snadno spustit aplikaci, která má 100% CPU, takže můžete své načasování spravovat mnohem lépe. Jen neočekávejte nic jiného než svůj vlastní kód.

Komentáře

  • Někde jsem četl, že existuje hardwarový limit přepínání frekvence výstupního kolíku také. Myslím, že to bylo kolem 20 MHz. Neočekávejte tedy, že dokážete vytáhnout 300 MHz PWM nebo něco podobného, dokonce i se 100 % Využití CPU.
  • @Wallacoloo: Které aplikace vyžadují 300 MHz PWM?
  • @PeterMortensen: No, ‚ nevím, jak rádio vysílače a podobné generují své signály, ale někteří by to mohli udělat s PWM. PiFM to dělá na 100 MHz. Zdá se však, že to odporuje mému komentáři, takže mě zajímá, jestli možná může být pin stále přikázán na této frekvenci, ale ‚ s tím, že pinová kapacita tyto signály zeslabuje, takže čtvercová vlna 100 MHz může ve skutečnosti oscilovat např. (1,0 V, 2,3 V) místo plné (0 V, 3,3 V) rozsah.

Odpověď

Našel jsem tuto knihovnu ( pi -blaster ), který tvrdí, že je „extrémně efektivní: nepoužívá procesor a poskytuje velmi stabilní pulsy.“

Zatím jsem to netestoval, ale bude se aktualizovat, jakmile to udělám (pravděpodobně dnes)

Komentáře

  • Zkoušel jsem to ‚, ale zatím nemám štěstí. Pokud vím, nedělá to ‚ t vlastně přepnout hardware?
  • Chci to jen narazit. Pi-blaster pro mě pracoval, kde tyto další odpovědi ne.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *