用 pyboard 控制 hobby 伺服电机

在 pyboard 板上有4个用于连接业余hobby伺服电机的专用连接点。这些电机有3条线:地线、电源线和信号线。您可在板上将三条线连接在右下角,信号引脚在最右边。引脚X1、X2、X3和X4是4个专用伺服信号引脚。

这张图片中呈现了将伺服电机用公对公杜邦线连接到pyboard。

伺服上的地线通常是深色的,可能为黑色或深棕色。电源线最有可能是红色。

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

若您使用电池为pyboard供电并运行伺服电机,请确保电压不大于6V,6V为大多数伺服电机可承受的最大电压。(有些电机最高仅支持4.8V,所以请仔细查看您所使用的电机类型)。

创建Servo对象

将一个伺服插入位置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秒后到达各自的最终角度。

注意:上述两表达式中的使用分号使在您点击Enter键后可一个接一个地执行。在脚本中您无需使用分号,您只需在一行结束后在下一行写入。

连续旋转伺服

目前我们已在使用移动到特定角度后停留在该角度的标准伺服。这些伺服电机可用于创建机器人的关节, 或诸如平面-倾斜机制等。在其内部,电机有一个可变电阻器(电位计), 其作用为测量当前角度和向电机施加与其到达预设角度的距离成正比的功率。 此预设角度由在伺服信号线上的高脉冲的宽度设定。1500微秒的脉宽对应中心位置(0度)。 脉冲以50Hz频率发送,即每秒50脉冲。

您也可获取顺/逆时针旋转的连续旋转伺服电机。旋转的角度和速度由信号线上的脉宽设定。 1500微秒的脉宽对应停止的电机。大于或小于此角度的脉宽即代表以给定速度顺/逆时针旋转。

在pyboard上,连续旋转电机的Servo对象与前无异。实际上,您可使用 angle 来设置速度。 但是,为方便大家理解,此处我们提供另外一种设置速度的方法,称为 speed :

>>> servo1.speed(30)

speed 与 angle 功能相同:您可获取并设置速度,并设置到达最终速度所需时间。:

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

上述的最后一条指令将电机设置为停止,但需耗时2秒使其停止。这实际是对连续伺服加速度的控制。

通常认为,伺服速度100(或-100)即为最大速度,但实际上您可取比其略大的数值,具体情况取决于特定电机。

angle 和 speed 方法的唯一区别(除名称外)在于输入数字(角度或速度)转换为脉宽。

校准

从角度/速度到脉宽的转换是由伺服对象使用其校准值完成的。使用以下代码获取当前校准:

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

此处有5个数字,其意为:
最小脉宽;伺服接受的最小脉宽。
最大脉宽;伺服接受的最大脉宽。
中心脉宽;使伺服处于0度或0速度的脉宽。
与90度对应的脉宽。这就设置了角度的 angle 方法到脉宽的转换。
与速度100相对应的脉宽。这就设置了速度的 speed 方法与脉宽的转换。

您可使用以下代码重新校正伺服(更改其默认值):

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

当然,您可根据特定伺服电机更改上述值。



坐沙发

发表评论

你的邮件地址不会公开


*