1. 控制爱好伺服电机

pyboard 上有 4 个专用连接点,用于连接业余伺服电机(参见例如 Wikipedia)。这些电机有 3 条线:地线、电源线和信号线。在 pyboard 上,您可以将它们连接在右下角,信号引脚在最右侧。引脚 X1、X2、X3 和 X4 是 4 个专用的伺服信号引脚。

../../_images/pyboard_servo.jpg

在这张图片中,有公-公双适配器将伺服器连接到 pyboard 上的插头引脚。

舵机上的地线通常是最深的颜色,黑色或深棕色。电源线很可能是红色的。

伺服系统的电源引脚(标有 VIN)直接连接到 pyboard 的输入电源。通过 USB 供电时,VIN 由 5V USB 电源线通过二极管供电。连接到USB,pyboard可以为至少4个中小型伺服电机供电。

如果使用电池为 pyboard 供电并运行伺服电机,请确保它不大于 6V,因为这是大多数伺服电机可以承受的最大电压。(有些电机最多只需要 4.8V,所以请检查您使用的是什么类型。)

1.1. 创建伺服对象

将伺服插入位置 1(带有引脚 X1 的那个)并使用以下命令创建伺服对象:

>>> servo1 = pyb.Servo(1)

要改变伺服的角度,请使用以下angle 方法:

>>> servo1.angle(45)
>>> servo1.angle(-60)

这里的角度以度为单位,范围从大约 -90 到 +90,具体取决于电机。angle不带参数调用将返回当前角度:

>>> servo1.angle()
-60

请注意,对于某些角度,由于设置脉冲宽度时的舍入误差,返回的角度与您设置的角度不完全相同。

您可以向该 angle 方法传递第二个参数,该参数指定达到所需角度所需的时间(以毫秒为单位)。例如,要花费 1 秒(1000 毫秒)从当前位置转到 50 度,请使用

>>> servo1.angle(50, 1000)

该命令将立即返回,伺服将继续移动到所需的角度,并在到达时停止。您可以将此功能用作速度控制,或同步 2 个或更多伺服电机。如果我们有另一个伺服电机 ( ) 那么我们可以做servo2 = pyb.Servo(2)

>>> servo1.angle(-45, 2000); servo2.angle(60, 2000)

这将使舵机一起移动,使它们都需要 2 秒才能达到最终角度。

注意:上面 2 个表达式之间使用了分号,这样当您在 REPL 提示符下按 Enter 时,它们会一个接一个地执行。在脚本中,您不需要这样做,您可以一行一行地编写它们。

1.2. 连续旋转舵机

到目前为止,我们一直在使用移动到特定角度并保持在该角度的标准伺服系统。这些伺服电机可用于创建机器人的关节,或诸如云台机构之类的东西。在内部,电机有一个可变电阻器(电位计),用于测量当前角度,并根据距离所需角度的远近向电机施加功率。所需角度由伺服信号线上的高脉冲宽度设置。1500 微秒的脉冲宽度对应于中心位置(0 度)。脉冲以 50 Hz 的频率发送,即每秒 50 个脉冲。

您还可以获得 连续旋转的 伺服电机,可以顺时针或逆时针连续旋转。旋转的方向和速度由信号线上的脉冲宽度设置。1500 微秒的脉冲宽度对应于停止的电机。比这更小或更大的脉冲宽度意味着以给定的速度以一种或另一种方式旋转。

在pyboard上,连续旋转电机的伺服对象与之前相同。事实上,使用 angle 你可以设置速度。但为了更容易理解意图,还有另一种speed设置速度的方法:

>>> servo1.speed(30)

speed具有相同的功能angle:您可以获取速度,设置它,并设置一个时间以达到最终速度。

>>> servo1.speed()
30
>>> servo1.speed(-20)
>>> servo1.speed(0, 2000)

上面的最后一个命令将设置电机停止,但需要 2 秒钟才能完成。这本质上是对连续伺服加速度的控制。

100(或-100)的伺服速度被认为是最大速度,但实际上你可以比这快一点,这取决于特定的电机。

anglespeed方法之间的唯一区别(名称除外)是输入数字(角度或速度)转换为脉冲宽度的方式。

1.3. 校准

从角度或速度到脉冲宽度的转换是由伺服对象使用其校准值完成的。要获得当前校准,请使用

>>> servo1.calibration()
(640, 2420, 1500, 2470, 2200)

这里有5个数字,它们的含义是:

  1. 最小脉冲宽度;伺服器接受的最小脉冲宽度。

  2. 最大脉冲宽度;伺服接受的最大脉冲宽度。

  3. 中心脉冲宽度;将伺服器置于 0 度或 0 速度的脉冲宽度。

  4. 90度对应的脉冲宽度。这设置了angle 角度到脉冲宽度方法中的转换。

  5. 速度100对应的脉冲宽度。这里设置speed 速度到脉冲宽度的转换方法。

您可以使用以下方法重新校准伺服(更改其默认值):

>>> servo1.calibration(700, 2400, 1510, 2500, 2000)

当然,您可以更改上述值以适合您的特定伺服电机。