Raspberry Pi GPIO 教程(4)伺服电机控制

伺服电机是一种多功能设备,用于机电项目中的运动控制。您可以在机器人、医疗设备和安全等各个领域使用它。

伺服电机仅使用一个 IO 引脚来控制位置。

伺服电机如何工作?

伺服电机是一种机电设备。通常包含直流电机,变速齿轮,电位计(Potentiometer),控制电路,可以接受 PWM(脉冲宽度调制)信号并测量其准时脉冲宽度。电位计有助于跟踪轴的位置。

嵌入式电路板不断检测并纠正轴位置的意外偏移。目标位置通过轴位置和用户输入之间的连续误差校正来维持。

Image

伺服电机内部结构

在下图中,您可以看到一个非常常见的业余爱好者用的伺服电机。它有三个引脚:

Image
引线名称颜色描述
PMW电机输入信号
V+电源正极
Ground棕色接地

要控制伺服电机,您需要发送频率为 50 Hz 的 PWM 信号。通常的频率可以在 40 Hz 和 400 Hz 之间。

为什么选择 40 Hz 而不是 400 Hz?(反之亦然)

随着 PWM 信号频率的增加,伺服到达新位置所需的时间会减少。400 Hz 意味着 2.5 ms 的延迟,而 40 Hz 则为 25 ms 的延迟。这是在更好的精度(40 Hz)和更快的操作(400 Hz)之间的权衡。

Image

您可以通过将 PWM 脉冲宽度从 1 毫秒改变到 2 毫秒来将伺服电机轴从 0° 旋转到 180°。

以下是典型业余爱好者伺服电机中轴位置的备忘单:

  • “0°”(~1 毫秒脉冲)
  • “90°”(~1.5 毫秒脉冲)
  • “180°”(~2 毫秒脉冲)

在Protues中建立以下电路,伺服电机中间的引脚接到Raspberry Pi的18号pin,另外两根分别接电源和地。

Image

其中伺服电机选Motor-PWM Servo

Image

双击伺服电机,将角度调整为0-180°。

Image

让我们将步进电机驱动到 0°、90° 和 180°,并观察伺服控制信号引脚上的波形。

案例 1:伺服电机处于 0° 位置

在源代码窗口输入以下代码:

import RPi.GPIO as GPIO
from time import sleep

# Main function
def main():
    # Setup
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(18, GPIO.OUT)
    myPWM = GPIO.PWM(18, 50)

    # Infinite loop
    while 1:
        myPWM.start(5)
        sleep(1)

# Command line execution
if __name__ == '__main__':
    main()

这行代码,将PWM信号的频率设为50Hz(20ms)

myPWM = GPIO.PWM(18, 50)

这行代码,将PWM信号的占空比设为5% (1ms)

myPWM.start(5)
Image

伺服马达显示旋转角度为0°

案例 2:伺服电机处于 90° 位置

更新您在 myPWM.start函数中发送的参数,使伺服电机旋转 90°。

myPWM.start(7.5)

计算过程1.5ms/20ms x 100 = 7.5%

Image

伺服马达显示旋转角度为90°案例 3:伺服电机处于 180° 位置

更新您在 myPWM.start函数中发送的参数,使伺服电机旋转 180°。

myPWM.start(10)

计算过程2ms/20ms x 100 = 10%

Image

伺服马达显示旋转角度为180°

您是否注意到伺服电机角度仅取决于信号的开启时间?即使您将频率从 50 Hz 更改为 100 Hz,伺服电机角度仍将保持不变。因此,伺服电机不是真正的 PWM 控制设备。

PWM 传达有关所输送功率的信息,但这些信息不会反映在伺服电机位置中。

举例来说 – 开启时间为 2 毫秒、周期为 2.5 毫秒(占空比为 80%)的 PWM 信号比开启时间为 2 毫秒、周期为 50 毫秒(占空比为 5%)的 PWM 信号输送的功率更大。

但伺服电机将以相同的方式响应这两个 PWM 信号。

附加部分 — 带反馈的伺服电机

伺服电机已经包括反馈电路,可帮助电机连续调整轴位置。特定伺服电机还具有额外的第四条线,可输出指示当前轴位置的模拟值。

伺服电机根据 PWM 脉冲宽度控制轴的位置,但如果伺服控制电路已经处理了位置精度,为什么还要读取反馈?

附加反馈信号在许多情况下都很有用。

功率不足 — 驱动负载的功率不足会导致伺服电机停止在非预期位置。

为什么会发生这种情况?如果电机的电源不足以克服负载的阻力,则会发生这种情况,导致电机在到达所需位置之前停转或停止。

可能导致此问题的其他因素包括电压或电流设置不正确、电机或负载的机械问题以及控制电路的电子问题。

接线问题 —可能导致伺服电机因功率不足而停止在错误位置的一个潜在问题是控制线断开。在三线伺服中,这可能很难检测到,因为没有直接的方法来检查连接状态。

节省时间 — 您知道吗,延迟对我们的伺服电机很重要。它需要足够的时间才能到达目的地。如果我们没有给它足够的时间,它就不会到达目标位置,那就不好了。想象一下,在一个复杂的项目中不激活开关或只从机械臂获得部分运动。

但是,另一方面,如果我们给它太多时间,那只是在浪费时间,整个操作会变慢。所以,一切都是为了找到那个最佳点。 在这种情况下,反馈引脚可以成为救星。操作如下:设置好目标位置,然后开始关注反馈引脚。一旦确定伺服器已经到达它应该在的位置,就可以继续下一步。这样,你就可以确保项目高效运行。