題:
我可以使用GPIO進行脈衝寬度調製(PWM)嗎?
berry120
2012-06-14 18:47:44 UTC
view on stackexchange narkive permalink

我可以將GPIO用作脈衝寬度調製輸出嗎?

如果可以,我將如何進行操作以及可以同時進行多少個並行PWM輸出?有嗎?

您可能需要指定使用的模型。它們都略有不同。
@user1147688當只有一個模型時,會詢問此問題!
五 答案:
Mark Booth
2012-06-14 19:34:05 UTC
view on stackexchange narkive permalink

根據 Alex Chamberlain的建議, WiringPi庫似乎支持一個或兩個GPIO引腳(取決於型號)上的硬件PWM輸出,以及軟件PWM在其他任何GPIO引腳上。同時, RPIO.PWM庫通過任意GPIO引腳上的 DMA執行PWM。實際上,這是硬件和軟件PWM之間的過渡,提供了1µs的定時分辨率,而WiringPi的Software PWM [1] sup>則為100µs。

其中哪些適合您的應用取決於您需要多少個PWM輸出以及這些輸出中想要的性能。

如果您的應用容許低時序分辨率和較高的抖動,則可以使用軟件或DMA輔助時序循環。如果您想要更高的精度/更低的抖動PWM,則可能需要硬件幫助。

什麼時候適合使用軟件PWM?

如果您要使一群可見光不同的LED閃爍節奏(10赫茲)滿足軟件實時響應要求,那麼軟件循環可以處理與GPIO引腳數量一樣多的PWM。

什麼時候硬件PWM合適? / h3>

如果要以硬實時響應要求控制伺服電機,則需要使用硬件PWM。即使這樣,您仍然可能無法確保將編碼器輸入與PWM輸出相關聯的伺服環路的實時響應。

穩定的伺服環路需要以固定速率讀取編碼器(低抖動),以規則的速率寫出修改後的PWM輸出值,並且它們之間的等待時間應固定(總體低抖動)。如果您不能這樣做,則必須對電機進行微調(軟調),以防止其在負載下變得不穩定。沒有低級別支持的多任務操作系統很難做到這一點。

如果我需要更多的硬件PWM輸出怎麼辦?

如果您需要運行的伺服環路多於硬件PWM輸出,那麼您可能需要將它們轉移到另一台設備上以確保硬實時性能,從而使Raspberry Pi成為軟實時系統。 supervisor

一個選項類似於 Adafruit 16通道12位PWM /伺服驅動器-I²C接口-PCA9685您只需使用I²C總線的GPIO的幾個引腳即可控制16個PWM輸出。有關其用法的示例,請查看Raspberry Pi論壇上的I²C16通道PWM /伺服突破-工作帖子。

1。感謝 dm76的建議,但是 heather說RPIO.PWM可能不再適用於新的pi模型。 sup>

我可以使用軟件PWM方法運行直流電動機嗎?
@gideon-是的,我使用的電機功率放大器都將PWM用作輸入。
僅供參考,與100us分辨率的WiringPi相比,RPI庫(http://pythonhosted.org/RPIO/pwm_py.html)似乎具有更好的分辨率(1us)。
@MarkBooth-無問題。該庫寫得很好,可以用作RPi.GPIO的直接替代品,如果您從RPi.GPIO開始一個項目,後來又需要PWM信號,這將非常方便。
我認為RPIO.PWM可能不再適用於新的pi模型。
Alex Chamberlain
2012-06-14 19:40:48 UTC
view on stackexchange narkive permalink

硬件PWM

是的,Raspberry Pi上有一個硬件PWM輸出,連接到P1-12(GPIO18)。此外,可以使用I²C SPI接口添加PWM輸出。有些人已經成功完成了此操作(論壇帖子)。

示例代碼

您可以使用 WiringPi庫進行控制PWM引腳;您可以看一下代碼來避免包含整個庫。

問題,嚴重的軟件PWM的定義或示例是什麼?什麼是“實時操作系統”,有沒有機會在Pi上安裝一個
@AnthonyBlake好吧,您可能可以使用軟件PWM控制燈的亮度,但是我懷疑電動機會失速。儘管無需進行軟件PWM,但硬件更簡單,更有效。 Google會更好地解釋實時操作系統。他們保證軟件可以運行多長時間和多長時間。
@AnthonyBlake“實時操作系統”(RTOS)是一種操作系統,可為您提供最高執行時間的保證。就像對程序說:“是的,您將有33ms的執行時間(給定或具有2ms的公差),以翻轉該GPIO引腳位,以在您需要的確切時間窗口內為步進電動機提供信號。您可以依靠就這樣!”這裡有一個RT Linux。不知道它是否已經移植到RPi。
抱歉,Alex,我沒有故意偷走您回答的另一部分,但我剛剛注意到我們通過不同的路線來到同一論壇。
具有40個引腳的較新型號將第二個硬件PWM連接到GPIO19(引腳35)。
嗨!感謝您提供的信息,您能否更新您的帖子以反映Raspberry Pi 3?我找不到任何可靠的文檔來確認該設備上是否存在硬件PWM引腳。有1個或2個或任何一個嗎?哪個針腳?
joan
2015-11-06 04:46:42 UTC
view on stackexchange narkive permalink

最近的Pis有兩個硬件PWM通道。另外,硬件定時PWM脈衝可以在連接到40引腳擴展接頭的所有GPIO上獨立生成。

在實踐中,這意味著有兩個高精度PWM通道,而所有其他GPIO可能具有Arduino風格的PWM (800 Hz,0關閉-255完全打開)。

例如 servoblaster和我的 pigpio等。

好答案!我該如何使用這兩個硬件PWM?我需要控制2個伺服器,我知道您說Servoblaster和Pigpio可以做到這一點,但是我只是對HW PWM感到好奇,因為我找不到關於它們的任何信息...那裡有一些文檔嗎?我有一個用於測試的RPi 2 V1.1。
[C](http://abyz.co.uk/rpi/pigpio/cif.html#gpioHardwarePWM),[Python](http://abyz.co.uk/rpi/pigpio/python.html#hardware_PWM), [pigs命令行](http://abyz.co.uk/rpi/pigpio/pigs.html#HP)。
好,謝謝。通過gpioServo()函數進行的伺服控制在CPU負載較大的情況下是否也可靠,還是我需要使用硬件PWM?我需要處理計算機視覺堆棧,以便所有CPU內核都處於適當的負載下...常見的50 Hz 1-2ms伺服標準的gpioHardwarePWM頻率和占空比值是多少?
繁重的CPU負載不會產生任何影響。繁重的網絡負載可能會對gpioServo產生影響,尤其是如果採樣頻率為1MHz而不是默認的200kHz時。頻率為50(Hz),佔空比範圍為0-1000000(映射到真實的基礎值0-5000000)。 1 ms是20 ms中的1 ms,因此佔空比為5%,因此50000、1.5ms-> 7.5%-> 75000、2ms-> 10%-> 100000。
您能為這個信息發布參考嗎?我的意思是,例如,文檔在哪裡顯示Rpi3上的2個硬件驅動的GPIO?
[BCM2835 ARM外圍設備](http://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf)的第102頁顯示了可以分配GPIO的各種模式。在線查找將哪些GPIO引出到各種Pi模型擴展接頭連接器。
謝謝@joan,我看了一下,但是我試圖找到PWM的最大頻率,該頻率應該遠高於該文檔中所示的125 MHz。有人在發送器線程中的某處提到750 MHz。。。由於沒有發布數據表,而且沒有人確認與BCM2835等效,因此標頭可能不是最新的。
@user1147688我建議您找人向您展示如何設置750 MHz的PWM頻率。讓別人啟發我們所有人。
我同意它的真實性太好了。因此,這可能是拼寫錯誤,應為750 ** kHz **。但是,我也不認為完全不可能達到125 MHz的2-4倍。
@user1147688 PLLD(500MHz)被用作核心PWM時鐘。由於“工作”的方式,PWM核心頻率為250 MHz。為了能夠打開和關閉(對於PWM而言非常重要),最大為125 MHz。您可以使用PLLC(1000 MHz)將數字加倍,但是PLL隨內核時鐘速度而變化。
嗨,@joan,,我看過您的[post](http://raspberrypi.stackexchange.com/a/23277/17798)。我確實想知道“ *使用PLLC(1000 MHz),但PLL隨核心時鐘速度而變化*”!為何如此?這在內核源代碼中的哪裡?
@user1147688對此無能為力。我對內核源代碼結構不太熟悉。我什至不確定內核是否對PLL有任何了解或控制。
John
2012-12-14 06:43:26 UTC
view on stackexchange narkive permalink

這不是一個實時操作系統,但是Raspberry Pi的 RISC OS是協作式多任務處理,因此您可以輕鬆地運行具有100%CPU的應用程序,從而可以更好地管理時序。只是不要指望除了您自己的代碼以外還能做其他任何事情。

我在某處讀到關於輸出引腳的開關頻率也有硬件限制。我認為大約是20 MHz。因此,即使CPU使用率達到100%,也不要期望能夠拉動300 MHz的PWM或類似功能。
@Wallacoloo:哪些應用需要300 MHz PWM?
@PeterMortensen:好吧,我不知道無線電發射機等如何生成信號,但有些人可能使用PWM來做到這一點。 PiFM在100 MHz上做到了這一點。雖然這似乎與我的評論相矛盾,所以我想知道是否仍然可以在該頻率下命令該引腳,但這僅僅是因為引腳電容會衰減此類信號,從而使100 MHz方波實際上可能從例如(1.0 V,2.3 V)而不是整個(0 V,3.3 V)範圍。
Glantucan
2017-01-15 17:16:23 UTC
view on stackexchange narkive permalink

我發現這個庫( pi-blaster)自稱“效率極高:不使用CPU,並提供非常穩定的脈衝。”

我已經尚未測試,但會盡快更新(可能是今天)

我一直在嘗試,但是到目前為止還沒有運氣。據我所知,它實際上並沒有切換硬件?
只是想碰碰這個。 Pi-blaster為我工作,而其他答案卻沒有。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...