实战microPython(04)-舵机的控制

实战microPython(04)-舵机的控制

David Zou 2018-07-29

在这里插入图片描述
舵机的原理曾经在QSpider中讲过,我们先来回顾一下吧。
舵机的控制原理:
舵机是一种位置伺服的驱动器,与马达不同,我们需要马达提供的是旋转,控制的是转速和方向。而舵机不需要整圈的旋转,需要的是旋转角度并维持住。一般舵机旋转的角度范围是0 度到180 度。舵机引线为3线,分别用棕、红、橙三种颜色进行区分,舵机品牌和生产厂家不同,会有些许差异,使用之前需查看资料。我们使用的是最常见的舵机,棕、红、橙分别对应“电源负极,电源正极,控制信号”。
舵机的伺服系统由可变宽度的脉冲来进行控制,橙色的控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号周期为20ms,理论上脉宽分布应在1ms到2ms 之间,但是,实际上脉宽可由0.5ms 到2.5ms 之间,脉宽和舵机的转角0°~180°相对应。如下图:
在这里插入图片描述
舵机会根据脉冲宽度旋转至对应的角度,但要维持指定的角度,就需要不停的送相同脉宽的信号:
在这里插入图片描述
有一点值得注意的地方,由于舵机牌子和生产批次的不同,对于同一信号,不同牌子和生产批次的舵机旋转的角度也会有所不同。因此,为了能准确定位角度,需要对脉宽的值进行调校。
uPyBoard直接控制舵机:
官方的uPyBoard板上,带有4路舵机控制接口的。位置在这里:
在这里插入图片描述
注意舵机插头的方向:
在这里插入图片描述
uPyBoard彩排针焊接颜色可能不同,但J5字旁边的黑色排针不会变,将舵机插头中棕色线对准黑色插针插上。接口名称为servo1 - servo4,如图中排列顺序:
在这里插入图片描述
我们今天的实验,以servo1接口为例将舵机连接到servo1接口上,如下接图:
在这里插入图片描述
控制方法,还是使用pyb库:
官方文档参考:http://docs.micropython.org/en/latest/pyboard/library/pyb.Servo.html#pyb-servo

import pyb

sv = pyb.Servo(1)   #创建servo对象,并指定连接在X1pin上,也就是servo1

sv.angle(45) # 设定servo旋转到45°,可观察到舵机的运动。

sv.angle(-60, 1500) #指定舵机在1500ms内旋转到-60°位置。

实验很简单,但有几点需要注意:
1 创建pyb.Servo(id)时。id取值1~4。
2 由于每个舵机生产批次和厂家不同,因此会存在差别。在未针对特定的舵机校准前,使用angle()方法指定旋转角度都会存在偏差。而且指定极限角度如-90°或90°时,舵机会发出咔哒声,说明指定的角度实际对应的参数值已经超出舵机的旋转的范围。时间长了会损坏舵机,请立即指定角度0,或上一次正常的角度范围。
3 为校准电机,达到精确指定旋转角度,可使用sv.pulse_width(width)方法,通过指定width的值,找到,舵机旋转最小的width值和最大的width值。并再调用sv.calibration(pulse_min, pulse_max, pulse_centre)方法,用前面测出的width值校准此通道以适应这个舵机。这样调用angle()方法时才能准确指定舵机的旋转角度。
4 舵机的旋转,无论你在使用angle()方法时指没指定时间值,都需要时间才能达到指定的角度。
5 uPyBoard板虽然有4个舵机接口,但在单独使用USB供电的情况下,也需要注意舵机的数量不要接太多。太多或舵机带动大负载时所需电流很大,有可能会烧毁USB接口。

更多资料可关注:
在这里插入图片描述

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MicroPython是一种精简版的Python编程语言,专门用于嵌入式系统和物联网设备。它提供了一种简单而高效的方式来控制各种硬件设备,包括舵机。 要使用MicroPython控制舵机,你需要连接舵机到你的硬件平台上(如Arduino、ESP32等),然后使用MicroPython的GPIO库来控制舵机的信号线。 以下是一个使用MicroPython控制舵机的示例代码: ```python from machine import Pin, PWM import time # 设置舵机信号线连接的引脚 servo_pin = Pin(4) # 创建PWM对象 pwm = PWM(servo_pin) # 设置PWM频率和占空比 pwm.freq(50) # 设置频率为50Hz pwm.duty(40) # 设置占空比为40% # 等待一段时间 time.sleep(2) # 停止PWM输出 pwm.deinit() ``` 在上面的示例中,我们首先导入了`machine`模块中的`Pin`和`PWM`类。然后,我们创建了一个`Pin`对象来表示舵机信号线连接的引脚,并创建了一个`PWM`对象来控制舵机的PWM输出。 接下来,我们设置了PWM的频率为50Hz(舵机通常使用50Hz的频率),并设置了占空比为40%(具体数值可能因舵机而异)。 然后,我们等待了2秒钟,让舵机转动到指定位置。 最后,我们调用`pwm.deinit()`方法停止PWM输出,释放资源。 这只是一个简单的示例,你可以根据具体的舵机型号和需求进行更复杂的控制。请注意,具体的引脚和舵机控制方式可能因硬件平台而异,请参考你所使用的硬件平台和舵机的文档进行配置和控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值