我想通过Python从GPIO引脚控制一个小型RC伺服器(5 V,500 mA)。
硬件
- 所需的电气连接是什么?
- 我可以将多个伺服器连接到Raspberry Pi吗?
- 目前有任何限制吗?我需要用晶体管缓冲输出引脚吗?
- 我可以直接从Raspberry Pi为伺服器供电,还是应该使用外部电源?我需要电容器来平滑伺服器的抽力吗?
软件
- 我需要什么软件/ Python代码?我知道我需要20毫秒的脉冲,如何实现呢?
- 通过这种方式使用Raspberry Pi,我可以期望什么样的CPU负载?
我想通过Python从GPIO引脚控制一个小型RC伺服器(5 V,500 mA)。
Answers:
所需的电气连接取决于您所使用的伺服器。该GPIO提供3.3 V和高达16 mA的电流,这不足以为你伺服,所以你需要用一个晶体管来缓冲它。
扩展接头上有8个GPIO引脚,但其他引脚也可以重新配置为总共17个GPIO引脚。如果需要更多,则必须添加某种多路复用器。
在Raspberry Pi或任何非实时操作系统上,获取精确定时的信号将非常棘手,因为中断和任务切换可以随时发生。您可能需要外部电子设备来提供准确定时的信号。
安德鲁已为您指出了一些软件。CPU负载将取决于您的工作,但是GPIO本身不会增加任何负载。
如果您在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量可忽略不计。我尚未测试超过三个。
如果您不介意使用Linux Kernel驱动程序,则可以使用Servoblaster将伺服器公开为char设备。
https://github.com/richardghirst/PiBits
我创建了一个新版本,该版本不会消耗所有用于伺服器的gpio引脚。我目前正在使用小型伺服驱动的机器人,该机器人是我使用IPGamePad控制它为机器人俱乐部开发和演示的。
https://github.com/jronald/PiBits
另外,您确实不希望通过RPI为伺服器供电,而是使用单独的电源。当然,您需要将这些理由结合在一起。由于RPI输出到伺服系统,因此不需要任何电压偏移,但是您要非常小心,以免接线错误。
通常,使用PWM信号来控制伺服。您应该将GPIO称为PWM输出。
芯片上有PWM支持,因此我们将来应该可以使用它。基本上,所有软件所做的就是告诉硬件以一定频率产生脉冲。有些人已经在I2C上使用外部PWM控制器取得了成功。
自问了这个问题以来,多年来如何在Pi上做事的知识已大大提高。
在不使用外部硬件的情况下,至少有四种方法可以在Pi的gpios上生成硬件定时PWM / Servo脉冲。
不建议使用内核模块来执行此操作。可以使用以下userland解决方案。
有一个可以正常使用的GPIO Web服务,您可以为其编写自己的插件。它似乎已经支持控制任意数量的伺服器。有关大量图像以及电路板布局,请参见其“内容”目录。
https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb
看起来是在Pi上运行Mono的C#中。