连接伺服电机可能是许多项目中的一项基本任务,例如构建定制机器人。可以采用多种方法将伺服电机与Raspberry Pi连接起来。本文介绍了其中的两种,并解释了伺服电机的工作原理。这些知识将使读者能够使用不同的微控制器,甚至是简单的基于555定时器的电路来控制伺服系统。
伺服电机是如何工作的?
通常,伺服系统具有三个输入,其中两个为位于塑料体内的电机供电。第三个输入控制伺服转动多少。
通常,输入信号是脉宽调制(PWM)信号,其频率不会随时间变化。相反,当PWM输入信号的占空比发生变化时,伺服电机会旋转到某个角度。本例中使用的舵机总共可以转动180度(每个方向90度)。当占空比为5%(一毫秒长的高脉冲)时,伺服旋转到其最小位置。如果占空比变为10%(这是一个两毫秒长的高脉冲),伺服会一直向右旋转。之间的占空比与-90和+90之间的不同角度相关。但是,这些数字可能因不同的伺服系统和制造商而异。因此,始终有必要查阅伺服的数据表。
请注意,Raspberry Pi不应为伺服提供电压。相反,使用外部电源来驱动伺服电机,因为Raspberry Pi的GPIO引脚可能无法提供足够的电源来使电机以可接受的速度转动。
如何用树莓派控制伺服电机?
要使树莓派控制伺服电机,请将伺服器的+5 V和GND线连接到外部电源,将剩余的信号线连接到树莓派的任何I/O引脚。
不要忘记将Raspberry Pi的任何GND引脚也连接到电源的地。
如上所述,伺服系统通常需要一个PWM信号来告诉它们转向哪里。因此,有多种方法可以将舵机旋转到特定角度。一种方法是使用包含伺服模块的gpiozero库。您可以使用pip在Raspberry Pi上安装该库。如果尚未安装rpi.gpio包,也请下载它。否则,gpiozero库将无法工作:
复制代码
sudo apt-get install python3-rpi.gpiosudo pip3 install gpiozero
完成后,就可以执行以下脚本:
复制代码
from gpiozero import Servofrom time import sleep servo = Servo(25)try: while True: servo.min() sleep(0.5) servo.mid() sleep(0.5) servo.max() sleep(0.5)except KeyboardInterrupt: print("Program stopped")
如您所见,该库允许您快速将伺服转向三个预定义位置之一。这个简单的python脚本首先导入所需的库。然后,它定义伺服在开始无限循环之前连接到引脚25,在该无限循环中,伺服旋转到其最小、中间和最大位置。在角度变化之间,脚本等待半秒。
但是,库也可以通过直接将舵机的值设置为-1和1之间的数字来指示舵机转向舵机最小值和最大值之间的任何位置。负值对应于舵机的最小位置,一个代表舵机的最大旋转:
复制代码
from gpiozero import Servo from time import sleep servo = Servo(25)val = -1try: while True: servo.value = val sleep(0.1) val = val + 0.1 if val > 1: val = -1except KeyboardInterrupt: print("Program stopped")
这个简单的脚本与前一个脚本的工作方式类似。然而,它在每次循环迭代中直接设置舵机的值,而不是使舵机旋转到三个预定义位置之一。
请注意,此库仅代表使用Raspberry Pi控制伺服的一种方式。同样,您也可以使用不同的库,例如pigpio,并直接操纵进入伺服器的PWM输出信号,使其转向指定位置。
控制多个舵机的另一种方法
任何树莓派编号的I/O引脚都能够控制伺服系统。但是,如果您想控制更多的伺服系统,或者您的项目需要GPIO引脚用于其他用途,那么也可以使用伺服控制器板。
这些模块通常通过I2C与微控制器或类似设备通信,因此可以仅使用Raspberry Pi的两个GPIO引脚来控制许多伺服系统。但是,您可以购买许多不同类型的模块,它们的工作方式通常大不相同。因此,您应该查阅模块的数据表以了解如何使用它。
概括
与普通直流电机不同,伺服系统通常不能旋转完整的360度。相反,它们在某个最小和最大角度之间转动。具有恒定频率的脉宽调制输入信号控制旋转。该信号的占空比直接对应于电机的角度。当输入信号的占空比增加时,伺服会向其最大位置旋转。树莓派可以通过软件直接同时控制多个舵机。每个编号的GPIO引脚都可以管理一个舵机。但是,不建议使用Raspberry Pi为伺服器供电。相反,它们应该连接到外部电源。伺服控制器板是一次控制大量伺服的不错选择。