多自由度人形双足舞蹈机器人
多个舵机不同速率转动
——疯壳·机器人开发系列
1相关简介
本章将介绍两个舵机的不同速率转动原理以及代码实现,多个舵机不同速率的转动跟两个舵机的不同速率转动的原理基本一致。
首先要知道的一点就是我们的舵机速率是一定的,不可控制。我们要完成两个舵机不同速率的转动,是采用了一个积分算法。其实就是延时,从而降低一个或者多个舵机的转动速率。
我们先举个例子。假设 1 号舵机要从 0°转到 180°,同时 2 号舵机要从 0° 转到 90°。如果不做任何处理,那么当 1 号、2 号舵机同时转到 90°时,2 号舵机不转,1 号舵机继续转动到 180°。这样就会导致机器人难以完成许多动作。假设舵机直接从 0°转到 180°的时间是 t,那么 2 号舵机实际转动时间就是t/2,暂停时间是 t/2。如果我们将整个时间 t 分成 n 份,每次先让舵机转动 t/2n,然后再暂停 t/2n。当 n 足够大时,我们的舵机就可以按照以原来二分之一的角速度匀速转动,从而达到控制舵机的转速。
2硬件设计
本次将要控制机器人的两条腿,也就是 2、16 号舵机,对应的 IAP15W4K61S4 单片机管脚是 P15 和 P44,通过这两个 IO 口连接 74HC244 间接控制两个腿部舵机。
图 1
3软件设计
软件方面,关于舵机的控制可以参考上一章节,这里只讲解积分算法。按照前面所提及的例子,我们的时间份数 n 应该尽可能大,这样才会使舵机转动得更加均匀。但由于实际情况下,舵机的控制时间是 2.5ms,那么分成的最小时间块的长度就不能小于 2.5ms。
在本次代码中,我们设置一个动作完成时间(舵机从目前角度转到目标角度的时间,时间可以自己设置)是 1s,那么时间份数,也就是积分次数就是NeedCount = 1000*2/5(1000 除以 2.5)。每一次装载的 PWM 对应的角度为当前角度加上动作角度差的 NeedCount 分之一,从而实现舵机的近似匀速转动。
本次积分代码如下。
代码1
4实验现象
首先打开下载软件 STC-ISP。
图 2
(1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。
图 3
(2)添加完 STC 相关的头文件,点击弹窗中的确定。
图 4
(3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。
图 5
(4)点击打开程序文件,选择我们例程中的.hex 文件。
图 6
(5)点击下载/编程,下载代码。
图 7
(6)按一下电路板上面的 RST 按键,完成下载。
图 8
代码下载完成之后,打开机器人的电源开关,运行代码,就能看到我们的机器人的两条腿以不同的速率上下摆动。
QQ 群:457586268