用Python开发四足机器蜘蛛(三)
David Zou
大家好,我是David。今天我们要将8个舵机连接到驱动板上,并用uPYBoord板进行舵机校准和调试。
舵机的控制原理:
舵机是一种位置伺服的驱动器,与马达不同,我们需要马达提供的是旋转,控制的是转速和方向。而舵机不需要整圈的旋转,需要的是旋转角度并维持住。一般舵机旋转的角度范围是0 度到180 度。舵机引线为3线,分别用棕、红、橙三种颜色进行区分,舵机品牌和生产厂家不同,会有些许差异,使用之前需查看资料。我们使用的是最常见的舵机,棕、红、橙分别对应"电源负极,电源正极,控制信号"。
厂家给出的技术数据:
舵机的伺服系统由可变宽度的脉冲来进行控制,橙色的控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号周期为20ms,理论上脉宽分布应在1ms到2ms 之间,但是,实际上脉宽可由0.5ms 到2.5ms 之间,脉宽和舵机的转角0°~180°相对应。如下图:
舵机会根据脉冲宽度旋转至对应的角度,但要维持指定的角度,就需要不停的送相同脉宽的信号:
有一点值得注意的地方,由于舵机牌子和生产批次的不同,对于同一信号,不同牌子和生产批次的舵机旋转的角度也会有所不同。因此,为了能准确定位角度,需要对脉宽的值进行调校。
安装舵机驱动板:
舵机驱动板我们采用的是一块16路驱动板。如图:
首先将主框架上的螺丝孔用1.5的钻头清理通畅,找双面胶粘在驱动板的背后,将驱动板按照图中主框架前后方向粘好,注意:驱动板是要安装在主框架的背面,驱动板的安装孔要对准螺丝孔,控制接口插针朝向框架尾部。确认位置无误后,使用1.7x6的自攻螺丝拧紧固定驱动板。
在板上还可看到0-15的通道号,以及黄红黑三色插针。对于每个通道,黑色插针为舵机电源负极,红色插针对应舵机电源正极,黄色插针对应舵机控制信号。因此,将舵机插头以棕色对准黑针,橙色对准黄针的方向,按照下图所标通道号,插入驱动板上对应的通道接口。
至此完成舵机的接线,由于接线较多,请反复检查各个舵机对应的通道号及方向是否正确。
连接uPYBoard和舵机驱动板:
首先,找5根杜邦线依次插上舵机板后端插针上,OE插针不接。杜邦线另一端按照下图接在uPYBoard板的对应插针上。
请务必认真反复检查接线对应关系,细心和耐心是创客应该培养的基本素质。
uPYBoard控制板,舵机驱动板,舵机,三者连接关系如下图:
舵机的校准及固定:
以上接线准确后,我们准备要校准舵机了。由于我们使用的是USB接口通过uPYBoard给舵机驱动板供电,计算机的USB口无法给8只舵机一起供电,这会烧掉USB口的。为避免不必要的损失,这里有三种方案:
1 舵机驱动板上有个绿色的带螺丝接线的电源口,你可以找另找一个5V直流电源通过这个接线口供电。
2 将uPYBoard板通过带外部电源的USB HUB设备连接到计算机。
3 暂时拔掉7个舵机的接线,驱动板每次只接一个舵机,一个一个校准。
无论哪种方案,都不要直接将连着8只舵机的驱动板和uPYBoard板直接和计算机相连,以免电流过大,损坏USB口。
下面,我们默认使用第三方案来校准舵机。拔掉所有舵机连线,只保留0号通道的主框架右后舵机的连线。
按照《玩转microPython》的方法将uPYBoard控制板连接到计算机,并打开REPL控制台。将我编写的文件拷贝到PYBFLASH盘中,等待uPYBoard板上红灯熄灭。将一摇臂安在0号通道连接的舵机上,用于观察舵机旋转角度。在REPL中输入如下程序:
如果没有报错,说明变量pca已经获得了舵机驱动板的实例。我们可以通过pca来操作驱动板了。
控制舵机时,我们需要产生和角度相对应宽度的脉冲。而产生指定宽度脉冲的函数就是:
setPWM(channel, on, off),其中channel就是通道号0-15中的一个。on和off又是什么呢?还记得我们产生脉冲的周期是20ms吗,为了维持舵机角度稳定,我们必须不停的给舵机脉冲信号,每个脉冲周期是20ms,现在将这20ms的时间分成4096份,用一个计数器计数(0 - 4095),当计数器计数到on指定的数的时候,开始产生正脉冲,直到计数器计数到off指定的数的时候,我们就结束这个脉冲,这样,off 减去 on的计数值就可以确定脉冲宽度了。如下图:
为了方便计算,我们一般将on的值为0,这样off的值就是脉冲的宽度值了。这就是控制脉宽的原理。而我们现在要做的,就是要找到0°时对应的脉宽值,90°时对应的脉宽值以及180°时对应的脉宽值。
在上面的语句执行无误后,接下来,我们输入如下语句:
这会产生一个比较中间的脉宽,让舵机旋转到靠近中点(90°)左右的地方,观察舵机是否转动,如果没有任何动静,请检查舵机连线是否正确。
在舵机正常转动后,我们可以逐渐减小300那个数值,先以50为单位减小,再以20为单位减小。注意观察舵机是否转到头已经听一听舵机是否发出异响。如果听到异响,说明舵机不但已经转到头而且还超出机械允许的范围,此时,必须赶紧增大数值,以免损坏舵机。
脉宽数值的确定以10为单位即可,没必要非常精确到个位值。找到最小数值后,也就是0°对应的脉宽数值,记下这个值备用。在最小值的情况下,也要记下舵机摇臂的位置,找最大值时看是否摇臂旋转约180°了。找最大值,我们先回到中心值,再逐渐增大数值,观察摇臂旋转程度,及听舵机是否有异响。同样,遇到异响,要赶快回到上一个数值。
寻找中间值(90°),从理论上说,知道最大和最小值,它们的差的一半就应该是中间值了。这样也没什么不可以,不过实际观察摇臂的旋转,可能会有偏差,让我们设定90°时,产生较大误差。另外,机械齿轮间会有误差,如果,只确定两端的数值,误差累计较大,我们再确定一个中间数值,分段设置,会减小一半的累计误差。因此,按照之前的方法,我从两端(0°和180°)开始找中间90°对应的脉宽值,这个过程我就不废话了。
假设,我们现在得到了0号通道舵机的三个脉宽值:140(0°),550(180°), 345(90°)三个数。输入如下语句来设置0通道的校准值。
检验无误的话,0号通道舵机校准完成。按照以上步骤,依次校准8个舵机,并记录其3个参数。注意,所有8个舵机的校准参数一定要记录下来,后面还有用。
完成腿部舵机组装:
校准完成后,请将主框架上的0,6,8,14号通道舵机旋转角度分别设置为135°,45°,45°,135°:
将腿部关节部件以垂直主框架向两侧伸展的角度,安装在主框架四个舵机上。如下图:
将四条腿部的舵机2,4,10,12号通道,分别设置为45°,135°,135°,45°:
将腿部与地面水平背靠背的安装在四个腿关节上。如图:
再次检查各个舵机连接对应的通道号是否正确。验证无误后,使用8颗2.0x12的自攻螺丝垂直于腿关节上螺丝孔处拧入固定。
最后,将舵机线整理捆扎后,盖上腹部收纳舱盖。收纳舱盖使用4颗1.7x8的螺丝拧紧。
今天的工作全部完成,收工。请继续关注:创客DIY乐园(MakerDIY-Park)