題:
如何控制RC伺服器?
Alex L
2012-06-13 01:32:59 UTC
view on stackexchange narkive permalink

我想通過 Python從GPIO引腳控制一個小型RC伺服器(5V,500mA)。

硬件

  • 需要哪些電氣連接?
  • 我可以將多個伺服器連接到Raspberry Pi嗎?
  • 是否存在當前限制?我需要用晶體管緩衝輸出引腳嗎?
  • 我可以直接從Raspberry Pi為伺服器供電嗎?還是應該使用外部電源?我需要電容器來平滑伺服器的抽力嗎?

軟件

  • 我需要什麼軟件/ Python代碼?我知道我需要20毫秒的脈衝,如何實現呢?
  • 以這種方式使用Raspberry Pi可以期望什麼樣的CPU負載?
這是一個類似的問題,可以幫助您入門:http://raspberrypi.stackexchange.com/questions/27/libraries-for-interface-with-the-gpio
九 答案:
#1
+9
David Sykes
2012-06-13 08:59:20 UTC
view on stackexchange narkive permalink

所需的電氣連接取決於您使用的伺服系統。 GPIO提供3.3V和高達16mA的電流,這對於您的伺服器來說是不夠的,因此您需要用晶體管對其進行緩衝。

8個GPIO擴展頭上的針腳,儘管其他針腳可以重新配置為總共最多17個GPIO針腳。如果需要更多,則必須添加某種多路復用器。

在Raspberry Pi或任何非實時操作系統上,獲取精確定時的信號將非常棘手,因為中斷和任務切換可以隨時發生。您可能需要外部電子設備來提供準確的定時信號。

安德魯(Andrew)為您提供了一些軟件。 CPU負載將取決於您的工作,但是GPIO本身不會增加任何負載。

另一方面,即使對於Raspberry Pi的CPU而言,也是20毫秒的長時間。對於RC伺服器,我不會太擔心時間精度。
@Tibor: 20ms是伺服脈衝的周期,而不是寬度http://en.wikipedia.org/wiki/Servo_control#Pulse_duration。而且分辨率要求遠不如此-要獲得8位分辨率,您需要在* 2 *毫秒內進行256步,因此需要〜8us。
#2
+8
simonfi
2012-10-28 03:33:10 UTC
view on stackexchange narkive permalink

如果您在Raspberry Pi上運行實時操作系統,則確實可以實現。正如其他人已經說過的那樣,您將需要一個外部電源供伺服系統使用,但除此之外,您不需要任何其他附加硬件。

如果您正在運行Xenomai(Linux實時補丁),則可以運行完全熟悉的Linux系統,但具有實時功能。

我編寫了一個微型C庫,用於從Raspberry Pi控制伺服器。我曾嘗試同時控制3個伺服器,但實際上沒有理由不建議它與其他伺服器一起使用。

您可以在這裡找到我的小程序庫: https:// github .com / simonfi / pi-servo為此添加Python包裝器應該很簡單。可以在以下位置找到用於Raspberry Pi的Xenomai: http://powet.eu/2012/07/25/raspberry-pi-xenomai/

為三個伺服器生成所需的信號基本上只消耗少量的CPU。我尚未測試超過三個。

#3
+5
James Ronald
2012-10-28 20:18:27 UTC
view on stackexchange narkive permalink

如果您不介意使用Linux內核驅動程序,則可以使用Servoblaster將伺服器公開為char設備。

https://github.com/richardghirst/PiBits

我創建了一個新版本,該版本不會消耗所有用於伺服器的gpio引腳。我目前正在使用小型伺服驅動機器人,該機器人是我使用IPGamePad為我們的機器人俱樂部建造和演示的,用於控制它。

https://github.com/jronald/PiBits

此外,您確實不希望通過RPI為伺服器供電,而是使用單獨的電源。當然,您需要將這些理由結合在一起。由於RPI輸出到伺服器,因此不需要任何電壓偏移,但是您要非常小心,以免接線錯誤。

僅供參考-Richartghrist回購似乎已得到維護,而Jronald叉子似乎已過時且折斷。另外,我建議閱讀如何[忽略除了前兩個伺服控件之外的所有控件](https://github.com/richardghirst/PiBits/issues/29)和[安裝Servoblaster](https://github.com/richardghirst/PiBits) /問題/ 24)
#4
+4
Brandon Bailey
2012-10-28 20:49:49 UTC
view on stackexchange narkive permalink

有一個用於樹莓派的擴展板,稱為 gertboard,用於控制Pi自身無法驅動的伺服和其他負載。

我還要補充一點,由於該產品的受歡迎程度,我相信大多數提供樹莓派和配件的站點都售罄。
#5
+3
Alex Chamberlain
2012-07-02 23:30:23 UTC
view on stackexchange narkive permalink

通常使用PWM信號控制伺服;您應該將 GPIO稱為PWM輸出

芯片上有PWM支持,因此將來我們應該可以使用它。基本上,所有軟件所做的就是告訴硬件以一定頻率產生脈衝。有些人已經在I2C上使用外部PWM控制器取得了成功。

#6
+3
joan
2014-08-26 14:00:03 UTC
view on stackexchange narkive permalink

自問這個問題以來,多年來如何在Pi上做事的知識得到了很大改善。

在Pi上至少有四種生成硬件定時PWM / Servo脈衝的方法gpios,而不使用外部硬件。

不建議使用內核模塊來執行此操作,以下用戶態解決方案可用。

  • 我自己的 pigpio將在gpios 0-31(C,Python,套接字,管道)中的任意一個上獨立生成伺服和通用PWM脈衝。
  • Servoblaster將生成伺服和通用PWM脈衝
  • RPIO將獨立地在最多0到31 gpios(Python)上生成Servo和通用PWM脈衝。
  • pi-blaster來自Servoblaster(管道)
#7
+2
Martin Thompson
2012-06-14 01:30:10 UTC
view on stackexchange narkive permalink

如果您能在運行Linux時準確地控制輸出以準確控制伺服器,我會感到驚訝。

脈衝必須控制在2毫秒的範圍內。即使調度程序刻度的分辨率為100us(正在推動它-通常為10ms),您也只能解決20個步驟。

如果有另一個可用的計時器,則可以編寫一個非常低級驅動程序,它甚至可以搶占OS來使用。獲得準確的時間聽起來很有趣!

#8
+2
Vic320
2012-12-14 00:11:15 UTC
view on stackexchange narkive permalink

我認為嘗試直接從GPIO端口運行伺服器很困難,並且即使有可能也會導致大量CPU開銷。我使用USB伺服控制器,它的工作原理非常好,幾乎不使用CPU,儘管設置起來有些棘手。 我擁有的一個是24個頻道,但它們確實製作了6個頻道的版本。我還看到其他供應商提供的2通道和4通道控制器,它們使用串行接口,如果您不需要控制那麼多伺服器,則比USB更容易和便宜。

#9
  0
user2737646
2017-02-25 10:02:40 UTC
view on stackexchange narkive permalink

有一個可以正常使用的GPIO Web服務,您可以為其編寫自己的插件。它似乎已經支持控制任意數量的伺服器。請參閱其“內容”目錄以獲取一堆圖像以及電路板佈局。

https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb

看起來要在C#上在Pi上運行Mono。



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