我想通过Python从GPIO引脚控制一个小的RC伺服(5V,500mA)。

硬件


需要哪些电气连接?
我可以将多个伺服器连接到Raspberry Pi吗?
有电流限制吗?我需要用晶体管缓冲输出引脚吗?
我可以直接从Raspberry Pi为伺服器供电,还是应该使用外部电源?我需要电容器来平滑伺服器的抽力吗?

软件


我需要什么软件/ Python代码?我知道我需要20毫秒的脉冲,如何实现呢?
以这种方式使用Raspberry Pi可以期望什么样的CPU负载?


评论

这是一个类似的问题,可以帮助您入门:raspberrypi.stackexchange.com/questions/27/…

#1 楼

所需的电气连接取决于您所使用的伺服器。 GPIO提供3.3V和高达16mA的电流,这对于您的伺服器来说是不够的,因此您需要使用晶体管对其进行缓冲。

扩展头上有8个GPIO引脚,尽管其他引脚可以重新配置为总共最多提供17个GPIO引脚。如果您需要更多,则必须添加某种多路复用器。

在Raspberry Pi或任何非实时OS上,获取精确定时的信号将非常棘手,因为中断和任务切换可以随时发生。您可能需要外部电子设备来提供准确的定时信号。

Andrew指导您使用了一些软件。 CPU负载将取决于您的工作,但是GPIO本身不会增加任何负载。

评论


另一方面,即使对于Raspberry Pi的CPU而言,也是20毫秒的长时间。对于RC伺服器,我不会太担心时间精度。

–user13
2012年6月13日14:56

@Tibor:20ms是伺服脉冲的周期,而不是宽度。en.wikipedia.org/ wiki / Servo_control#Pulse_duration。而且分辨率要求比它差得多-要获得8位分辨率,您需要在2毫秒内进行256步,因此需要〜8us。

–马丁·汤普森(Martin Thompson)
2012年6月14日上午8:13

#2 楼

如果您在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 楼

如果您不介意使用Linux内核驱动程序,则可以使用Servoblaster将Servos公开为char设备。

https://github.com/richardghirst/PiBits

我创建了一个新版本,该版本不会消耗所有用于伺服器的gpio引脚。我目前正在使用小型伺服驱动机器人,该机器人是我使用IPGamePad为我们的机器人俱乐部建造和演示的,用于控制它。

https://github.com/jronald/PiBits

此外,您确实不希望通过RPI为伺服器供电,而是使用单独的电源。当然,您需要将这些理由结合在一起。由于RPI输出到伺服系统,因此不需要任何电压偏移,但是您要非常小心,以免接线错误。

评论


fyi-richartghrist回购似乎已得到维护,而jronald叉子似乎已过时且损坏。另外,我建议您阅读如何忽略除前两个伺服控件之外的所有控件和安装Servoblaster

– cwd
2014-12-15在3:05



#4 楼

有一个可用于树莓派的扩展板,称为gertboard,用于控制Pi自身无法驱动的伺服和其他负载。

评论


我还要补充一点,由于该产品的受欢迎程度,我相信大多数提供树莓派和配件的站点都售罄。

–布兰登·贝利(Brandon Bailey)
2012年10月28日15:58

#5 楼

通常,使用PWM信号来控制伺服。您应该将GPIO称为PWM输出。

芯片上有PWM支持,因此我们将来应该可以使用它。基本上,所有软件所做的就是告诉硬件以一定频率产生脉冲。有些人已经在I2C上使用外部PWM控制器取得了成功。

#6 楼

自问这个问题以来,多年来如何在Pi上做事的知识有了很大的改进。

至少有四种方法可以在Pi的gpios上生成硬件定时PWM / Servo脉冲,而无需使用外部硬件。

不赞成使用内核模块来执行此操作,以下用户态解决方案可用。


我自己的Pigpio将生成Servo

Servoblaster将独立产生高达21 gpios(管道)的伺服脉冲和通用PWM脉冲。 />
RPIO将在gpios 0-31(Python)的任意一个上独立生成伺服脉冲和通用PWM脉冲。

来自Servoblaster(管道)的pi-blaster


#7 楼

如果您在运行Linux时可以充分地调整输出的时间以准确控制伺服器,我会感到惊讶。

脉冲必须控制在2毫秒的范围内。即使调度程序刻度的分辨率为100us(正在推动它-通常为10ms),您也只能解决20个步骤。而且,这还没有考虑到任务切换带来的抖动。

如果有另一个计时器可用,您可能会编写一个非常低级的驱动程序,该驱动程序甚至可以抢占OS来抢先操作系统,以确保其定时准确。听起来很有趣!

#8 楼

我认为尝试直接从GPIO端口运行伺服将很困难,并且即使有可能也会导致大量CPU开销。我使用USB伺服控制器,它的工作原理非常好,几乎不使用CPU,尽管设置起来有些棘手。我拥有的是24个频道,但它们确实制作了6个频道的版本。我还看到其他供应商提供的2通道和4通道控制器,它们使用串行接口,如果您不需要控制那么多的伺服器,则比USB更加容易和便宜。

#9 楼

有一个可以正常使用的GPIO Web服务,您可以为其编写自己的插件。它似乎已经支持控制任意数量的伺服器。请参阅其“内容”目录以获取一堆图像以及电路板布局。

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

外观在Pi上运行Mono的C#中运行。