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

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

David Zou 2018-07-29

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

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

你可能感兴趣的:(硬件研发,机器人)