使用MicroPython和pyboard开发板(13):控制舵机

使用Pyboard控制舵机

pyboard上有4个PWM专用管脚,可用于连接舵机。舵机有三根线,分别是:地线、电源线和PWM信号线。在pyboard上,可以将它们连接在右下角,信号引脚位于最右侧。引脚 X1、X2、X3 和 X4 是 4 个专用PWM信号引脚。

舵机接线

图中的公母双头适配器用于将舵机连接到电路板上的针座。舵机上的接地线通常是颜色最深的那根,黑色或深棕色,电源线一般是红色,信号线通常是黄色。

舵机的电源引脚(标为 VIN)直接连接到pyboard的输入电源。通过USB供电时,VIN 通过一个二极管由 5V USB电源线供电。连接到USB时,pyboard可为4个小舵机供电。

如果用电池为pyboard和舵机供电,要确保电池电压不大于6V,这也是大多数舵机所能承受的最大电压(有些舵机最高只能承受4.8V,因此要注意检查使用的是哪种类型的电池)。

创建Servo对象

在位置1(即引脚为X1的那个)上插入一个舵机,使用下面的方法可以创建一个舵机对象:

>>> servo1 = pyb.Servo(1)

要改变舵机的角度,可以使用angle()方法:

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

角度的单位为度,范围约为-90至+90,具体情况取决于具体的舵机,调用不带参数的角度将返回当前角度:

>>> servo1.angle()
-60

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

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

>>> servo1.angle(50, 1000)

该命令会直接返回,但舵机将继续移动到指定的角度,并在到达该角度时停止,所以这个功能可以用于舵机速度的控制,或同步2个或多个舵机。

下面的例子可以让两个舵机一起转动,并在2秒内达到指定角度:

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

注意:上述两个表达式之间使用分号是为了在 REPL 提示下按回车键时,它们能顺序执行。在实际的代码中不需要这样做,可以分两行写。

连续转动舵机

以上使用的是都是标准的舵机,可以控制它们移动到一个特定的角度并保持在该角度。这些舵机可用于创建机器人的关节,或类似云台的机构。舵机内部有一个可变电阻(电位计),用于测量当前角度,并根据距离所需角度的远近按比例向电机供电,所需角度由舵机信号线上的脉冲宽度设定,1500微秒的脉冲宽度对应中心位置(0 度)。脉冲发送频率为50赫兹,即每秒50个脉冲。

市面上也可以买到顺时针或逆时针连续转动的舵机,旋转方向和速度由信号线上的脉冲宽度决定,脉冲宽度为1500微秒时,电机停止转动,脉冲宽度小于或大于此值,则表示以给定速度单向或双向旋转。

在pyboard上,连续旋转电机的舵机对象与上面的相同,使用角度可以设置转动的速度,但为了便于理解,还有一个speed方法可以设置速度:

>>> servo1.speed(30)

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

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

上面的最后一条命令将使舵机停止,但需要2秒才能完成,因为指定了舵机的速度。

舵机速度的最大值是100(或-100),但实际上可以比这更快一些,这取决于特定的电机。

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

校准

从角度或速度到脉冲宽度的转换由舵机对象使用其校准值完成。要获取当前校准值,可使用

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

返回一个元组,有5个数字,他们分别代表:

  1. 最小脉冲宽度;舵机可接受的最小脉冲宽度。
  2. 最大脉冲宽度;舵机可接受的最大脉冲宽度。
  3. 中心脉冲宽度;使舵机处于0度或0速度的脉冲宽度。
  4. 对应90度的脉冲宽度。这设定了角度到脉冲宽度的转换方法。
  5. 速度100对应的脉冲宽度。设置速度的速度与脉冲宽度之间的转换。

可以通过以下方式重新校准舵机(更改默认值):

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

当然,也可以根据具体的舵机修改上述数值。

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值